Skip to content

Commit 0d1b20b

Browse files
authored
Add support for x-ms-text (#218)
1 parent 8152f22 commit 0d1b20b

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

msrest/serialization.py

+7
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,9 @@ def _serialize(self, target_obj, data_type=None, **kwargs):
534534
xml_name = "{{{}}}{}".format(xml_ns, xml_name)
535535
serialized.set(xml_name, new_attr)
536536
continue
537+
if xml_desc.get("text", False):
538+
serialized.text = new_attr
539+
continue
537540
if isinstance(new_attr, list):
538541
serialized.extend(new_attr)
539542
elif isinstance(new_attr, ET.Element):
@@ -1247,6 +1250,10 @@ def xml_key_extractor(attr, attr_desc, data):
12471250
if xml_desc.get("attr", False):
12481251
return data.get(xml_name)
12491252

1253+
# If it's x-ms-text, that's simple too
1254+
if xml_desc.get("text", False):
1255+
return data.text
1256+
12501257
# Scenario where I take the local name:
12511258
# - Wrapped node
12521259
# - Internal type is an enum (considered basic types)

tests/test_xml_serialization.py

+45
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ class XmlModel(Model):
102102

103103
assert result.language == u"français"
104104

105+
def test_basic_text(self):
106+
"""Test a XML with unicode."""
107+
basic_xml = u"""<?xml version="1.0" encoding="utf-8"?>
108+
<Data language="english">I am text</Data>"""
109+
110+
class XmlModel(Model):
111+
_attribute_map = {
112+
'language': {'key': 'language', 'type': 'str', 'xml':{'name': 'language', 'attr': True}},
113+
'content': {'key': 'content', 'type': 'str', 'xml':{'text': True}},
114+
}
115+
_xml_map = {
116+
'name': 'Data'
117+
}
118+
119+
s = Deserializer({"XmlModel": XmlModel})
120+
result = s(XmlModel, basic_xml, "application/xml")
121+
122+
assert result.language == "english"
123+
assert result.content == "I am text"
124+
105125
def test_add_prop(self):
106126
"""Test addProp as a dict.
107127
"""
@@ -753,6 +773,31 @@ class XmlModel(Model):
753773

754774
assert_xml_equals(rawxml, basic_xml)
755775

776+
def test_basic_text(self):
777+
"""Test a XML with unicode."""
778+
basic_xml = ET.fromstring("""<?xml version="1.0" encoding="utf-8"?>
779+
<Data language="english">I am text</Data>""")
780+
781+
class XmlModel(Model):
782+
_attribute_map = {
783+
'language': {'key': 'language', 'type': 'str', 'xml':{'name': 'language', 'attr': True}},
784+
'content': {'key': 'content', 'type': 'str', 'xml':{'text': True}},
785+
}
786+
_xml_map = {
787+
'name': 'Data'
788+
}
789+
790+
mymodel = XmlModel(
791+
language="english",
792+
content="I am text"
793+
)
794+
795+
s = Serializer({"XmlModel": XmlModel})
796+
rawxml = s.body(mymodel, 'XmlModel')
797+
798+
assert_xml_equals(rawxml, basic_xml)
799+
800+
756801
def test_direct_array(self):
757802
"""Test an ultra basic XML."""
758803
basic_xml = ET.fromstring("""<?xml version="1.0"?>

0 commit comments

Comments
 (0)