Source code for slixmpp.plugins.xep_0122.stanza

from slixmpp.xmlstream import ElementBase, ET


[docs] class FormValidation(ElementBase): """ Validation values for form fields. Example: :: <field var='evt.date' type='text-single' label='Event Date/Time'> <validate xmlns='http://jabber.org/protocol/xdata-validate' datatype='xs:dateTime'/> <value>2003-10-06T11:22:00-07:00</value> </field> Questions: * Should this look at the datatype value and convert the range values as appropriate? * Should this stanza provide a pass/fail for a value from the field, or convert field value to datatype? """ namespace = 'http://jabber.org/protocol/xdata-validate' name = 'validate' plugin_attrib = 'validate' interfaces = {'datatype', 'basic', 'open', 'range', 'regex', } sub_interfaces = {'basic', 'open', 'range', 'regex', } plugin_attrib_map = {} plugin_tag_map = {} def _add_field(self, name): self.remove_all() item_xml = ET.Element('{%s}%s' % (self.namespace, name)) self.xml.append(item_xml) return item_xml
[docs] def set_basic(self, value): if value: self._add_field('basic') else: del self['basic']
[docs] def set_open(self, value): if value: self._add_field('open') else: del self['open']
[docs] def set_regex(self, regex): if regex: _regex = self._add_field('regex') _regex.text = regex else: del self['regex']
[docs] def set_range(self, value, minimum=None, maximum=None): if value: _range = self._add_field('range') _range.attrib['min'] = str(minimum) _range.attrib['max'] = str(maximum) else: del self['range']
[docs] def remove_all(self, except_tag=None): for a in self.sub_interfaces: if a != except_tag: del self[a]
[docs] def get_basic(self): present = self.xml.find('{%s}basic' % self.namespace) return present is not None
[docs] def get_open(self): present = self.xml.find('{%s}open' % self.namespace) return present is not None
[docs] def get_regex(self): present = self.xml.find('{%s}regex' % self.namespace) if present is not None: return present.text return False
[docs] def get_range(self): present = self.xml.find('{%s}range' % self.namespace) if present is not None: attributes = present.attrib return_value = dict() if 'min' in attributes: return_value['minimum'] = attributes['min'] if 'max' in attributes: return_value['maximum'] = attributes['max'] return return_value return False