From 736ac88c518267d2bb551ae1385b179a9b72b305 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 13 Feb 2020 14:11:16 +0100 Subject: [PATCH] mdel_ddpacs: handle xs:double as decimal strings (#39820) --- passerelle/apps/mdel_ddpacs/models.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/passerelle/apps/mdel_ddpacs/models.py b/passerelle/apps/mdel_ddpacs/models.py index 809fce2f..ca158e0e 100644 --- a/passerelle/apps/mdel_ddpacs/models.py +++ b/passerelle/apps/mdel_ddpacs/models.py @@ -16,6 +16,7 @@ # along with this program. If not, see . from __future__ import unicode_literals +from decimal import Decimal from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -31,6 +32,7 @@ from . import abstract class DDPACSSchema(JSONSchemaFromXMLSchema): type_map = { 'CiviliteType': 'civilite', + '{http://www.w3.org/2001/XMLSchema}double': 'double', } civilite_map = { 'Monsieur': 'M', @@ -44,6 +46,20 @@ class DDPACSSchema(JSONSchemaFromXMLSchema): 'enum': ['Madame', 'Monsieur'], } + @classmethod + def schema_double(cls): + return { + 'anyOf': [ + { + 'type': 'number' + }, + { + 'type': 'string', + 'pattern': r'[0-9]*(\.[0-9]*)?', + } + ] + } + def encode_civilite(self, obj): try: return self.civilite_map[obj] @@ -56,6 +72,12 @@ class DDPACSSchema(JSONSchemaFromXMLSchema): return xmlschema.ElementData(tag=data.tag, text=key, content=data.content, attributes=data.attributes) raise xmlschema.XMLSchemaValidationError(self, data, reason='civilite invalide %s') + def decode_double(self, data): + return data._replace(text=str(data.text)) + + def encode_double(self, obj): + return float(obj) + class Resource(abstract.Resource): category = _('Civil Status Connectors') -- 2.24.0