diff options
Diffstat (limited to 'sleekxmpp/plugins/xep_0004')
-rw-r--r-- | sleekxmpp/plugins/xep_0004/__init__.py | 13 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0004/dataforms.py | 30 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0004/stanza/field.py | 10 |
3 files changed, 30 insertions, 23 deletions
diff --git a/sleekxmpp/plugins/xep_0004/__init__.py b/sleekxmpp/plugins/xep_0004/__init__.py index aad4e15f..2cd18ec8 100644 --- a/sleekxmpp/plugins/xep_0004/__init__.py +++ b/sleekxmpp/plugins/xep_0004/__init__.py @@ -6,6 +6,17 @@ See the file LICENSE for copying permission. """ +from sleekxmpp.plugins.base import register_plugin + from sleekxmpp.plugins.xep_0004.stanza import Form from sleekxmpp.plugins.xep_0004.stanza import FormField, FieldOption -from sleekxmpp.plugins.xep_0004.dataforms import xep_0004 +from sleekxmpp.plugins.xep_0004.dataforms import XEP_0004 + + +register_plugin(XEP_0004) + + +# Retain some backwards compatibility +xep_0004 = XEP_0004 +xep_0004.makeForm = xep_0004.make_form +xep_0004.buildForm = xep_0004.build_form diff --git a/sleekxmpp/plugins/xep_0004/dataforms.py b/sleekxmpp/plugins/xep_0004/dataforms.py index 5414be5c..1097bd29 100644 --- a/sleekxmpp/plugins/xep_0004/dataforms.py +++ b/sleekxmpp/plugins/xep_0004/dataforms.py @@ -6,29 +6,27 @@ See the file LICENSE for copying permission. """ -import copy - -from sleekxmpp.thirdparty import OrderedDict - from sleekxmpp import Message -from sleekxmpp.xmlstream import register_stanza_plugin, ElementBase, ET +from sleekxmpp.xmlstream import register_stanza_plugin from sleekxmpp.xmlstream.handler import Callback from sleekxmpp.xmlstream.matcher import StanzaPath -from sleekxmpp.plugins.base import base_plugin +from sleekxmpp.plugins import BasePlugin from sleekxmpp.plugins.xep_0004 import stanza from sleekxmpp.plugins.xep_0004.stanza import Form, FormField, FieldOption -class xep_0004(base_plugin): +class XEP_0004(BasePlugin): + """ XEP-0004: Data Forms """ - def plugin_init(self): - self.xep = '0004' - self.description = 'Data Forms' - self.stanza = stanza + name = 'xep_0004' + description = 'XEP-0004: Data Forms' + dependencies = set(['xep_0030']) + stanza = stanza + def plugin_init(self): self.xmpp.registerHandler( Callback('Data Form', StanzaPath('message/form'), @@ -38,6 +36,8 @@ class xep_0004(base_plugin): register_stanza_plugin(Form, FormField, iterable=True) register_stanza_plugin(Message, Form) + self.xmpp['xep_0030'].add_feature('jabber:x:data') + def make_form(self, ftype='form', title='', instructions=''): f = Form() f['type'] = ftype @@ -45,16 +45,8 @@ class xep_0004(base_plugin): f['instructions'] = instructions return f - def post_init(self): - base_plugin.post_init(self) - self.xmpp.plugin['xep_0030'].add_feature('jabber:x:data') - def handle_form(self, message): self.xmpp.event("message_xform", message) def build_form(self, xml): return Form(xml=xml) - - -xep_0004.makeForm = xep_0004.make_form -xep_0004.buildForm = xep_0004.build_form diff --git a/sleekxmpp/plugins/xep_0004/stanza/field.py b/sleekxmpp/plugins/xep_0004/stanza/field.py index 8131233c..1e175966 100644 --- a/sleekxmpp/plugins/xep_0004/stanza/field.py +++ b/sleekxmpp/plugins/xep_0004/stanza/field.py @@ -79,19 +79,21 @@ class FormField(ElementBase): reqXML = self.xml.find('{%s}required' % self.namespace) return reqXML is not None - def get_value(self): + def get_value(self, convert=True): valsXML = self.xml.findall('{%s}value' % self.namespace) if len(valsXML) == 0: return None elif self._type == 'boolean': - return valsXML[0].text in self.true_values + if convert: + return valsXML[0].text in self.true_values + return valsXML[0].text elif self._type in self.multi_value_types or len(valsXML) > 1: values = [] for valXML in valsXML: if valXML.text is None: valXML.text = '' values.append(valXML.text) - if self._type == 'text-multi': + if self._type == 'text-multi' and convert: values = "\n".join(values) return values else: @@ -136,6 +138,8 @@ class FormField(ElementBase): valXML.text = '0' self.xml.append(valXML) elif self._type in self.multi_value_types or self._type in ('', None): + if isinstance(value, bool): + value = [value] if not isinstance(value, list): value = value.replace('\r', '') value = value.split('\n') |