From 3857fff974b99bcd1c7d4043cc0d6d11f4e1e2b6 Mon Sep 17 00:00:00 2001 From: Goffi Date: Tue, 24 Dec 2013 15:43:22 +0100 Subject: [PATCH] =?UTF-8?q?core=20(xml=5Ftools),=20frontends:=20added=20a?= =?UTF-8?q?=20prefix=20to=20XMLUI=20form=20names=20in=20result=20data,=20t?= =?UTF-8?q?o=20avoid=20name=20conflicts=20(e.g.:=20if=20a=20form=20has=20n?= =?UTF-8?q?ame=20"submit",=20and=20this=20name=20is=20also=20used=20intern?= =?UTF-8?q?ally=20by=20S=C3=A0T)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontends/src/primitivus/xmlui.py | 10 +++++++--- frontends/src/wix/xmlui.py | 9 ++++++--- src/tools/xml_tools.py | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/frontends/src/primitivus/xmlui.py b/frontends/src/primitivus/xmlui.py index ddcb0fb6..dbaad1ec 100644 --- a/frontends/src/primitivus/xmlui.py +++ b/frontends/src/primitivus/xmlui.py @@ -22,6 +22,9 @@ from urwid_satext import sat_widgets from logging import debug, info, warning, error from xml.dom import minidom + +SAT_FORM_PREFIX = "SAT_FORM_" + def getText(node): """Get child text nodes @param node: dom Node @@ -254,13 +257,14 @@ class XMLUI(urwid.WidgetWrap): def onFormSubmitted(self, button): selected_values = [] for ctrl_name in self.ctrl_list: + escaped = u"%s%s" % (SAT_FORM_PREFIX, ctrl_name) ctrl = self.ctrl_list[ctrl_name] if isinstance(ctrl['control'], sat_widgets.List): - selected_values.append((ctrl_name, u'\t'.join([option.value for option in ctrl['control'].getSelectedValues()]))) + selected_values.append((escaped, u'\t'.join([option.value for option in ctrl['control'].getSelectedValues()]))) elif isinstance(ctrl['control'], urwid.CheckBox): - selected_values.append((ctrl_name, "true" if ctrl['control'].get_state() else "false")) + selected_values.append((escaped, "true" if ctrl['control'].get_state() else "false")) else: - selected_values.append((ctrl_name, ctrl['control'].get_edit_text())) + selected_values.append((escaped, ctrl['control'].get_edit_text())) if self.misc.has_key('action_back'): #FIXME FIXME FIXME: WTF ! Must be cleaned raise NotImplementedError elif 'callback' in self.misc: # FIXME: this part is not needed anymore diff --git a/frontends/src/wix/xmlui.py b/frontends/src/wix/xmlui.py index ffe6cd17..8c69ab7e 100644 --- a/frontends/src/wix/xmlui.py +++ b/frontends/src/wix/xmlui.py @@ -25,6 +25,8 @@ from xml.dom import minidom from logging import debug, info, warning, error from sat.tools.jid import JID +SAT_FORM_PREFIX = "SAT_FORM_" + class XMLUI(wx.Frame): """Create an user interface from a SàT xml""" @@ -216,15 +218,16 @@ class XMLUI(wx.Frame): debug(_("Submitting form")) selected_values = [] for ctrl_name in self.ctrl_list: + escaped = u"%s%s" % (SAT_FORM_PREFIX, ctrl_name) ctrl = self.ctrl_list[ctrl_name] if isinstance(ctrl['control'], wx.ListBox): label = ctrl['control'].GetStringSelection() value = ctrl['attr_map'][label] - selected_values.append((ctrl_name, value)) + selected_values.append((escaped, value)) elif isinstance(ctrl['control'], wx.CheckBox): - selected_values.append((ctrl_name, "true" if ctrl['control'].GetValue() else "false")) + selected_values.append((escaped, "true" if ctrl['control'].GetValue() else "false")) else: - selected_values.append((ctrl_name, ctrl['control'].GetValue())) + selected_values.append((escaped, ctrl['control'].GetValue())) if self.misc.has_key('action_back'): #FIXME FIXME FIXME: WTF ! Must be cleaned id = self.misc['action_back']("SUBMIT",self.misc['target'], selected_values) self.host.current_action_ids.add(id) diff --git a/src/tools/xml_tools.py b/src/tools/xml_tools.py index f5b08730..14278083 100644 --- a/src/tools/xml_tools.py +++ b/src/tools/xml_tools.py @@ -25,6 +25,8 @@ from sat.core import exceptions """This library help manage XML used in SàT (parameters, registration, etc) """ +SAT_FORM_PREFIX ="SAT_FORM_" + def dataForm2XMLUI(form, submit_id, session_id=None): """Take a data form (xep-0004, Wokkel's implementation) and convert it to a SàT xml""" @@ -116,6 +118,21 @@ def dataFormResult2XMLUI(form_xml, session_id=None): dataFormResult2AdvancedList(form_ui, form_xml) return form_ui +def XMLUIResult2DataFormResult(xmlui_data): + """ Extract form data from a XMLUI return + @xmlui_data: data returned by frontends for XMLUI form + @return: dict of data usable by Wokkel's dataform + """ + return {key[len(SAT_FORM_PREFIX):]: value for key, value in xmlui_data.iteritems() if key.startswith(SAT_FORM_PREFIX)} + +def XMLUIResultToElt(xmlui_data): + """ Construct result domish.Element from XMLUI result + @xmlui_data: data returned by frontends for XMLUI form + """ + form = data_form.Form('result') + form.makeFields(XMLUIResult2DataFormResult(xmlui_data)) + return form.toElement() + def tupleList2dataForm(values): """convert a list of tuples (name,value) to a wokkel submit data form""" form = data_form.Form('submit')