Mercurial > libervia-pubsub
annotate idavoll/backend.py @ 79:c40ccc30dfb7
Added note on max_items attribute.
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Tue, 09 Nov 2004 14:50:18 +0000 |
parents | a914cad421c5 |
children | ec354aab3949 |
rev | line source |
---|---|
49
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
1 from twisted.protocols.jabber import jid |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
2 from twisted.python import components |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
3 from twisted.application import service |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
4 from twisted.xish import utility |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
5 from twisted.internet import defer |
2 | 6 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
7 class Error(Exception): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
8 msg = '' |
1 | 9 |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
10 def __str__(self): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
11 return self.msg |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
12 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
13 class NodeNotFound(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
14 msg = 'Node not found' |
1 | 15 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
16 class NotAuthorized(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
17 pass |
20
eddea65d1032
Added two exceptions: NoInstantNodes and NodeExists.
Ralph Meijer <ralphm@ik.nu>
parents:
18
diff
changeset
|
18 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
19 class PayloadExpected(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
20 msg = 'Payload expected' |
15 | 21 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
22 class NoPayloadAllowed(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
23 msg = 'No payload allowed' |
2 | 24 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
25 class NoInstantNodes(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
26 pass |
23
884268687229
Simplify call chain by mapping incoming requests directly to method
Ralph Meijer <ralphm@ik.nu>
parents:
20
diff
changeset
|
27 |
24
4f3bbefc6fad
Moved memory backend to its own file.
Ralph Meijer <ralphm@ik.nu>
parents:
23
diff
changeset
|
28 class NodeExists(Error): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
29 pass |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
30 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
31 class NotImplemented(Error): |
34 | 32 pass |
33 | |
34 class NotSubscribed(Error): | |
35 pass | |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
36 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
37 class IBackendService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
38 """ Interface to a backend service of a pubsub service. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
39 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
40 def get_supported_affiliations(self): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
41 """ Reports the list of supported affiliation types. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
42 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
43 @return: a list of supported affiliation types. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
44 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
45 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
46 class INodeCreationService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
47 """ A service for creating nodes """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
48 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
49 def create_node(self, node_id, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
50 """ Create a node. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
51 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
52 @return: a deferred that fires when the node has been created. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
53 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
54 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
55 class IPublishService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
56 """ A service for publishing items to a node. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
57 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
58 def publish(self, node_id, items, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
59 """ Publish items to a pubsub node. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
60 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
61 @return: a deferred that fires when the items have been published. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
62 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
63 class INotificationService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
64 """ A service for notification of published items. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
65 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
66 def register_notifier(self, observerfn, *args, **kwargs): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
67 """ Register callback which is called for notification. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
68 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
69 def get_notification_list(self, node_id, items): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
70 pass |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
71 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
72 class ISubscriptionService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
73 """ A service for managing subscriptions. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
74 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
75 def subscribe(self, node_id, subscriber, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
76 """ Request the subscription of an entity to a pubsub node. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
77 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
78 Depending on the node's configuration and possible business rules, the |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
79 C{subscriber} is added to the list of subscriptions of the node with id |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
80 C{node_id}. The C{subscriber} might be different from the C{requestor}, |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
81 and if the C{requestor} is not allowed to subscribe this entity an |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
82 exception should be raised. |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
83 |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
84 @return: a deferred that returns the subscription state |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
85 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
86 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
87 def unsubscribe(self, node_id, subscriber, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
88 """ Cancel the subscription of an entity to a pubsub node. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
89 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
90 The subscription of C{subscriber} is removed from the list of |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
91 subscriptions of the node with id C{node_id}. If the C{requestor} |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
92 is not allowed to unsubscribe C{subscriber}, an an exception should |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
93 be raised. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
94 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
95 @return: a deferred that fires when unsubscription is complete. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
96 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
97 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
98 class IAffiliationsService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
99 """ A service for retrieving the affiliations with this pubsub service. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
100 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
101 def get_affiliations(self, entity): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
102 """ Report the list of current affiliations with this pubsub service. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
103 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
104 Report the list of the current affiliations with all nodes within this |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
105 pubsub service, along with subscriptions to such nodes, for the |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
106 C{entity}. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
107 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
108 @return: a deferred that returns the list of all current affiliations |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
109 and subscriptions. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
110 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
111 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
112 class IRetractionService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
113 """ A service for retracting published items """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
114 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
115 def retract_item(self, node_id, item_id, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
116 """ Removes item in node from persistent storage """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
117 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
118 def purge_node(self, node_id, requestor): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
119 """ Removes all items in node from persistent storage """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
120 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
121 class IItemRetrievalService(components.Interface): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
122 """ A service for retrieving previously published items. """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
123 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
124 def get_items(self, node_id, max_items=None, item_ids=[], |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
125 requestor=None): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
126 """ Retrieve items from persistent storage |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
127 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
128 If C{max_items} is given, return the C{max_items} last published |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
129 items, else if C{item_ids} is not empty, return the items requested. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
130 If neither is given, return all items. |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
131 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
132 @return: a deferred that returns the requested items |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
133 """ |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
134 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
135 class BackendService(service.MultiService, utility.EventDispatcher): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
136 |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
137 __implements__ = IBackendService, |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
138 |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
139 def __init__(self, storage): |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
140 service.MultiService.__init__(self) |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
141 utility.EventDispatcher.__init__(self) |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
142 self.storage = storage |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
143 |
53
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
144 def supports_publisher_affiliation(self): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
145 return True |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
146 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
147 def supports_outcast_affiliation(self): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
148 return True |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
149 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
150 def supports_persistent_items(self): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
151 return True |
39
788114f9b5bc
Added get_supported_affiliations() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
34
diff
changeset
|
152 |
65
d617f8d19263
Add get_node_type() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
61
diff
changeset
|
153 def get_node_type(self, node_id): |
72
a914cad421c5
Added get_nodes() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
65
diff
changeset
|
154 return self.storage.get_node_type(node_id) |
a914cad421c5
Added get_nodes() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
65
diff
changeset
|
155 |
a914cad421c5
Added get_nodes() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
65
diff
changeset
|
156 def get_nodes(self): |
a914cad421c5
Added get_nodes() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
65
diff
changeset
|
157 return self.storage.get_nodes() |
65
d617f8d19263
Add get_node_type() to BackendService.
Ralph Meijer <ralphm@ik.nu>
parents:
61
diff
changeset
|
158 |
44
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
159 class PublishService(service.Service): |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
160 |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
161 __implements__ = IPublishService, |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
162 |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
163 def publish(self, node_id, items, requestor): |
44
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
164 d1 = self.parent.storage.get_node_configuration(node_id) |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
165 d2 = self.parent.storage.get_affiliation(node_id, requestor) |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
166 d = defer.DeferredList([d1, d2], fireOnOneErrback=1) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
167 d.addErrback(lambda x: x.value[0]) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
168 d.addCallback(self._do_publish, node_id, items, requestor) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
169 return d |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
170 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
171 def _do_publish(self, result, node_id, items, requestor): |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
172 configuration = result[0][1] |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
173 persist_items = configuration["persist_items"] |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
174 deliver_payloads = configuration["deliver_payloads"] |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
175 affiliation = result[1][1] |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
176 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
177 if affiliation not in ['owner', 'publisher']: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
178 raise NotAuthorized |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
179 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
180 if items and not persist_items and not deliver_payloads: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
181 raise NoPayloadAllowed |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
182 elif not items and (persist_items or deliver_payloads): |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
183 raise PayloadExpected |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
184 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
185 print "publish by %s to %s" % (requestor.full(), node_id) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
186 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
187 if persist_items or deliver_payloads: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
188 for item in items: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
189 if item["id"] is None: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
190 item["id"] = 'random' # FIXME |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
191 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
192 if persist_items: |
44
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
193 d = self.parent.storage.store_items(node_id, items, |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
194 requestor) |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
195 else: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
196 d = defer.succeed(None) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
197 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
198 d.addCallback(self._do_notify, node_id, items, deliver_payloads) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
199 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
200 def _do_notify(self, result, node_id, items, deliver_payloads): |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
201 if items and not deliver_payloads: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
202 for item in items: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
203 item.children = [] |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
204 |
44
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
205 self.parent.dispatch({ 'items': items, 'node_id': node_id }, |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
206 '//event/pubsub/notify') |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
207 |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
208 class NotificationService(service.Service): |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
209 |
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
210 __implements__ = INotificationService, |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
211 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
212 def get_notification_list(self, node_id, items): |
44
bc7438476a67
Removed IPersistenceService, this is a feature of the storage facility.
Ralph Meijer <ralphm@ik.nu>
parents:
43
diff
changeset
|
213 d = self.parent.storage.get_subscribers(node_id) |
43
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
214 d.addCallback(self._magic_filter, node_id, items) |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
215 return d |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
216 |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
217 def _magic_filter(self, subscribers, node_id, items): |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
218 list = {} |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
219 for subscriber in subscribers: |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
220 list[subscriber] = items |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
221 return list |
9685b7e291ef
Moved common stuff out of pgsql_backend.py to backend.py.
Ralph Meijer <ralphm@ik.nu>
parents:
39
diff
changeset
|
222 |
29
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
223 def register_notifier(self, observerfn, *args, **kwargs): |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
224 self.parent.addObserver('//event/pubsub/notify', observerfn, |
d4fc29bb5381
Define interfaces of blocks of functionality.
Ralph Meijer <ralphm@ik.nu>
parents:
24
diff
changeset
|
225 *args, **kwargs) |
49
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
226 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
227 class SubscriptionService(service.Service): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
228 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
229 __implements__ = ISubscriptionService, |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
230 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
231 def subscribe(self, node_id, subscriber, requestor): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
232 if subscriber.userhostJID() != requestor: |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
233 raise NotAuthorized |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
234 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
235 d1 = self.parent.storage.get_node_configuration(node_id) |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
236 d2 = self.parent.storage.get_affiliation(node_id, subscriber) |
49
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
237 d = defer.DeferredList([d1, d2], fireOnOneErrback=1) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
238 d.addErrback(lambda x: x.value[0]) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
239 d.addCallback(self._do_subscribe, node_id, subscriber) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
240 return d |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
241 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
242 def _do_subscribe(self, result, node_id, subscriber): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
243 configuration = result[0][1] |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
244 affiliation = result[1][1] |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
245 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
246 if affiliation == 'outcast': |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
247 raise NotAuthorized |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
248 |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
249 d = self.parent.storage.add_subscription(node_id, subscriber, |
49
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
250 'subscribed') |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
251 d.addCallback(self._return_subscription, affiliation) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
252 return d |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
253 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
254 def _return_subscription(self, result, affiliation): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
255 result['affiliation'] = affiliation |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
256 return result |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
257 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
258 def unsubscribe(self, node_id, subscriber, requestor): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
259 if subscriber.userhostJID() != requestor: |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
260 raise NotAuthorized |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
261 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
262 d = self.parent.storage.get_node_configuration(node_id) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
263 d.addCallback(self._do_unsubscribe, node_id, subscriber) |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
264 return d |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
265 |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
266 def _do_unsubscribe(self, result, node_id, subscriber): |
94e4ede2a357
Implement SubscriptionService with separate storage.
Ralph Meijer <ralphm@ik.nu>
parents:
44
diff
changeset
|
267 return self.parent.storage.remove_subscription(node_id, |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
268 subscriber) |
53
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
269 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
270 class NodeCreationService(service.Service): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
271 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
272 __implements__ = INodeCreationService, |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
273 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
274 def supports_instant_nodes(self): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
275 return False |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
276 |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
277 def create_node(self, node_id, requestor): |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
278 if not node_id: |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
279 raise NoInstantNodes |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
280 |
59
0fa161c00ed9
Use jid.JIDs everywhere in the backend.
Ralph Meijer <ralphm@ik.nu>
parents:
53
diff
changeset
|
281 d = self.parent.storage.create_node(node_id, requestor) |
53
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
282 d.addCallback(lambda _: node_id) |
e602ddda2d6e
Implement NodeCreationService, using the create_node() method of Storage.
Ralph Meijer <ralphm@ik.nu>
parents:
49
diff
changeset
|
283 return d |
61 | 284 |
285 class AffiliationsService(service.Service): | |
286 | |
287 __implements__ = IAffiliationsService, | |
288 | |
289 def get_affiliations(self, entity): | |
290 d1 = self.parent.storage.get_affiliations(entity) | |
291 d2 = self.parent.storage.get_subscriptions(entity) | |
292 d = defer.DeferredList([d1, d2], fireOnOneErrback=1) | |
293 d.addErrback(lambda x: x.value[0]) | |
294 d.addCallback(self._affiliations_result, entity) | |
295 return d | |
296 | |
297 def _affiliations_result(self, result, entity): | |
298 affiliations = result[0][1] | |
299 subscriptions = result[1][1] | |
300 | |
301 new_affiliations = {} | |
302 | |
303 for node, affiliation in affiliations: | |
304 new_affiliations[(node, entity.full())] = {'node': node, | |
305 'jid': entity, | |
306 'affiliation': affiliation, | |
307 'subscription': None | |
308 } | |
309 | |
310 for node, subscriber, subscription in subscriptions: | |
311 key = node, subscriber.full() | |
312 if new_affiliations.has_key(key): | |
313 new_affiliations[key]['subscription'] = subscription | |
314 else: | |
315 new_affiliations[key] = {'node': node, | |
316 'jid': subscriber, | |
317 'affiliation': None, | |
318 'subscription': subscription} | |
319 | |
320 return new_affiliations.values() |