aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2010-11-18 01:11:58 +0100
committerThibaut Horel <thibaut.horel@gmail.com>2010-11-18 01:11:58 +0100
commitf3fbfe116584393f5b373d98541c803c695f6ffb (patch)
tree29575366bde4c232fb42f98cee527d4bcb09b164
parentc494741c09f03268d950b8da27952917518db446 (diff)
downloadalias-f3fbfe116584393f5b373d98541c803c695f6ffb.tar.gz
Improve item managment in query replies
-rw-r--r--plugin.py50
1 files changed, 29 insertions, 21 deletions
diff --git a/plugin.py b/plugin.py
index d250f97..5b909cf 100644
--- a/plugin.py
+++ b/plugin.py
@@ -2,7 +2,7 @@ import logging
import base64
from xml.etree import cElementTree as ET
-from sleekxmpp.xmlstream.stanzabase import ElementBase, registerStanzaPlugin
+from sleekxmpp.xmlstream.stanzabase import ElementBase, register_stanza_plugin
from sleekxmpp.plugins import base
from sleekxmpp.xmlstream.handler.callback import Callback
from sleekxmpp.xmlstream.matcher.xpath import MatchXPath
@@ -17,33 +17,41 @@ class AliasQuery(ElementBase):
interfaces = set(('node', 'type', 'items', 'object'))
sub_interfaces = set(('items'))
+ def addItem(self, node, permission = None):
+ item = AliasItem(None, self)
+ item['node'] = node
+ if permission is not None:
+ item['permission'] = permission
+
+class AliasItem(ElementBase):
+ namespace = 'alias:query'
+ name = 'item'
+ plugin_attrib = 'item'
+ interfaces = set(('node', 'permission'))
class AliasPlugin(base.base_plugin):
- def plugin_init(self) :
+ def plugin_init(self):
self.description = 'Plugin to handle alias queries'
- registerStanzaPlugin(Iq, AliasQuery)
-
- self.xmpp.registerHandler(
- Callback('Alias queries',
- MatchXPath('{%s}iq/{%s}query' % (self.xmpp.default_ns,
- AliasQuery.namespace)),
- self.handle_alias_query))
+ register_stanza_plugin(Iq, AliasQuery)
+ query_parser = MatchXPath('{{{}}}iq/{{{}}}query'.format(self.xmpp.default_ns,
+ AliasQuery.namespace))
+ self.xmpp.register_handler(Callback('Alias queries', query_parser,
+ self.handle_alias_query))
def handle_alias_query(self, iq):
- receiver = base64.b64decode(iq['to'].user)
- handler = object.ObjectHandler(receiver)
+ callee = base64.b64decode(iq['to'].user)
+ caller = iq['alias']['from']
+ handler = object.ObjectHandler(callee)
node = iq['alias']['node']
- if node == "" :
+ if not node:
node = handler.get_home_node()
if iq['alias']['type'] == 'items':
logging.debug('childs of {} requested'.format(node))
- childs = handler.get_child_list(node, iq['alias']['from'])
- test = ET.Element("test")
- for child in childs :
- test.append(ET.Element("item", {'node':child}))
- iq.reply().set_payload(test).send()
-
-
-
-
+ childs = handler.get_child_list(node, caller)
+ reply = AliasQuery()
+ reply['node'] = node
+ reply['type'] = 'items'
+ for child in childs:
+ reply.addItem(child, "test")
+ iq.reply().set_payload(reply).send() \ No newline at end of file