summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0191/stanza.py
blob: c5a284bd2dfa4f5de2734501053a44ae277a3238 (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
"""
    SleekXMPP: The Sleek XMPP Library
    Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
    This file is part of SleekXMPP.

    See the file LICENSE for copying permission.
"""

from sleekxmpp.xmlstream import ET, ElementBase, JID


class BlockList(ElementBase):
    name = 'blocklist'
    namespace = 'urn:xmpp:blocking'
    plugin_attrib = 'blocklist'
    interfaces = set(['items'])

    def get_items(self):
        result = set()
        items = self.xml.findall('{%s}item' % self.namespace)
        if items is not None:
            for item in items:
                jid = JID(item.attrib.get('jid', ''))
                if jid:
                    result.add(jid)
        return result

    def set_items(self, values):
        self.del_items()
        for jid in values:
            if jid:
                item = ET.Element('{%s}item' % self.namespace)
                item.attrib['jid'] = JID(jid).full
                self.xml.append(item)

    def del_items(self):
        items = self.xml.findall('{%s}item' % self.namespace)
        if items is not None:
            for item in items:
                self.xml.remove(item)


class Block(BlockList):
    name = 'block'
    plugin_attrib = 'block'


class Unblock(BlockList):
    name = 'unblock'
    plugin_attrib = 'unblock'