From 9c6dde5d22badadb318ca8f340b592c63944c975 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Tue, 13 Dec 2011 08:59:39 -0800 Subject: [PATCH 1/2] Ensure that item fields have the proper type. The item fields were not setting their type based on the reported field's type attribute, so values were not being encoded properly. Fixes issue #121 --- sleekxmpp/plugins/xep_0004/stanza/form.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sleekxmpp/plugins/xep_0004/stanza/form.py b/sleekxmpp/plugins/xep_0004/stanza/form.py index 993f7b1..1fcd707 100644 --- a/sleekxmpp/plugins/xep_0004/stanza/form.py +++ b/sleekxmpp/plugins/xep_0004/stanza/form.py @@ -96,11 +96,11 @@ class Form(ElementBase): self.xml.append(itemXML) reported_vars = self['reported'].keys() for var in reported_vars: - fieldXML = ET.Element('{%s}field' % FormField.namespace) - itemXML.append(fieldXML) - field = FormField(xml=fieldXML) + field = FormField() + field._type = self['reported'][var]['type'] field['var'] = var field['value'] = values.get(var, None) + itemXML.append(field.xml) def add_reported(self, var, ftype=None, label='', desc='', **kwargs): kwtype = kwargs.get('type', None) From 116bb6e1b9e5c9d067b2a522d595eaa75e31be6b Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Tue, 13 Dec 2011 09:00:45 -0800 Subject: [PATCH 2/2] Use OrderedDicts instead of regular dictionaries when returning values from forms. --- sleekxmpp/plugins/xep_0004/stanza/form.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sleekxmpp/plugins/xep_0004/stanza/form.py b/sleekxmpp/plugins/xep_0004/stanza/form.py index 1fcd707..bbf0ee7 100644 --- a/sleekxmpp/plugins/xep_0004/stanza/form.py +++ b/sleekxmpp/plugins/xep_0004/stanza/form.py @@ -159,7 +159,7 @@ class Form(ElementBase): items = [] itemsXML = self.xml.findall('{%s}item' % self.namespace) for itemXML in itemsXML: - item = {} + item = OrderedDict() fieldsXML = itemXML.findall('{%s}field' % FormField.namespace) for fieldXML in fieldsXML: field = FormField(xml=fieldXML) @@ -168,7 +168,7 @@ class Form(ElementBase): return items def get_reported(self): - fields = {} + fields = OrderedDict() xml = self.xml.findall('{%s}reported/{%s}field' % (self.namespace, FormField.namespace)) for field in xml: @@ -177,7 +177,7 @@ class Form(ElementBase): return fields def get_values(self): - values = {} + values = OrderedDict() fields = self['fields'] for var in fields: values[var] = fields[var]['value']