# HG changeset patch # User Goffi # Date 1402759456 -7200 # Node ID 8e1f30aa3975b254f7e186e6d35988483833605a # Parent 1513511a0586497cd25b8e74806782b2c2834442 core (XMLUI): data form result now manage generic data set diff -r 1513511a0586 -r 8e1f30aa3975 src/tools/xml_tools.py --- a/src/tools/xml_tools.py Thu Jun 12 18:56:08 2014 +0200 +++ b/src/tools/xml_tools.py Sat Jun 14 17:24:16 2014 +0200 @@ -75,15 +75,13 @@ return widget_type, widget_args, widget_kwargs +def dataForm2Widgets(form_ui, form): + """Complete an existing XMLUI with widget converted frot XEP-0004 data forms -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 - @param submit_id: callback id to call when submitting form - @param session_id: id to return with the data - + @param form_ui: XMLUI instance + @param form: Wokkel's implementation of data form + @return: completed xml_ui """ - form_ui = XMLUI("form", "vertical", submit_id=submit_id, session_id=session_id) - if form.instructions: form_ui.addText('\n'.join(form.instructions), 'instructions') @@ -101,6 +99,15 @@ return form_ui +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 + + @param submit_id: callback id to call when submitting form + @param session_id: id to return with the data + """ + form_ui = XMLUI("form", "vertical", submit_id=submit_id, session_id=session_id) + return dataForm2Widgets(form_ui, form) + def dataFormResult2AdvancedList(xmlui, form_xml): """Take a raw data form (not parsed by XEP-0004) and convert it to an advanced list raw data form is used because Wokkel doesn't manage result items parsing yet @@ -142,16 +149,20 @@ return xmlui -def dataFormResult2XMLUI(form_xml, session_id=None): +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 raw data form is used because Wokkel doesn't manage result items parsing yet - @param form_xml: domish.Element of the data form + @param form_elt: domish.Element of the data form @return: XMLUI interface """ - xmlui = XMLUI("window", "vertical", session_id=session_id) - dataFormResult2AdvancedList(xmlui, form_xml) - return xmlui + xml_ui = XMLUI("window", "vertical", session_id=session_id) + try: + dataFormResult2AdvancedList(xml_ui, form_elt) + except exceptions.DataError: + parsed_form = data_form.Form.fromElement(form_elt) + dataForm2Widgets(xml_ui, parsed_form) + return xml_ui def _cleanValue(value): """Workaround method to avoid DBus types with D-Bus bridge