Mercurial > libervia-pubsub
annotate idavoll/idavoll.py @ 42:7d088c61e131
Make choice of backend an option to mktap. This includes the database
configuration.
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Sun, 31 Oct 2004 21:12:55 +0000 |
parents | c51bca11699b |
children | 9685b7e291ef |
rev | line source |
---|---|
1 | 1 from twisted.protocols.jabber import component |
2 from twisted.application import service | |
8 | 3 from twisted.python import components |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
4 import backend |
1 | 5 import pubsub |
6 import xmpp_error | |
7 | |
8 import sys | |
9 | |
8 | 10 NS_DISCO = 'http://jabber.org/protocol/disco' |
11 NS_DISCO_INFO = NS_DISCO + '#info' | |
12 NS_DISCO_ITEMS = NS_DISCO + '#items' | |
13 NS_VERSION = 'jabber:iq:version' | |
14 | |
1 | 15 IQ_GET = '/iq[@type="get"]' |
16 IQ_SET = '/iq[@type="set"]' | |
8 | 17 VERSION = IQ_GET + '/query[@xmlns="' + NS_VERSION + '"]' |
18 DISCO_INFO = IQ_GET + '/query[@xmlns="' + NS_DISCO_INFO + '"]' | |
19 DISCO_ITEMS = IQ_GET + '/query[@xmlns="' + NS_DISCO_ITEMS + '"]' | |
1 | 20 |
21 class IdavollService(component.Service): | |
22 | |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
23 def componentConnected(self, xmlstream): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
24 self.xmlstream = xmlstream |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
25 xmlstream.addObserver(VERSION, self.onVersion, 1) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
26 xmlstream.addObserver(DISCO_INFO, self.onDiscoInfo, 1) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
27 xmlstream.addObserver(DISCO_ITEMS, self.onDiscoItems, 1) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
28 xmlstream.addObserver(IQ_GET, self.iqFallback, -1) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
29 xmlstream.addObserver(IQ_SET, self.iqFallback, -1) |
8 | 30 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
31 def getFeatures(self, node): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
32 if not node: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
33 return [NS_DISCO_ITEMS, NS_VERSION] |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
34 |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
35 def onVersion(self, iq): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
36 iq.swapAttributeValues("to", "from") |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
37 iq["type"] = "result" |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
38 name = iq.addElement("name", None, 'Idavoll') |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
39 version = iq.addElement("version", None, '0.1') |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
40 self.send(iq) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
41 iq.handled = True |
1 | 42 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
43 def onDiscoInfo(self, iq): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
44 identities = [] |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
45 features = [] |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
46 node = iq.query.getAttribute("node") |
8 | 47 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
48 for c in self.parent: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
49 if components.implements(c, component.IService): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
50 if hasattr(c, "getIdentities"): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
51 identities.extend(c.getIdentities(node)) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
52 if hasattr(c, "getFeatures"): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
53 features.extend(c.getFeatures(node)) |
8 | 54 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
55 if not features and not identities and not node: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
56 xmpp_error.error_from_iq(iq, 'item-not-found') |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
57 else: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
58 iq.swapAttributeValues("to", "from") |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
59 iq["type"] = "result" |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
60 for identity in identities: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
61 i = iq.query.addElement("identity") |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
62 i.attributes = identity |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
63 print features |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
64 for feature in features: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
65 f = iq.query.addElement("feature") |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
66 f["var"] = feature |
8 | 67 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
68 self.send(iq) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
69 iq.handled = True |
8 | 70 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
71 def onDiscoItems(self, iq): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
72 iq.swapAttributeValues("to", "from") |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
73 iq["type"] = "result" |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
74 iq.query.children = [] |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
75 self.send(iq) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
76 |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
77 def iqFallback(self, iq): |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
78 if iq.handled == True: |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
79 return |
1 | 80 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
81 self.send(xmpp_error.error_from_iq(iq, 'service-unavailable')) |
1 | 82 |
83 def makeService(config): | |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
84 serviceCollection = service.MultiService() |
1 | 85 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
86 # set up Jabber Component |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
87 sm = component.buildServiceManager(config["jid"], config["secret"], |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
88 ("tcp:%s:%s" % (config["rhost"], config["rport"]))) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
89 |
42
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
90 if config['backend'] == 'pgsql': |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
91 import pgsql_backend as b |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
92 st = b.Storage(user=config['dbuser'], database=config['dbname']) |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
93 bs = b.BackendService(st) |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
94 elif config['backend'] == 'memory': |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
95 import memory_backend as b |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
96 bs = b.BackendService() |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
97 |
1 | 98 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
99 component.IService(bs).setServiceParent(sm) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
100 |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
101 bsc = b.PublishService() |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
102 bsc.setServiceParent(bs) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
103 component.IService(bsc).setServiceParent(sm) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
104 |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
105 bsc = b.NotificationService() |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
106 bsc.setServiceParent(bs) |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
107 component.IService(bsc).setServiceParent(sm) |
1 | 108 |
42
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
109 if config['backend'] == 'memory': |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
110 bsc = b.NodeCreationService() |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
111 bsc.setServiceParent(bs) |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
112 component.IService(bsc).setServiceParent(sm) |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
113 |
42
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
114 bsc = b.SubscriptionService() |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
115 bsc.setServiceParent(bs) |
7d088c61e131
Make choice of backend an option to mktap. This includes the database
Ralph Meijer <ralphm@ik.nu>
parents:
35
diff
changeset
|
116 component.IService(bsc).setServiceParent(sm) |
1 | 117 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
118 s = IdavollService() |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
119 s.setServiceParent(sm) |
1 | 120 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
121 sm.setServiceParent(serviceCollection) |
1 | 122 |
32
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
123 # other stuff |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
124 |
ddc08757ec1d
Fire up several component.IServices that match the backend Services.
Ralph Meijer <ralphm@ik.nu>
parents:
26
diff
changeset
|
125 return sm |