diff idavoll/backend.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/backend.py	Wed Jun 23 14:31:49 2004 +0000
@@ -0,0 +1,62 @@
+from twisted.application import service
+from twisted.python import components, failure
+from twisted.internet import defer, reactor
+
+class IBackendService(components.Interface):
+	""" Interface to a backend service of a pubsub service """
+
+class BackendException(Exception):
+	def __init__(self, msg = ''):
+		self.msg = msg
+
+	def __str__(self):
+		return self.msg
+	
+class NodeNotFound(BackendException):
+	#def __init__(self, msg = 'Node not found'):
+	#	BackendException.__init__(self, msg)
+	pass
+
+class NotAuthorized(BackendException):
+	pass
+
+class MemoryBackendService(service.Service):
+
+	__implements__ = IBackendService,
+
+	def __init__(self):
+		self.nodes = {"ralphm/test": 'test'}
+		self.subscribers = {"ralphm/test": ["ralphm@ik.nu", "intosi@ik.nu"] }
+		self.affiliations = {"ralphm/test": { "ralphm@ik.nu": "owner", "ralphm@se-135.se.wtb.tue.nl": 'publisher' } }
+
+	def do_publish(self, node, publisher, item):
+		try:
+			try:
+				result = self.nodes[node]
+			except KeyError:
+				raise NodeNotFound
+
+			try:
+				affiliation = self.affiliations[node][publisher]
+				if affiliation not in ['owner', 'publisher']:
+					raise NotAuthorized
+			except KeyError:
+				raise NotAuthorized()
+			print "publish by %s to %s" % (publisher, node)
+			return defer.succeed(result)
+		except:
+			f = failure.Failure()
+			return defer.fail(f)
+
+	def get_subscribers(self, node):
+		d = defer.Deferred()
+		try:
+			result = self.subscribers[node]
+		except:
+			f = failure.Failure()
+			reactor.callLater(0, d.errback, f)
+		else:
+			reactor.callLater(0, d.callback, result)
+
+		return d
+