Commit 22d3da6e authored by Jérome Perrin's avatar Jérome Perrin

Formulator: repair FormToXML for py2

See merge request nexedi/erp5!2003
parents e627161e 6316d9bb
Pipeline #37697 failed with stage
in 0 seconds
...@@ -21,14 +21,12 @@ def formToXML(form, prologue=1): ...@@ -21,14 +21,12 @@ def formToXML(form, prologue=1):
else: else:
value = 'false' value = 'false'
sub_element = SubElement(form_as_xml, id) sub_element = SubElement(form_as_xml, id)
sub_element.text = str(value) sub_element.text = str2unicode(str(value), encoding)
if six.PY2:
sub_element.text = str2unicode(sub_element.text, encoding)
groups = SubElement(form_as_xml, 'groups') groups = SubElement(form_as_xml, 'groups')
# export form groups # export form groups
for group in form.get_groups(include_empty=1): for group in form.get_groups(include_empty=1):
group_element = SubElement(groups, 'group') group_element = SubElement(groups, 'group')
group_element.append(E.title(group)) group_element.append(E.title(str2unicode(group, encoding)))
fields = SubElement(group_element, 'fields') fields = SubElement(group_element, 'fields')
for field in form.get_fields_in_group(group, include_disabled=1): for field in form.get_fields_in_group(group, include_disabled=1):
...@@ -59,24 +57,19 @@ def formToXML(form, prologue=1): ...@@ -59,24 +57,19 @@ def formToXML(form, prologue=1):
if not isinstance(value, six.string_types): if not isinstance(value, six.string_types):
value = str(value) value = str(value)
value_element = SubElement(values_element, key) value_element = SubElement(values_element, key)
value_element.text = str(value) value_element.text = str2unicode(str(value), encoding)
if six.PY2:
value_element.text = str2unicode(value_element.text, encoding)
tales_element = SubElement(field_element, 'tales') tales_element = SubElement(field_element, 'tales')
items = sorted(field.tales.items()) items = sorted(field.tales.items())
for key, value in items: for key, value in items:
if value: if value:
tale_element = SubElement(tales_element, key) tale_element = SubElement(tales_element, key)
tale_element.text = str(value._text) tale_element.text = str2unicode(str(value._text), encoding)
if six.PY2:
tale_element.text = str2unicode(tale_element.text, encoding)
messages = SubElement(field_element, 'messages') messages = SubElement(field_element, 'messages')
for message_key in field.get_error_names(): for message_key in field.get_error_names():
message_element = SubElement(messages, 'message', name=message_key) message_element = SubElement(messages, 'message', name=message_key)
message_element.text = field.get_error_message(message_key) message_element.text = str2unicode(field.get_error_message(message_key), encoding)
if six.PY2:
message_element.text = str2unicode(message_element.text, encoding)
# Special attribute for ProxyFields *delegated_list* # Special attribute for ProxyFields *delegated_list*
delegated_list = getattr(field, 'delegated_list', []) delegated_list = getattr(field, 'delegated_list', [])
if delegated_list: if delegated_list:
...@@ -90,6 +83,4 @@ def formToXML(form, prologue=1): ...@@ -90,6 +83,4 @@ def formToXML(form, prologue=1):
else: else:
xml = etree.tostring(form_as_xml, encoding=form.stored_encoding, xml = etree.tostring(form_as_xml, encoding=form.stored_encoding,
xml_declaration=True, pretty_print=True) xml_declaration=True, pretty_print=True)
if six.PY3: return bytes2str(xml)
xml = bytes2str(xml)
return xml
...@@ -189,6 +189,41 @@ class SerializeTestCase(unittest.TestCase): ...@@ -189,6 +189,41 @@ class SerializeTestCase(unittest.TestCase):
# if we have forgotten something, this will usually remind us ;-) # if we have forgotten something, this will usually remind us ;-)
self.assertEqual(form.render(), form2.render()) self.assertEqual(form.render(), form2.render())
def test_encoding(self):
"""test a form with non ascii string
"""
form = ZMIForm('test', '<EncodingTest>')
form.name = 'name'
form.add_group('àbcdé')
form.manage_addField('string_field', 'string Field héhé', 'StringField')
form.manage_addField('int_field', 'int Field héhé', 'IntegerField')
form.manage_addField('float_field', 'Float Field héhé', 'FloatField')
form.manage_addField('date_field', 'Date Field héhé', 'DateTimeField')
form.manage_addField('list_field', 'List Field héhé', 'ListField')
form.manage_addField('multi_field', 'Checkbox Field héhé', 'MultiCheckBoxField')
form2 = ZMIForm('test2', 'ValueTest')
xml = formToXML(form)
XMLToForm(xml, form2)
for field in form.get_fields():
self.assertTrue(form2.has_field(field.getId()))
field2 = getattr(form2, field.getId())
self.assertEqual(field.values, field2.values)
# test if default renderings are the same
self.assertEqual(field.render(), field2.render())
self.assertEqual(form.title, form2.title)
self.assertEqual(form.name, form2.name)
self.assertEqual(form.action, form2.action)
self.assertEqual(form.enctype, form2.enctype)
self.assertEqual(form.method, form2.method)
# if we have forgotten something, this will usually remind us ;-)
self.assertEqual(form.render(), form2.render())
def test_messages(self): def test_messages(self):
""" test if the error messages are exported """ test if the error messages are exported
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment