@@ -631,7 +631,7 @@ def _serialize(self, target_obj, data_type=None, **kwargs):
631631 if xml_desc .get ("attr" , False ):
632632 if xml_ns :
633633 ET .register_namespace (xml_prefix , xml_ns )
634- xml_name = "{}{}" .format (xml_ns , xml_name )
634+ xml_name = "{{{}} }{}" .format (xml_ns , xml_name )
635635 serialized .set (xml_name , new_attr ) # type: ignore
636636 continue
637637 if xml_desc .get ("text" , False ):
@@ -664,8 +664,9 @@ def _serialize(self, target_obj, data_type=None, **kwargs):
664664 _serialized .update (_new_attr ) # type: ignore
665665 _new_attr = _new_attr [k ] # type: ignore
666666 _serialized = _serialized [k ]
667- except ValueError :
668- continue
667+ except ValueError as err :
668+ if isinstance (err , SerializationError ):
669+ raise
669670
670671 except (AttributeError , KeyError , TypeError ) as err :
671672 msg = "Attribute {} in object {} cannot be serialized.\n {}" .format (attr_name , class_name , str (target_obj ))
@@ -743,6 +744,8 @@ def query(self, name, data, data_type, **kwargs):
743744
744745 :param data: The data to be serialized.
745746 :param str data_type: The type to be serialized from.
747+ :keyword bool skip_quote: Whether to skip quote the serialized result.
748+ Defaults to False.
746749 :rtype: str
747750 :raises: TypeError if serialization fails.
748751 :raises: ValueError if data is None
@@ -751,10 +754,8 @@ def query(self, name, data, data_type, **kwargs):
751754 # Treat the list aside, since we don't want to encode the div separator
752755 if data_type .startswith ("[" ):
753756 internal_data_type = data_type [1 :- 1 ]
754- data = [self .serialize_data (d , internal_data_type , ** kwargs ) if d is not None else "" for d in data ]
755- if not kwargs .get ("skip_quote" , False ):
756- data = [quote (str (d ), safe = "" ) for d in data ]
757- return str (self .serialize_iter (data , internal_data_type , ** kwargs ))
757+ do_quote = not kwargs .get ('skip_quote' , False )
758+ return str (self .serialize_iter (data , internal_data_type , do_quote = do_quote , ** kwargs ))
758759
759760 # Not a list, regular serialization
760761 output = self .serialize_data (data , data_type , ** kwargs )
@@ -893,6 +894,8 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs):
893894 not be None or empty.
894895 :param str div: If set, this str will be used to combine the elements
895896 in the iterable into a combined string. Default is 'None'.
897+ :keyword bool do_quote: Whether to quote the serialized result of each iterable element.
898+ Defaults to False.
896899 :rtype: list, str
897900 """
898901 if isinstance (data , str ):
@@ -905,9 +908,18 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs):
905908 for d in data :
906909 try :
907910 serialized .append (self .serialize_data (d , iter_type , ** kwargs ))
908- except ValueError :
911+ except ValueError as err :
912+ if isinstance (err , SerializationError ):
913+ raise
909914 serialized .append (None )
910915
916+ if kwargs .get ('do_quote' , False ):
917+ serialized = [
918+ '' if s is None else quote (str (s ), safe = '' )
919+ for s
920+ in serialized
921+ ]
922+
911923 if div :
912924 serialized = ["" if s is None else str (s ) for s in serialized ]
913925 serialized = div .join (serialized )
@@ -952,7 +964,9 @@ def serialize_dict(self, attr, dict_type, **kwargs):
952964 for key , value in attr .items ():
953965 try :
954966 serialized [self .serialize_unicode (key )] = self .serialize_data (value , dict_type , ** kwargs )
955- except ValueError :
967+ except ValueError as err :
968+ if isinstance (err , SerializationError ):
969+ raise
956970 serialized [self .serialize_unicode (key )] = None
957971
958972 if "xml" in serialization_ctxt :
@@ -1273,7 +1287,7 @@ def _extract_name_from_internal_type(internal_type):
12731287 xml_name = internal_type_xml_map .get ("name" , internal_type .__name__ )
12741288 xml_ns = internal_type_xml_map .get ("ns" , None )
12751289 if xml_ns :
1276- xml_name = "{}{}" .format (xml_ns , xml_name )
1290+ xml_name = "{{{}} }{}" .format (xml_ns , xml_name )
12771291 return xml_name
12781292
12791293
@@ -1297,7 +1311,7 @@ def xml_key_extractor(attr, attr_desc, data):
12971311 # Integrate namespace if necessary
12981312 xml_ns = xml_desc .get ("ns" , internal_type_xml_map .get ("ns" , None ))
12991313 if xml_ns :
1300- xml_name = "{}{}" .format (xml_ns , xml_name )
1314+ xml_name = "{{{}} }{}" .format (xml_ns , xml_name )
13011315
13021316 # If it's an attribute, that's simple
13031317 if xml_desc .get ("attr" , False ):
0 commit comments