Mercurial > libervia-pubsub
diff idavoll/pubsub.py @ 1:4cc41776b7d7
Initial revision
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Wed, 23 Jun 2004 14:31:49 +0000 |
parents | |
children | 9701df89c534 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idavoll/pubsub.py Wed Jun 23 14:31:49 2004 +0000 @@ -0,0 +1,73 @@ +from twisted.protocols.jabber import component,jid +from twisted.xish import utility +from twisted.python import components +import backend +import xmpp_error + +IQ_GET = '/iq[@type="get"]' +IQ_SET = '/iq[@type="set"]' +PUBSUB_GET = IQ_GET + '/pubsub[@xmlns="http://jabber.org/protocol/pubsub"]' +PUBSUB_SET = IQ_SET + '/pubsub[@xmlns="http://jabber.org/protocol/pubsub"]' + +PUBSUB_CREATE = PUBSUB_SET + '/create' +PUBSUB_PUBLISH = PUBSUB_SET + '/publish' + +class ComponentServiceFromBackend(component.Service, utility.EventDispatcher): + + def __init__(self, backend): + utility.EventDispatcher.__init__(self) + self.backend = backend + self.addObserver(PUBSUB_PUBLISH, self.onPublish) + + def componentConnected(self, xmlstream): + xmlstream.addObserver(PUBSUB_SET, self.onPubSub) + xmlstream.addObserver(PUBSUB_GET, self.onPubSub) + + def error(self, failure, iq): + r = failure.trap(backend.NotAuthorized, backend.NodeNotFound) + + if r == backend.NotAuthorized: + xmpp_error.error_from_iq(iq, 'not-authorized', failure.value.msg) + + if r == backend.NodeNotFound: + xmpp_error.error_from_iq(iq, 'item-not-found', failure.value.msg) + + return iq + + def success(self, result, iq): + iq.swapAttributeValues("to", "from") + iq["type"] = 'result' + iq.children = [] + return iq + + def onPubSub(self, iq): + self.dispatch(iq) + iq.handled = True + + def onPublish(self, iq): + node = iq.pubsub.publish["node"] + + d = self.backend.do_publish(node, jid.JID(iq["from"]).userhost(), iq.pubsub.publish.item) + d.addCallback(self.success, iq) + d.addErrback(self.error, iq) + d.addCallback(self.send) + + +""" + def onCreateSet(self, iq): + node = iq.pubsub.create["node"] + owner = jid.JID(iq["from"]).userhost() + + try: + node = self.backend.create_node(node, owner) + + if iq.pubsub.create["node"] == None: + # also show node name + except: + pass + + iq.handled = True +""" + +components.registerAdapter(ComponentServiceFromBackend, backend.IBackendService, component.IService) +