diff options
Diffstat (limited to 'sleekxmpp/plugins/xep_0030/stanza/items.py')
-rw-r--r-- | sleekxmpp/plugins/xep_0030/stanza/items.py | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/sleekxmpp/plugins/xep_0030/stanza/items.py b/sleekxmpp/plugins/xep_0030/stanza/items.py deleted file mode 100644 index 10458614..00000000 --- a/sleekxmpp/plugins/xep_0030/stanza/items.py +++ /dev/null @@ -1,152 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2010 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.xmlstream import ElementBase, register_stanza_plugin - - -class DiscoItems(ElementBase): - - """ - Example disco#items stanzas: - <iq type="get"> - <query xmlns="http://jabber.org/protocol/disco#items" /> - </iq> - - <iq type="result"> - <query xmlns="http://jabber.org/protocol/disco#items"> - <item jid="chat.example.com" - node="xmppdev" - name="XMPP Dev" /> - <item jid="chat.example.com" - node="sleekdev" - name="SleekXMPP Dev" /> - </query> - </iq> - - Stanza Interface: - node -- The name of the node to either - query or return info from. - items -- A list of 3-tuples, where each tuple contains - the JID, node, and name of an item. - - Methods: - add_item -- Add a single new item. - del_item -- Remove a single item. - get_items -- Return all items. - set_items -- Set or replace all items. - del_items -- Remove all items. - """ - - name = 'query' - namespace = 'http://jabber.org/protocol/disco#items' - plugin_attrib = 'disco_items' - interfaces = set(('node', 'items')) - - # Cache items - _items = set() - - def setup(self, xml=None): - """ - Populate the stanza object using an optional XML object. - - Overrides ElementBase.setup - - Caches item information. - - Arguments: - xml -- Use an existing XML object for the stanza's values. - """ - ElementBase.setup(self, xml) - self._items = set([item[0:2] for item in self['items']]) - - def add_item(self, jid, node=None, name=None): - """ - Add a new item element. Each item is required to have a - JID, but may also specify a node value to reference - non-addressable entitities. - - Arguments: - jid -- The JID for the item. - node -- Optional additional information to reference - non-addressable items. - name -- Optional human readable name for the item. - """ - if (jid, node) not in self._items: - self._items.add((jid, node)) - item = DiscoItem(parent=self) - item['jid'] = jid - item['node'] = node - item['name'] = name - self.iterables.append(item) - return True - return False - - def del_item(self, jid, node=None): - """ - Remove a single item. - - Arguments: - jid -- JID of the item to remove. - node -- Optional extra identifying information. - """ - if (jid, node) in self._items: - for item_xml in self.findall('{%s}item' % self.namespace): - item = (item_xml.attrib['jid'], - item_xml.attrib.get('node', None)) - if item == (jid, node): - self.xml.remove(item_xml) - return True - return False - - def get_items(self): - """Return all items.""" - items = set() - for item in self['substanzas']: - if isinstance(item, DiscoItem): - items.add((item['jid'], item['node'], item['name'])) - return items - - def set_items(self, items): - """ - Set or replace all items. The given items must be in a - list or set where each item is a tuple of the form: - (jid, node, name) - - Arguments: - items -- A series of items in tuple format. - """ - self.del_items() - for item in items: - jid, node, name = item - self.add_item(jid, node, name) - - def del_items(self): - """Remove all items.""" - self._items = set() - items = [i for i in self.iterables if isinstance(i, DiscoItem)] - for item in items: - self.xml.remove(item.xml) - self.iterables.remove(item) - - -class DiscoItem(ElementBase): - name = 'item' - namespace = 'http://jabber.org/protocol/disco#items' - plugin_attrib = name - interfaces = set(('jid', 'node', 'name')) - - def get_node(self): - """Return the item's node name or ``None``.""" - return self._get_attr('node', None) - - def get_name(self): - """Return the item's human readable name, or ``None``.""" - return self._get_attr('name', None) - - -register_stanza_plugin(DiscoItems, DiscoItem, iterable=True) |