From 4d77df80ff3bd097a1894e8b0d3168a8be6cace5 Mon Sep 17 00:00:00 2001 From: Nicolas Delaby <nicolas@nexedi.com> Date: Thu, 11 Mar 2010 14:55:19 +0000 Subject: [PATCH] * Support XML un/serialisation of forms which are contain ProxyFields, by exporting delegated_list property. * fix indentation issue which duplicates 'tales' node in formToXML brought by r27696 git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@33654 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/Formulator/FormToXML.py | 29 ++++++++++++++++++----------- product/Formulator/XMLToForm.py | 12 +++++++++++- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/product/Formulator/FormToXML.py b/product/Formulator/FormToXML.py index 33996ba686..c94d49222d 100644 --- a/product/Formulator/FormToXML.py +++ b/product/Formulator/FormToXML.py @@ -58,17 +58,24 @@ def formToXML(form, prologue=1): value_element = SubElement(values_element, key) value_element.text = escape(str(value)).decode(encoding) - tales_element = SubElement(field_element, 'tales') - items = field.tales.items() - items.sort() - for key, value in items: - if value: - tale_element = SubElement(tales_element, key) - tale_element.text = escape(str(value._text)).decode(encoding) - messages = SubElement(field_element, 'messages') - for message_key in field.get_error_names(): - message_element = SubElement(messages, 'message', name=message_key) - message_element.text = escape(field.get_error_message(message_key)).decode(encoding) + tales_element = SubElement(field_element, 'tales') + items = field.tales.items() + items.sort() + for key, value in items: + if value: + tale_element = SubElement(tales_element, key) + tale_element.text = escape(str(value._text)).decode(encoding) + messages = SubElement(field_element, 'messages') + for message_key in field.get_error_names(): + message_element = SubElement(messages, 'message', name=message_key) + message_element.text = escape(field.get_error_message(message_key)).decode(encoding) + # Special attribute for ProxyFields *delegated_list* + delegated_list = getattr(field, 'delegated_list', []) + if delegated_list: + delegated_list_element = SubElement(field_element, 'delegated_list') + delegated_list.sort() + [SubElement(delegated_list_element, delegated) for delegated in delegated_list] + form_as_string = etree.tostring(form_as_xml, encoding='utf-8', xml_declaration=True, pretty_print=True) if form.unicode_mode: diff --git a/product/Formulator/XMLToForm.py b/product/Formulator/XMLToForm.py index c2539e5559..9dd6064840 100644 --- a/product/Formulator/XMLToForm.py +++ b/product/Formulator/XMLToForm.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import XMLObjects from Products.Formulator.TALESField import TALESMethod from Products.Formulator.MethodField import Method @@ -110,11 +111,20 @@ def XMLToForm(s, form, override_encoding=None): text = encode(entry.text, encoding) field.message_values[name] = text + # set delegated_list, mean ProxyField + is_proxy_field = False + if hasattr(entry.first, 'delegated_list'): + delegated_list_element = entry.first.delegated_list + delegated_list = delegated_list_element.getElementNames() + field.delegated_list = delegated_list + is_proxy_field = True # for persistence machinery field.values = field.values field.tales = field.tales field.message_values = field.message_values - + if is_proxy_field: + field.delegated_list = field.delegated_list + # delete default group if not has_default: form.move_group_down('Default') -- 2.30.9