summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0122/stanza.py
blob: bf8545c805c22d84ad91a5ba006587346c81f9e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

from sleekxmpp.xmlstream import ElementBase, ET


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>
    """

    namespace = 'http://jabber.org/protocol/xdata-validate'
    name = 'validate'
    plugin_attrib = 'validate'
    interfaces = set(('datatype', 'basic', 'open', 'range', 'regex', ))
    sub_interfaces = set(('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

    def set_basic(self, value):
        if value:
            self._add_field('basic')
        else:
            self['basic'] = False

    def set_open(self, value):
        if value:
            self._add_field('open')

    def set_regex(self, regex):
        if regex:
            _regex = self._add_field('regex')
            _regex.text = regex

    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)

    def remove_all(self, except_tag=None):
        for a in self.sub_interfaces:
            if a != except_tag:
                del self[a]

    def get_basic(self):
        present = self.xml.find('{%s}basic' % self.namespace)
        return present is not None

    def get_open(self):
        present = self.xml.find('{%s}open' % self.namespace)
        return present is not None

    def get_regex(self):
        present = self.xml.find('{%s}regex' % self.namespace)
        if present:
            return present.text

        return False

    def get_range(self):
        present = self.xml.find('{%s}regex' % self.namespace)
        if present:
            return dict(present.attrib)

        return False


FormValidation.getBasic = FormValidation.get_basic
FormValidation.setBasic = FormValidation.set_basic