diff src/tools/xml_tools.py @ 1507:84250128e425

tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
author souliane <souliane@mailoo.org>
date Wed, 02 Sep 2015 13:56:34 +0200
parents a2e4b976e707
children d2ab9c62ac3a
line wrap: on
line diff
--- a/src/tools/xml_tools.py	Wed Sep 02 13:54:57 2015 +0200
+++ b/src/tools/xml_tools.py	Wed Sep 02 13:56:34 2015 +0200
@@ -135,13 +135,14 @@
     return dataForm2Widgets(form_ui, form, read_only=read_only)
 
 
-def dataFormResult2AdvancedList(xmlui, form_xml):
-    """Take a raw data form result (not parsed by Wokkel's XEP-0004 implementation) and convert it to an advanced list.
+def dataFormResult2XMLUIData(form_xml):
+    """Parse a data form result (not parsed by Wokkel's XEP-0004 implementation).
 
     The raw data form is used because Wokkel doesn't manage result items parsing yet.
-    @param xmlui (XMLUI): the XMLUI where the AdvancedList will be added
     @param form_xml (domish.Element): element of the data form
-    @return: the completed XMLUI instance
+    @return: a couple (headers, result_list):
+        - headers (dict{unicode: unicode}): form headers (field labels and types)
+        - xmlui_data (list[tuple]): list of (widget_type, widget_args, widget_kwargs)
     """
     headers = OrderedDict()
     try:
@@ -160,9 +161,7 @@
     if not headers:
         raise exceptions.DataError("No reported fields (see XEP-0004 §3.4)")
 
-    adv_list = AdvancedListContainer(xmlui, headers=headers, columns=len(headers), parent=xmlui.current_container)
-    xmlui.changeContainer(adv_list)
-
+    xmlui_data = []
     item_elts = form_xml.elements('jabber:x:data', 'item')
 
     for item_elt in item_elts:
@@ -172,12 +171,41 @@
                 continue
             field = data_form.Field.fromElement(elt)
 
-            widget_type, widget_args, widget_kwargs = _dataFormField2XMLUIData(field)
-            xmlui.addWidget(widget_type, *widget_args, **widget_kwargs)
+            xmlui_data.append(_dataFormField2XMLUIData(field))
+
+    return headers, xmlui_data
+
+
+def XMLUIData2AdvancedList(xmlui, headers, xmlui_data):
+    """Take a raw data form result (not parsed by Wokkel's XEP-0004 implementation) and convert it to an advanced list.
+
+    The raw data form is used because Wokkel doesn't manage result items parsing yet.
+    @param xmlui (XMLUI): the XMLUI where the AdvancedList will be added
+    @param headers (dict{unicode: unicode}): form headers (field labels and types)
+    @param xmlui_data (list[tuple]): list of (widget_type, widget_args, widget_kwargs)
+    @return: the completed XMLUI instance
+    """
+    adv_list = AdvancedListContainer(xmlui, headers=headers, columns=len(headers), parent=xmlui.current_container)
+    xmlui.changeContainer(adv_list)
+
+    for widget_type, widget_args, widget_kwargs in xmlui_data:
+        xmlui.addWidget(widget_type, *widget_args, **widget_kwargs)
 
     return xmlui
 
 
+def dataFormResult2AdvancedList(xmlui, form_xml):
+    """Take a raw data form result (not parsed by Wokkel's XEP-0004 implementation) and convert it to an advanced list.
+
+    The raw data form is used because Wokkel doesn't manage result items parsing yet.
+    @param xmlui (XMLUI): the XMLUI where the AdvancedList will be added
+    @param form_xml (domish.Element): element of the data form
+    @return: the completed XMLUI instance
+    """
+    headers, xmlui_data = dataFormResult2XMLUIData(form_xml)
+    XMLUIData2AdvancedList(xmlui, headers, xmlui_data)
+
+
 def dataFormResult2XMLUI(form_elt, session_id=None):
     """Take a raw data form (not parsed by XEP-0004) and convert it to a SàT XMLUI.