Changeset 13:42b22edb29bb in ralphm-patches
- Timestamp:
- Apr 22, 2009, 4:20:10 PM (13 years ago)
- Branch:
- default
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pubsub_request.patch
r7 r13 11 11 that is passed to the corresponding handler methods. 12 12 13 diff -r 556fc011f965wokkel/generic.py14 --- a/wokkel/generic.py Tue Apr 07 11:16:01 2009 +020015 +++ b/wokkel/generic.py Tue Apr 07 11:17:212009 +020013 diff -r e35e291de060 wokkel/generic.py 14 --- a/wokkel/generic.py Wed Apr 22 01:48:41 2009 -0700 15 +++ b/wokkel/generic.py Wed Apr 22 14:48:14 2009 +0200 16 16 @@ -10,7 +10,7 @@ 17 17 from zope.interface import implements … … 61 61 protocol = xmlstream.XmlStream 62 62 63 diff -r 556fc011f965 wokkel/iwokkel.py 64 --- a/wokkel/iwokkel.py Tue Apr 07 11:16:01 2009 +0200 65 +++ b/wokkel/iwokkel.py Tue Apr 07 11:17:21 2009 +0200 66 @@ -278,6 +278,7 @@ 67 C{list} of L{domish.Element}) 68 """ 69 70 + 71 def notifyDelete(service, nodeIdentifier, subscribers, 72 redirectURI=None): 73 """ 74 @@ -295,77 +296,60 @@ 75 @type redirectURI: C{str} 76 """ 77 78 - def publish(requestor, service, nodeIdentifier, items): 79 + 80 + def publish(request): 81 """ 82 Called when a publish request has been received. 83 84 - @param requestor: The entity the request originated from. 85 - @type requestor: L{jid.JID} 86 - @param service: The entity the request was addressed to. 87 - @type service: L{jid.JID} 88 - @param nodeIdentifier: The identifier of the node to publish to. 89 - @type nodeIdentifier: C{unicode} 90 - @param items: The items to be published as L{domish} elements. 91 - @type items: C{list} of C{domish.Element} 92 + @param request: The publish-subscribe request. 93 + @type request: L{wokkel.pubsub.PubSubRequest} 94 @return: deferred that fires on success. 95 @rtype: L{defer.Deferred} 96 """ 97 98 - def subscribe(requestor, service, nodeIdentifier, subscriber): 99 + 100 + def subscribe(request): 101 """ 102 Called when a subscribe request has been received. 103 104 - @param requestor: The entity the request originated from. 105 - @type requestor: L{jid.JID} 106 - @param service: The entity the request was addressed to. 107 - @type service: L{jid.JID} 108 - @param nodeIdentifier: The identifier of the node to subscribe to. 109 - @type nodeIdentifier: C{unicode} 110 - @param subscriber: The entity to be subscribed. 111 - @type subscriber: L{jid.JID} 112 + @param request: The publish-subscribe request. 113 + @type request: L{wokkel.pubsub.PubSubRequest} 114 @return: A deferred that fires with a 115 L{Subscription<wokkel.pubsub.Subscription>}. 116 @rtype: L{defer.Deferred} 117 """ 118 119 - def unsubscribe(requestor, service, nodeIdentifier, subscriber): 120 + 121 + def unsubscribe(request): 122 """ 123 Called when a subscribe request has been received. 124 125 - @param requestor: The entity the request originated from. 126 - @type requestor: L{jid.JID} 127 - @param service: The entity the request was addressed to. 128 - @type service: L{jid.JID} 129 - @param nodeIdentifier: The identifier of the node to unsubscribe from. 130 - @type nodeIdentifier: C{unicode} 131 - @param subscriber: The entity to be unsubscribed. 132 - @type subscriber: L{jid.JID} 133 + @param request: The publish-subscribe request. 134 + @type request: L{wokkel.pubsub.PubSubRequest} 135 @return: A deferred that fires with C{None} when unsubscription has 136 succeeded. 137 @rtype: L{defer.Deferred} 138 """ 139 140 - def subscriptions(requestor, service): 141 + 142 + def subscriptions(request): 143 """ 144 Called when a subscriptions retrieval request has been received. 145 146 - @param requestor: The entity the request originated from. 147 - @type requestor: L{jid.JID} 148 - @param service: The entity the request was addressed to. 149 - @type service: L{jid.JID} 150 + @param request: The publish-subscribe request. 151 + @type request: L{wokkel.pubsub.PubSubRequest} 152 @return: A deferred that fires with a C{list} of subscriptions as 153 L{Subscription<wokkel.pubsub.Subscription>}. 154 @rtype: L{defer.Deferred} 155 """ 156 157 - def affiliations(requestor, service): 158 + 159 + def affiliations(request): 160 """ 161 Called when a affiliations retrieval request has been received. 162 163 - @param requestor: The entity the request originated from. 164 - @type requestor: L{jid.JID} 165 - @param service: The entity the request was addressed to. 166 - @type service: L{jid.JID} 167 + @param request: The publish-subscribe request. 168 + @type request: L{wokkel.pubsub.PubSubRequest} 169 @return: A deferred that fires with a C{list} of affiliations as 170 C{tuple}s of (node identifier as C{unicode}, affiliation state 171 as C{str}). The affiliation can be C{'owner'}, C{'publisher'}, 172 @@ -373,24 +357,19 @@ 173 @rtype: L{defer.Deferred} 174 """ 175 176 - def create(requestor, service, nodeIdentifier): 177 + 178 + def create(request): 179 """ 180 Called when a node creation request has been received. 181 182 - @param requestor: The entity the request originated from. 183 - @type requestor: L{jid.JID} 184 - @param service: The entity the request was addressed to. 185 - @type service: L{jid.JID} 186 - @param nodeIdentifier: The suggestion for the identifier of the node to 187 - be created. If the request did not include a 188 - suggestion for the node identifier, the value 189 - is C{None}. 190 - @type nodeIdentifier: C{unicode} or C{NoneType} 191 + @param request: The publish-subscribe request. 192 + @type request: L{wokkel.pubsub.PubSubRequest} 193 @return: A deferred that fires with a C{unicode} that represents 194 the identifier of the new node. 195 @rtype: L{defer.Deferred} 196 """ 197 198 + 199 def getConfigurationOptions(): 200 """ 201 Retrieve all known node configuration options. 202 @@ -426,17 +405,13 @@ 203 @rtype: C{dict}. 204 """ 205 206 - def getDefaultConfiguration(requestor, service, nodeType): 207 + 208 + def getDefaultConfiguration(request): 209 """ 210 Called when a default node configuration request has been received. 211 212 - @param requestor: The entity the request originated from. 213 - @type requestor: L{jid.JID} 214 - @param service: The entity the request was addressed to. 215 - @type service: L{jid.JID} 216 - @param nodeType: The type of node for which the configuration is 217 - retrieved, C{'leaf'} or C{'collection'}. 218 - @type nodeType: C{str} 219 + @param request: The publish-subscribe request. 220 + @type request: L{wokkel.pubsub.PubSubRequest} 221 @return: A deferred that fires with a C{dict} representing the default 222 node configuration. Keys are C{str}s that represent the 223 field name. Values can be of types C{unicode}, C{int} or 224 @@ -444,85 +419,74 @@ 225 @rtype: L{defer.Deferred} 226 """ 227 228 - def getConfiguration(requestor, service, nodeIdentifier): 229 + 230 + def getConfiguration(request): 231 """ 232 Called when a node configuration retrieval request has been received. 233 234 - @param requestor: The entity the request originated from. 235 - @type requestor: L{jid.JID} 236 - @param service: The entity the request was addressed to. 237 - @type service: L{jid.JID} 238 - @param nodeIdentifier: The identifier of the node to retrieve the 239 - configuration from. 240 - @type nodeIdentifier: C{unicode} 241 + @param request: The publish-subscribe request. 242 + @type request: L{wokkel.pubsub.PubSubRequest} 243 @return: A deferred that fires with a C{dict} representing the node 244 configuration. Keys are C{str}s that represent the field name. 245 Values can be of types C{unicode}, C{int} or C{bool}. 246 @rtype: L{defer.Deferred} 247 """ 248 249 - def setConfiguration(requestor, service, nodeIdentifier, options): 250 + 251 + def setConfiguration(request): 252 """ 253 Called when a node configuration change request has been received. 254 255 - @param requestor: The entity the request originated from. 256 - @type requestor: L{jid.JID} 257 - @param service: The entity the request was addressed to. 258 - @type service: L{jid.JID} 259 - @param nodeIdentifier: The identifier of the node to change the 260 - configuration of. 261 - @type nodeIdentifier: C{unicode} 262 + @param request: The publish-subscribe request. 263 + @type request: L{wokkel.pubsub.PubSubRequest} 264 @return: A deferred that fires with C{None} when the node's 265 configuration has been changed. 266 @rtype: L{defer.Deferred} 267 """ 268 269 - def items(requestor, service, nodeIdentifier, maxItems, itemIdentifiers): 270 + 271 + def items(request): 272 """ 273 Called when a items retrieval request has been received. 274 275 - @param requestor: The entity the request originated from. 276 - @type requestor: L{jid.JID} 277 - @param service: The entity the request was addressed to. 278 - @type service: L{jid.JID} 279 - @param nodeIdentifier: The identifier of the node to retrieve items 280 - from. 281 - @type nodeIdentifier: C{unicode} 282 + @param request: The publish-subscribe request. 283 + @type request: L{wokkel.pubsub.PubSubRequest} 284 + @return: A deferred that fires with a C{list} of L{pubsub.Item}. 285 + @rtype: L{defer.Deferred} 286 """ 287 288 - def retract(requestor, service, nodeIdentifier, itemIdentifiers): 289 + 290 + def retract(request): 291 """ 292 Called when a item retraction request has been received. 293 294 - @param requestor: The entity the request originated from. 295 - @type requestor: L{jid.JID} 296 - @param service: The entity the request was addressed to. 297 - @type service: L{jid.JID} 298 - @param nodeIdentifier: The identifier of the node to retract items 299 - from. 300 - @type nodeIdentifier: C{unicode} 301 + @param request: The publish-subscribe request. 302 + @type request: L{wokkel.pubsub.PubSubRequest} 303 + @return: A deferred that fires with C{None} when the given items have 304 + been retracted. 305 + @rtype: L{defer.Deferred} 306 """ 307 308 - def purge(requestor, service, nodeIdentifier): 309 + 310 + def purge(request): 311 """ 312 Called when a node purge request has been received. 313 314 - @param requestor: The entity the request originated from. 315 - @type requestor: L{jid.JID} 316 - @param service: The entity the request was addressed to. 317 - @type service: L{jid.JID} 318 - @param nodeIdentifier: The identifier of the node to be purged. 319 - @type nodeIdentifier: C{unicode} 320 + @param request: The publish-subscribe request. 321 + @type request: L{wokkel.pubsub.PubSubRequest} 322 + @return: A deferred that fires with C{None} when the node has been 323 + purged. 324 + @rtype: L{defer.Deferred} 325 """ 326 327 - def delete(requestor, service, nodeIdentifier): 328 + 329 + def delete(request): 330 """ 331 Called when a node deletion request has been received. 332 333 - @param requestor: The entity the request originated from. 334 - @type requestor: L{jid.JID} 335 - @param service: The entity the request was addressed to. 336 - @type service: L{jid.JID} 337 - @param nodeIdentifier: The identifier of the node to be delete. 338 - @type nodeIdentifier: C{unicode} 339 + @param request: The publish-subscribe request. 340 + @type request: L{wokkel.pubsub.PubSubRequest} 341 + @return: A deferred that fires with C{None} when the node has been 342 + deleted. 343 + @rtype: L{defer.Deferred} 344 """ 345 diff -r 556fc011f965 wokkel/pubsub.py 346 --- a/wokkel/pubsub.py Tue Apr 07 11:16:01 2009 +0200 347 +++ b/wokkel/pubsub.py Tue Apr 07 11:17:21 2009 +0200 63 diff -r e35e291de060 wokkel/pubsub.py 64 --- a/wokkel/pubsub.py Wed Apr 22 01:48:41 2009 -0700 65 +++ b/wokkel/pubsub.py Wed Apr 22 14:48:14 2009 +0200 348 66 @@ -16,7 +16,7 @@ 349 67 from twisted.words.protocols.jabber import jid, error, xmlstream … … 981 699 982 700 def getDiscoInfo(self, requestor, target, nodeIdentifier): 983 @@ -585,92 +862,1 7@@701 @@ -585,92 +862,18 @@ 984 702 return d 985 703 … … 1003 721 - continue 1004 722 + def _on_publish(self, request): 1005 + return self.publish(request) 723 + return self.publish(request.sender, request.recipient, 724 + request.nodeIdentifier, request.items) 1006 725 1007 726 - return form … … 1081 800 def toResponse(result): 1082 801 response = domish.Element((NS_PUBSUB, "pubsub")) 1083 @@ -681,28 +88 3,24@@802 @@ -681,28 +884,26 @@ 1084 803 subscription["subscription"] = result.state 1085 804 return response 1086 805 1087 806 - d = self.subscribe(requestor, service, nodeIdentifier, subscriber) 1088 + d = self.subscribe(request) 807 + d = self.subscribe(request.sender, request.recipient, 808 + request.nodeIdentifier, request.subscriber) 1089 809 d.addCallback(toResponse) 1090 810 return d … … 1095 815 - iq, 'unsubscribe', 'nodeOrEmpty', 'jid') 1096 816 + def _on_unsubscribe(self, request): 1097 + return self.unsubscribe(request) 817 + return self.unsubscribe(request.sender, request.recipient, 818 + request.nodeIdentifier, request.subscriber) 1098 819 1099 820 - return self.unsubscribe(requestor, service, nodeIdentifier, subscriber) … … 1116 837 def toResponse(result): 1117 838 response = domish.Element((NS_PUBSUB, 'pubsub')) 1118 @@ -714,13 +91 2,12 @@839 @@ -714,13 +915,12 @@ 1119 840 item['subscription'] = subscription.state 1120 841 return response 1121 842 1122 843 - d = self.subscriptions(requestor, service) 1123 + d = self.subscriptions(request )844 + d = self.subscriptions(request.sender, request.recipient) 1124 845 d.addCallback(toResponse) 1125 846 return d … … 1132 853 def toResponse(result): 1133 854 response = domish.Element((NS_PUBSUB, 'pubsub')) 1134 @@ -733,17 +93 0,15 @@855 @@ -733,17 +933,15 @@ 1135 856 1136 857 return response 1137 858 1138 859 - d = self.affiliations(requestor, service) 1139 + d = self.affiliations(request )860 + d = self.affiliations(request.sender, request.recipient) 1140 861 d.addCallback(toResponse) 1141 862 return d … … 1153 874 create = response.addElement('create') 1154 875 create['node'] = result 1155 @@ -751,7 +94 6,7@@876 @@ -751,7 +949,8 @@ 1156 877 else: 1157 878 return None 1158 879 1159 880 - d = self.create(requestor, service, nodeIdentifier) 1160 + d = self.create(request) 881 + d = self.create(request.sender, request.recipient, 882 + request.nodeIdentifier) 1161 883 d.addCallback(toResponse) 1162 884 return d 1163 885 1164 @@ -771,6 +9 66,7 @@886 @@ -771,6 +970,7 @@ 1165 887 fields.append(data_form.Field.fromDict(option)) 1166 888 return fields … … 1170 892 options = self.getConfigurationOptions() 1171 893 fields = self._makeFields(options, values) 1172 @@ -780,6 +9 76,7 @@894 @@ -780,6 +980,7 @@ 1173 895 1174 896 return form … … 1178 900 options = self.getConfigurationOptions() 1179 901 processedValues = {} 1180 @@ -805,8 +100 2,7 @@902 @@ -805,8 +1006,7 @@ 1181 903 return processedValues 1182 904 … … 1188 910 def toResponse(options): 1189 911 response = domish.Element((NS_PUBSUB_OWNER, "pubsub")) 1190 @@ -814,127 +101 0,82@@912 @@ -814,127 +1014,91 @@ 1191 913 default.addChild(self._formFromConfiguration(options).toElement()) 1192 914 return response … … 1201 923 1202 924 - d = self.getDefaultConfiguration(requestor, service, nodeType) 1203 + d = self.getDefaultConfiguration(request) 925 + d = self.getDefaultConfiguration(request.sender, request.recipient, 926 + request.nodeType) 1204 927 d.addCallback(toResponse) 1205 928 return d … … 1226 949 1227 950 - d = self.getConfiguration(requestor, service, nodeIdentifier) 1228 + d = self.getConfiguration(request) 951 + d = self.getConfiguration(request.sender, request.recipient, 952 + request.nodeIdentifier) 1229 953 d.addCallback(toResponse) 1230 954 return d … … 1237 961 + if request.options: 1238 962 + request.options = self._checkConfiguration(request.options) 1239 + return self.setConfiguration(request) 963 + return self.setConfiguration(request.sender, request.recipient, 964 + request.nodeIdentifier, 965 + request.options) 1240 966 + else: 1241 967 + return None … … 1284 1010 - d = self.items(requestor, service, nodeIdentifier, maxItems, 1285 1011 - itemIdentifiers) 1286 + d = self.items(request) 1012 + d = self.items(request.sender, request.recipient, 1013 + request.nodeIdentifier, request.maxItems, 1014 + request.itemIdentifiers) 1287 1015 d.addCallback(toResponse) 1288 1016 return d … … 1293 1021 - iq, 'retract', 'node') 1294 1022 + def _on_retract(self, request): 1295 + return self.retract(request) 1023 + return self.retract(request.sender, request.recipient, 1024 + request.nodeIdentifier, request.itemIdentifiers) 1296 1025 1297 1026 - itemIdentifiers = [] … … 1306 1035 - itemIdentifiers) 1307 1036 + def _on_purge(self, request): 1308 + return self.purge(request) 1037 + return self.purge(request.sender, request.recipient, 1038 + request.nodeIdentifier) 1309 1039 1310 1040 … … 1314 1044 - return self.purge(requestor, service, nodeIdentifier) 1315 1045 + def _on_delete(self, request): 1316 + return self.delete(request) 1046 + return self.delete(request.sender, request.recipient, 1047 + request.nodeIdentifier) 1317 1048 1318 1049 … … 1343 1074 1344 1075 # public methods 1345 @@ -990,27 +1141,27 @@ 1346 return [] 1347 1348 1349 - def publish(self, requestor, service, nodeIdentifier, items): 1350 + def publish(self, request): 1351 raise Unsupported('publish') 1352 1353 1354 - def subscribe(self, requestor, service, nodeIdentifier, subscriber): 1355 + def subscribe(self, request): 1356 raise Unsupported('subscribe') 1357 1358 1359 - def unsubscribe(self, requestor, service, nodeIdentifier, subscriber): 1360 + def unsubscribe(self, request): 1361 raise Unsupported('subscribe') 1362 1363 1364 - def subscriptions(self, requestor, service): 1365 + def subscriptions(self, request): 1366 raise Unsupported('retrieve-subscriptions') 1367 1368 1369 - def affiliations(self, requestor, service): 1370 + def affiliations(self, request): 1371 raise Unsupported('retrieve-affiliations') 1372 1373 1374 - def create(self, requestor, service, nodeIdentifier): 1375 + def create(self, request): 1376 raise Unsupported('create-nodes') 1377 1378 1379 @@ -1018,30 +1169,29 @@ 1380 return {} 1381 1382 1383 - def getDefaultConfiguration(self, requestor, service, nodeType): 1384 + def getDefaultConfiguration(self, request): 1385 raise Unsupported('retrieve-default') 1386 1387 1388 - def getConfiguration(self, requestor, service, nodeIdentifier): 1389 + def getConfiguration(self, request): 1390 raise Unsupported('config-node') 1391 1392 1393 - def setConfiguration(self, requestor, service, nodeIdentifier, options): 1394 + def setConfiguration(self, request): 1395 raise Unsupported('config-node') 1396 1397 1398 - def items(self, requestor, service, nodeIdentifier, maxItems, 1399 - itemIdentifiers): 1400 + def items(self, request): 1401 raise Unsupported('retrieve-items') 1402 1403 1404 - def retract(self, requestor, service, nodeIdentifier, itemIdentifiers): 1405 + def retract(self, request): 1406 raise Unsupported('retract-items') 1407 1408 1409 - def purge(self, requestor, service, nodeIdentifier): 1410 + def purge(self, request): 1411 raise Unsupported('purge-nodes') 1412 1413 1414 - def delete(self, requestor, service, nodeIdentifier): 1415 + def delete(self, request): 1416 raise Unsupported('delete-nodes') 1417 diff -r 556fc011f965 wokkel/test/test_pubsub.py 1418 --- a/wokkel/test/test_pubsub.py Tue Apr 07 11:16:01 2009 +0200 1419 +++ b/wokkel/test/test_pubsub.py Tue Apr 07 11:17:21 2009 +0200 1076 diff -r e35e291de060 wokkel/test/test_pubsub.py 1077 --- a/wokkel/test/test_pubsub.py Wed Apr 22 01:48:41 2009 -0700 1078 +++ b/wokkel/test/test_pubsub.py Wed Apr 22 14:48:14 2009 +0200 1420 1079 @@ -15,6 +15,7 @@ 1421 1080 from twisted.words.protocols.jabber.xmlstream import toResponse … … 2116 1775 """ 2117 1776 A publish request should result in L{PubSubService.publish} being 2118 @@ -606,27 +1232,147 @@ 2119 </iq> 1777 @@ -607,26 +1233,146 @@ 2120 1778 """ 2121 1779 2122 -def publish(requestor, service, nodeIdentifier, items):1780 def publish(requestor, service, nodeIdentifier, items): 2123 1781 - self.assertEqual(JID('user@example.org'), requestor) 2124 1782 - self.assertEqual(JID('pubsub.example.org'), service) 2125 1783 - self.assertEqual('test', nodeIdentifier) 2126 1784 - self.assertEqual([], items) 2127 + def publish(request):2128 1785 return defer.succeed(None) 2129 1786 … … 2147 1804 + """ 2148 1805 + 2149 + def subscribe(request ):2150 + return defer.succeed(pubsub.Subscription( request.nodeIdentifier,2151 + request.subscriber,1806 + def subscribe(requestor, service, nodeIdentifier, subscriber): 1807 + return defer.succeed(pubsub.Subscription(nodeIdentifier, 1808 + subscriber, 2152 1809 + 'subscribed')) 2153 1810 + … … 2182 1839 + """ 2183 1840 + 2184 + def subscribe(request ):2185 + return defer.succeed(pubsub.Subscription( request.nodeIdentifier,2186 + request.subscriber,1841 + def subscribe(requestor, service, nodeIdentifier, subscriber): 1842 + return defer.succeed(pubsub.Subscription(nodeIdentifier, 1843 + subscriber, 2187 1844 + 'subscribed')) 2188 1845 + … … 2211 1868 + """ 2212 1869 + 2213 + def unsubscribe(request ):1870 + def unsubscribe(requestor, service, nodeIdentifier, subscriber): 2214 1871 + return defer.succeed(None) 2215 1872 + … … 2271 1928 </iq> 2272 1929 """ 2273 @@ -672,14 +1418,141 @@ 2274 self.assertEqual('subscribed', subscription['subscription']) 2275 2276 2277 - def subscriptions(requestor, service): 1930 @@ -673,13 +1419,140 @@ 1931 1932 1933 def subscriptions(requestor, service): 2278 1934 - self.assertEqual(JID('user@example.org'), requestor) 2279 1935 - self.assertEqual(JID('pubsub.example.org'), service) 2280 + def subscriptions(request):2281 1936 subscription = pubsub.Subscription('test', JID('user@example.org'), 2282 1937 'subscribed') … … 2319 1974 + 2320 1975 + 2321 + def affiliations(request ):1976 + def affiliations(requestor, service): 2322 1977 + affiliation = ('test', 'owner') 2323 1978 + return defer.succeed([affiliation]) … … 2344 1999 + """ 2345 2000 + 2346 + def create(request ):2347 + return defer.succeed( request.nodeIdentifier)2001 + def create(requestor, service, nodeIdentifier): 2002 + return defer.succeed(nodeIdentifier) 2348 2003 + 2349 2004 + def cb(element): … … 2371 2026 + """ 2372 2027 + 2373 + def create(request ):2028 + def create(requestor, service, nodeIdentifier): 2374 2029 + return defer.succeed(u'myrenamednode') 2375 2030 + … … 2402 2057 + """ 2403 2058 + 2404 + def create(request ):2059 + def create(requestor, service, nodeIdentifier): 2405 2060 + return defer.succeed(u'random') 2406 2061 + … … 2416 2071 d.addCallback(cb) 2417 2072 return d 2418 @@ -710,10 +1583,7 @@ 2419 "label": "Deliver payloads with event notifications"} 2073 @@ -711,9 +1584,6 @@ 2420 2074 } 2421 2075 2422 -def getDefaultConfiguration(requestor, service, nodeType):2076 def getDefaultConfiguration(requestor, service, nodeType): 2423 2077 - self.assertEqual(JID('user@example.org'), requestor) 2424 2078 - self.assertEqual(JID('pubsub.example.org'), service) 2425 2079 - self.assertEqual('leaf', nodeType) 2426 + def getDefaultConfiguration(request):2427 2080 return defer.succeed({}) 2428 2081 … … 2463 2116 + } 2464 2117 + 2465 + def getDefaultConfiguration(request ):2118 + def getDefaultConfiguration(requestor, service, nodeType): 2466 2119 + return defer.succeed({}) 2467 2120 + … … 2497 2150 + """ 2498 2151 + 2499 + def getDefaultConfiguration(request ):2152 + def getDefaultConfiguration(requestor, service, nodeType): 2500 2153 + self.fail("Unexpected call to getConfiguration") 2501 2154 + … … 2514 2167 """ 2515 2168 On a node configuration get request L{PubSubService.getConfiguration} 2516 @@ -759,14 +1708,11 @@ 2517 "label": "Owner of the node"} 2169 @@ -760,13 +1709,10 @@ 2518 2170 } 2519 2171 2520 -def getConfiguration(requestor, service, nodeIdentifier):2172 def getConfiguration(requestor, service, nodeIdentifier): 2521 2173 - self.assertEqual(JID('user@example.org'), requestor) 2522 2174 - self.assertEqual(JID('pubsub.example.org'), service) 2523 2175 - self.assertEqual('test', nodeIdentifier) 2524 2176 - 2525 + def getConfiguration(request):2526 2177 return defer.succeed({'pubsub#deliver_payloads': '0', 2527 2178 'pubsub#persist_items': '1', … … 2545 2196 d.addCallback(cb) 2546 2197 return d 2547 @@ -834,16 +1784,14 @@ 2548 "label": "Deliver payloads with event notifications"} 2198 @@ -835,15 +1785,13 @@ 2549 2199 } 2550 2200 2551 -def setConfiguration(requestor, service, nodeIdentifier, options):2201 def setConfiguration(requestor, service, nodeIdentifier, options): 2552 2202 - self.assertEqual(JID('user@example.org'), requestor) 2553 2203 - self.assertEqual(JID('pubsub.example.org'), service) 2554 2204 - self.assertEqual('test', nodeIdentifier) 2555 + def setConfiguration(request):2556 2205 self.assertEqual({'pubsub#deliver_payloads': False, 2557 - 'pubsub#persist_items': True}, options) 2558 + 'pubsub#persist_items': True}, request.options) 2206 'pubsub#persist_items': True}, options) 2559 2207 return defer.succeed(None) 2560 2208 … … 2565 2213 2566 2214 2567 @@ -868,10 +1816,11 @@ 2568 </iq> 2569 """ 2570 2571 - def setConfiguration(requestor, service, nodeIdentifier, options): 2572 + def setConfiguration(request): 2215 @@ -872,6 +1820,7 @@ 2573 2216 self.fail("Unexpected call to setConfiguration") 2574 2217 … … 2578 2221 2579 2222 2580 @@ -907,14 +1856,47 @@ 2581 "label": "Deliver payloads with event notifications"} 2582 } 2583 2584 - def setConfiguration(requestor, service, nodeIdentifier, options): 2585 - self.assertEquals(['pubsub#deliver_payloads'], options.keys()) 2586 + def setConfiguration(request): 2587 + self.assertEquals(['pubsub#deliver_payloads'], 2588 + request.options.keys()) 2223 @@ -912,9 +1861,41 @@ 2589 2224 2590 2225 self.service.getConfigurationOptions = getConfigurationOptions … … 2628 2263 """ 2629 2264 On a items request, return all items for the given node. 2630 @@ -928,12 +19 10,7@@2265 @@ -928,12 +1909,8 @@ 2631 2266 </iq> 2632 2267 """ … … 2638 2273 - self.assertIdentical(None, maxItems) 2639 2274 - self.assertEqual([], items) 2640 + def items(request): 2275 + def items(requestor, service, nodeIdentifier, maxItems, 2276 + itemIdentifiers): 2641 2277 return defer.succeed([pubsub.Item('current')]) 2642 2278 2643 2279 def cb(element): 2644 @@ -970,11 +1947,7 @@ 2645 </iq> 2280 @@ -971,10 +1948,6 @@ 2646 2281 """ 2647 2282 2648 -def retract(requestor, service, nodeIdentifier, itemIdentifiers):2283 def retract(requestor, service, nodeIdentifier, itemIdentifiers): 2649 2284 - self.assertEqual(JID('user@example.org'), requestor) 2650 2285 - self.assertEqual(JID('pubsub.example.org'), service) 2651 2286 - self.assertEqual('test', nodeIdentifier) 2652 2287 - self.assertEqual(['item1', 'item2'], itemIdentifiers) 2653 + def retract(request):2654 2288 return defer.succeed(None) 2655 2289 2656 2290 self.service.retract = retract 2657 @@ -996,10 +1969,7 @@ 2658 </iq> 2291 @@ -997,9 +1970,6 @@ 2659 2292 """ 2660 2293 2661 -def purge(requestor, service, nodeIdentifier):2294 def purge(requestor, service, nodeIdentifier): 2662 2295 - self.assertEqual(JID('user@example.org'), requestor) 2663 2296 - self.assertEqual(JID('pubsub.example.org'), service) 2664 2297 - self.assertEqual('test', nodeIdentifier) 2665 + def purge(request):2666 2298 return defer.succeed(None) 2667 2299 2668 2300 self.service.purge = purge 2669 @@ -1021,10 +1991,7 @@ 2670 </iq> 2301 @@ -1022,9 +1992,6 @@ 2671 2302 """ 2672 2303 2673 -def delete(requestor, service, nodeIdentifier):2304 def delete(requestor, service, nodeIdentifier): 2674 2305 - self.assertEqual(JID('user@example.org'), requestor) 2675 2306 - self.assertEqual(JID('pubsub.example.org'), service) 2676 2307 - self.assertEqual('test', nodeIdentifier) 2677 + def delete(request):2678 2308 return defer.succeed(None) 2679 2309 -
pubsub_resource.patch
r12 r13 1 diff -r ce121b9d0797 wokkel/iwokkel.py 2 --- a/wokkel/iwokkel.py Fri Apr 10 15:36:22 2009 +0200 3 +++ b/wokkel/iwokkel.py Fri Apr 10 17:31:54 2009 +0200 4 @@ -297,75 +297,46 @@ 5 """ 6 7 8 - def publish(request): 1 diff -r 29f67459352b wokkel/iwokkel.py 2 --- a/wokkel/iwokkel.py Wed Apr 22 14:48:20 2009 +0200 3 +++ b/wokkel/iwokkel.py Wed Apr 22 16:14:56 2009 +0200 4 @@ -278,6 +278,7 @@ 5 C{list} of L{domish.Element}) 6 """ 7 8 + 9 def notifyDelete(service, nodeIdentifier, subscribers, 10 redirectURI=None): 11 """ 12 @@ -526,3 +527,243 @@ 13 @param nodeIdentifier: The identifier of the node to be delete. 14 @type nodeIdentifier: C{unicode} 15 """ 16 + 17 + 18 + 9 19 +class IPubSubResource(Interface): 10 20 + 11 21 + def locateResource(request): 12 """ 13 - Called when a publish request has been received. 22 + """ 14 23 + Locate a resource that will handle the request. 15 16 @param request: The publish-subscribe request. 17 @type request: L{wokkel.pubsub.PubSubRequest} 18 - @return: deferred that fires on success. 24 + 25 + @param request: The publish-subscribe request. 26 + @type request: L{wokkel.pubsub.PubSubRequest} 19 27 + """ 20 28 + … … 34 42 + respectively the node type and a dictionary with the meta 35 43 + data for that node. 36 @rtype: L{defer.Deferred} 37 """ 38 39 40 - def subscribe(request): 44 + @rtype: L{defer.Deferred} 45 + """ 46 + 47 + 41 48 + def getNodes(requestor, service, nodeIdentifier): 42 """ 43 - Called when a subscribe request has been received. 49 + """ 44 50 + Get all nodes contained by this node. 45 46 - @param request: The publish-subscribe request. 47 - @type request: L{wokkel.pubsub.PubSubRequest} 48 - @return: A deferred that fires with a 49 - L{Subscription<wokkel.pubsub.Subscription>}. 50 - @rtype: L{defer.Deferred} 51 - """ 52 - 53 - 54 - def unsubscribe(request): 55 - """ 56 - Called when a subscribe request has been received. 57 - 58 - @param request: The publish-subscribe request. 59 - @type request: L{wokkel.pubsub.PubSubRequest} 60 - @return: A deferred that fires with C{None} when unsubscription has 61 - succeeded. 62 - @rtype: L{defer.Deferred} 63 - """ 64 - 65 - 66 - def subscriptions(request): 67 - """ 68 - Called when a subscriptions retrieval request has been received. 69 - 70 - @param request: The publish-subscribe request. 71 - @type request: L{wokkel.pubsub.PubSubRequest} 72 - @return: A deferred that fires with a C{list} of subscriptions as 73 - L{Subscription<wokkel.pubsub.Subscription>}. 74 - @rtype: L{defer.Deferred} 75 - """ 76 - 77 - 78 - def affiliations(request): 79 - """ 80 - Called when a affiliations retrieval request has been received. 81 - 82 - @param request: The publish-subscribe request. 83 - @type request: L{wokkel.pubsub.PubSubRequest} 84 - @return: A deferred that fires with a C{list} of affiliations as 85 - C{tuple}s of (node identifier as C{unicode}, affiliation state 86 - as C{str}). The affiliation can be C{'owner'}, C{'publisher'}, 87 - or C{'outcast'}. 88 - @rtype: L{defer.Deferred} 89 - """ 90 - 91 - 92 - def create(request): 93 - """ 94 - Called when a node creation request has been received. 95 - 96 - @param request: The publish-subscribe request. 97 - @type request: L{wokkel.pubsub.PubSubRequest} 98 - @return: A deferred that fires with a C{unicode} that represents 99 - the identifier of the new node. 51 + 100 52 + @param requestor: The entity the request originated from. 101 53 + @type requestor: L{jid.JID} … … 105 57 + @type nodeIdentifier: L{unicode} 106 58 + @return: A deferred that fires with a list of child node identifiers. 107 @rtype: L{defer.Deferred} 108 """ 109 110 @@ -406,7 +377,80 @@ 111 """ 112 113 114 - def getDefaultConfiguration(request): 59 + @rtype: L{defer.Deferred} 60 + """ 61 + 62 + 63 + def getConfigurationOptions(): 64 + """ 65 + Retrieve all known node configuration options. 66 + 67 + The returned dictionary holds the possible node configuration options 68 + by option name. The value of each entry represents the specifics for 69 + that option in a dictionary: 70 + 71 + - C{'type'} (C{str}): The option's type (see 72 + L{Field<wokkel.data_form.Field>}'s doc string for possible values). 73 + - C{'label'} (C{unicode}): A human readable label for this option. 74 + - C{'options'} (C{dict}): Optional list of possible values for this 75 + option. 76 + 77 + Example:: 78 + 79 + { 80 + "pubsub#persist_items": 81 + {"type": "boolean", 82 + "label": "Persist items to storage"}, 83 + "pubsub#deliver_payloads": 84 + {"type": "boolean", 85 + "label": "Deliver payloads with event notifications"}, 86 + "pubsub#send_last_published_item": 87 + {"type": "list-single", 88 + "label": "When to send the last published item", 89 + "options": { 90 + "never": "Never", 91 + "on_sub": "When a new subscription is processed"} 92 + } 93 + } 94 + 95 + @rtype: C{dict}. 96 + """ 97 + 98 + 115 99 + def publish(request): 116 100 + """ … … 187 171 + 188 172 + def default(request): 189 """ 190 Called when a default node configuration request has been received. 191 192 @@ -420,7 +464,7 @@ 193 """ 194 195 196 - def getConfiguration(request): 173 + """ 174 + Called when a default node configuration request has been received. 175 + 176 + @param request: The publish-subscribe request. 177 + @type request: L{wokkel.pubsub.PubSubRequest} 178 + @return: A deferred that fires with a C{dict} representing the default 179 + node configuration. Keys are C{str}s that represent the 180 + field name. Values can be of types C{unicode}, C{int} or 181 + C{bool}. 182 + @rtype: L{defer.Deferred} 183 + """ 184 + 185 + 197 186 + def configureGet(request): 198 """ 199 Called when a node configuration retrieval request has been received. 200 201 @@ -433,7 +477,7 @@ 202 """ 203 204 205 - def setConfiguration(request): 187 + """ 188 + Called when a node configuration retrieval request has been received. 189 + 190 + @param request: The publish-subscribe request. 191 + @type request: L{wokkel.pubsub.PubSubRequest} 192 + @return: A deferred that fires with a C{dict} representing the node 193 + configuration. Keys are C{str}s that represent the field name. 194 + Values can be of types C{unicode}, C{int} or C{bool}. 195 + @rtype: L{defer.Deferred} 196 + """ 197 + 198 + 206 199 + def configureSet(request): 207 """ 208 Called when a node configuration change request has been received. 209 210 diff -r ce121b9d0797 wokkel/pubsub.py 211 --- a/wokkel/pubsub.py Fri Apr 10 15:36:22 2009 +0200 212 +++ b/wokkel/pubsub.py Fri Apr 10 17:31:54 2009 +0200 200 + """ 201 + Called when a node configuration change request has been received. 202 + 203 + @param request: The publish-subscribe request. 204 + @type request: L{wokkel.pubsub.PubSubRequest} 205 + @return: A deferred that fires with C{None} when the node's 206 + configuration has been changed. 207 + @rtype: L{defer.Deferred} 208 + """ 209 + 210 + 211 + def items(request): 212 + """ 213 + Called when a items retrieval request has been received. 214 + 215 + @param request: The publish-subscribe request. 216 + @type request: L{wokkel.pubsub.PubSubRequest} 217 + @return: A deferred that fires with a C{list} of L{pubsub.Item}. 218 + @rtype: L{defer.Deferred} 219 + """ 220 + 221 + 222 + def retract(request): 223 + """ 224 + Called when a item retraction request has been received. 225 + 226 + @param request: The publish-subscribe request. 227 + @type request: L{wokkel.pubsub.PubSubRequest} 228 + @return: A deferred that fires with C{None} when the given items have 229 + been retracted. 230 + @rtype: L{defer.Deferred} 231 + """ 232 + 233 + 234 + def purge(request): 235 + """ 236 + Called when a node purge request has been received. 237 + 238 + @param request: The publish-subscribe request. 239 + @type request: L{wokkel.pubsub.PubSubRequest} 240 + @return: A deferred that fires with C{None} when the node has been 241 + purged. 242 + @rtype: L{defer.Deferred} 243 + """ 244 + 245 + 246 + def delete(request): 247 + """ 248 + Called when a node deletion request has been received. 249 + 250 + @param request: The publish-subscribe request. 251 + @type request: L{wokkel.pubsub.PubSubRequest} 252 + @return: A deferred that fires with C{None} when the node has been 253 + deleted. 254 + @rtype: L{defer.Deferred} 255 + """ 256 diff -r 29f67459352b wokkel/pubsub.py 257 --- a/wokkel/pubsub.py Wed Apr 22 14:48:20 2009 +0200 258 +++ b/wokkel/pubsub.py Wed Apr 22 16:14:56 2009 +0200 213 259 @@ -13,12 +13,13 @@ 214 260 from zope.interface import implements … … 255 301 } 256 302 257 @@ -806, 13 +812,10@@303 @@ -806,8 +812,35 @@ 258 304 '/*': '_onPubSubRequest', 259 305 } 260 306 307 + _legacyHandlers = { 308 + 'publish': ('publish', ['sender', 'recipient', 309 + 'nodeIdentifier', 'items']), 310 + 'subscribe': ('subscribe', ['sender', 'recipient', 311 + 'nodeIdentifier', 'subscriber']), 312 + 'unsubscribe': ('unsubscribe', ['sender', 'recipient', 313 + 'nodeIdentifier', 'subscriber']), 314 + 'subscriptions': ('subscriptions', ['sender', 'recipient']), 315 + 'affiliations': ('affiliations', ['sender', 'recipient']), 316 + 'create': ('create', ['sender', 'recipient', 'nodeIdentifier']), 317 + 'getConfigurationOptions': ('getConfigurationOptions', []), 318 + 'default': ('getDefaultConfiguration', 319 + ['sender', 'recipient', 'nodeType']), 320 + 'configureGet': ('getConfiguration', ['sender', 'recipient', 321 + 'nodeIdentifier']), 322 + 'configureSet': ('setConfiguration', ['sender', 'recipient', 323 + 'nodeIdentifier', 'options']), 324 + 'items': ('items', ['sender', 'recipient', 'nodeIdentifier', 325 + 'maxItems', 'itemIdentifiers']), 326 + 'retract': ('retract', ['sender', 'recipient', 'nodeIdentifier', 327 + 'itemIdentifiers']), 328 + 'purge': ('purge', ['sender', 'recipient', 'nodeIdentifier']), 329 + 'delete': ('delete', ['sender', 'recipient', 'nodeIdentifier']), 330 + } 331 332 - def __init__(self): 261 333 + hideNodes = False 262 263 - def __init__(self): 264 - self.discoIdentity = {'category': 'pubsub', 265 - 'type': 'generic', 266 - 'name': 'Generic Publish-Subscribe Service'} 267 - 268 - self.pubSubFeatures = [] 269 + def __init__(self, resource): 334 + 335 + def __init__(self, resource=None): 270 336 + self.resource = resource 271 272 273 def connectionMade(self):274 @@ -820,19 +8 23,9 @@337 self.discoIdentity = {'category': 'pubsub', 338 'type': 'generic', 339 'name': 'Generic Publish-Subscribe Service'} 340 @@ -820,19 +853,9 @@ 275 341 276 342 … … 294 360 (nodeType, metaData) = nodeInfo['type'], nodeInfo['meta-data'] 295 361 info.append(disco.DiscoIdentity('pubsub', nodeType)) 296 @@ -852,17 +8 45,33@@362 @@ -852,17 +875,49 @@ 297 363 298 364 info.append(form) … … 306 372 + 307 373 + request = PubSubRequest('discoInfo') 308 + resource = self.resource.locateResource(request) 374 + 375 + if self.resource is not None: 376 + resource = self.resource.locateResource(request) 377 + identity = resource.discoIdentity 378 + features = resource.features 379 + getInfo = resource.getInfo 380 + else: 381 + category, idType, name = self.discoIdentity 382 + identity = disco.DiscoIdentity(category, idType, name) 383 + features = self.pubSubFeatures 384 + getInfo = self.getNodeInfo 309 385 + 310 386 + if not nodeIdentifier: 311 + info.append( resource.discoIdentity)387 + info.append(identity) 312 388 + info.append(disco.DiscoFeature(disco.NS_DISCO_ITEMS)) 313 389 + info.extend([disco.DiscoFeature("%s#%s" % (NS_PUBSUB, feature)) 314 + for feature in resource.features])315 + 316 + d = resource.getInfo(requestor, target, nodeIdentifier or '')390 + for feature in features]) 391 + 392 + d = getInfo(requestor, target, nodeIdentifier or '') 317 393 + d.addCallback(toInfo, info) 318 394 + d.addErrback(log.err) … … 322 398 def getDiscoItems(self, requestor, target, nodeIdentifier): 323 399 - if nodeIdentifier or self.hideNodes: 324 + request = PubSubRequest('discoInfo') 325 + resource = self.resource.locateResource(request) 326 + 400 - return defer.succeed([]) 327 401 + if self.hideNodes: 328 return defer.succeed([]) 402 + d = defer.succeed([]) 403 + elif self.resource is not None: 404 + request = PubSubRequest('discoInfo') 405 + resource = self.resource.locateResource(request) 406 + d = resource.getNodes(requestor, target, nodeIdentifier) 407 + elif nodeIdentifier: 408 + d = self.getNodes(requestor, target) 409 + else: 410 + d = defer.succeed([]) 411 + 329 412 330 413 - d = self.getNodes(requestor, target) 331 + d = resource.getNodes(requestor, target, nodeIdentifier)414 + 332 415 d.addCallback(lambda nodes: [disco.DiscoItem(target, node) 333 416 for node in nodes]) 334 417 return d 335 @@ -870,9 1 +879,80 @@418 @@ -870,95 +925,90 @@ 336 419 337 420 def _onPubSubRequest(self, iq): … … 339 422 - handler = getattr(self, '_on_%s' % request.verb) 340 423 - return handler(request) 341 + resource = self.resource.locateResource(request) 342 424 425 + if self.resource is not None: 426 + resource = self.resource.locateResource(request) 427 + else: 428 + resource = self 429 430 - def _on_publish(self, request): 431 - return self.publish(request.sender, request.recipient, 432 - request.nodeIdentifier, request.items) 343 433 + # Preprocess the request, knowing the handling resource 344 434 + try: … … 351 441 + return defer.succeed(None) 352 442 353 - def _on_publish(self, request):354 - return self.publish(request)355 443 + # Process the request itself, 356 + try: 357 + handler = getattr(resource, request.verb) 358 + except AttributeError: 359 + # fix lookup feature 360 + text = "Request verb: %s" % request.verb 361 + return defer.fail(Unsupported('', text)) 362 363 + d = handler(request) 444 + if resource is not self: 445 + try: 446 + handler = getattr(resource, request.verb) 447 + except AttributeError: 448 + # fix lookup feature 449 + text = "Request verb: %s" % request.verb 450 + return defer.fail(Unsupported('', text)) 364 451 365 452 - def _on_subscribe(self, request): 366 + # If needed, translate the result into a response 367 + try: 368 + cb = getattr(self, '_toResponse_%s' % request.verb) 369 + except AttributeError: 370 + pass 453 + d = handler(request) 371 454 + else: 372 + d.addCallback(cb, resource, request) 455 + handlerName, argNames = self._legacyHandlers[request.verb] 456 + handler = getattr(self, handlerName) 457 + args = [getattr(request, arg) for arg in argNames] 458 + d = handler(*args) 373 459 374 460 - def toResponse(result): … … 380 466 - subscription["subscription"] = result.state 381 467 - return response 382 - 383 - d = self.subscribe(request) 468 + # If needed, translate the result into a response 469 + try: 470 + cb = getattr(self, '_toResponse_%s' % request.verb) 471 + except AttributeError: 472 + pass 473 + else: 474 + d.addCallback(cb, resource, request) 475 476 - d = self.subscribe(request.sender, request.recipient, 477 - request.nodeIdentifier, request.subscriber) 384 478 - d.addCallback(toResponse) 385 479 return d … … 387 481 388 482 - def _on_unsubscribe(self, request): 389 - return self.unsubscribe(request) 483 - return self.unsubscribe(request.sender, request.recipient, 484 - request.nodeIdentifier, request.subscriber) 390 485 + def _toResponse_subscribe(self, result, resource, request): 391 486 + response = domish.Element((NS_PUBSUB, "pubsub")) … … 440 535 return response 441 536 - 442 - d = self.subscriptions(request )537 - d = self.subscriptions(request.sender, request.recipient) 443 538 - d.addCallback(toResponse) 444 539 - return d … … 458 553 - return response 459 554 - 460 - d = self.affiliations(request )555 - d = self.affiliations(request.sender, request.recipient) 461 556 - d.addCallback(toResponse) 462 557 - return d … … 474 569 - return None 475 570 - 476 - d = self.create(request) 571 - d = self.create(request.sender, request.recipient, 572 - request.nodeIdentifier) 477 573 - d.addCallback(toResponse) 478 574 - return d … … 482 578 483 579 def _makeFields(self, options, values): 484 @@ -97 3,8 +971,8 @@580 @@ -977,8 +1027,8 @@ 485 581 return fields 486 582 … … 493 589 form = data_form.Form(formType="form", 494 590 formNamespace=NS_PUBSUB_NODE_CONFIG, 495 @@ -98 3,8 +981,8 @@591 @@ -987,8 +1037,8 @@ 496 592 return form 497 593 … … 504 600 505 601 for key, value in values.iteritems(): 506 @@ -10 08,93 +1006,52 @@602 @@ -1012,102 +1062,52 @@ 507 603 return processedValues 508 604 … … 530 626 + return response 531 627 532 - d = self.getDefaultConfiguration(request) 628 - d = self.getDefaultConfiguration(request.sender, request.recipient, 629 - request.nodeType) 533 630 - d.addCallback(toResponse) 534 631 - return d … … 555 652 - return response 556 653 557 - d = self.getConfiguration(request) 654 - d = self.getConfiguration(request.sender, request.recipient, 655 - request.nodeIdentifier) 558 656 - d.addCallback(toResponse) 559 657 - return d … … 564 662 if request.options: 565 663 - request.options = self._checkConfiguration(request.options) 566 - return self.setConfiguration(request) 664 - return self.setConfiguration(request.sender, request.recipient, 665 - request.nodeIdentifier, 666 - request.options) 567 667 + request.options = self._checkConfiguration(resource, 568 668 + request.options) … … 592 692 - return response 593 693 - 594 - d = self.items(request) 694 - d = self.items(request.sender, request.recipient, 695 - request.nodeIdentifier, request.maxItems, 696 - request.itemIdentifiers) 595 697 - d.addCallback(toResponse) 596 698 - return d … … 598 700 - 599 701 - def _on_retract(self, request): 600 - return self.retract(request) 702 - return self.retract(request.sender, request.recipient, 703 - request.nodeIdentifier, request.itemIdentifiers) 601 704 - 602 705 - 603 706 - def _on_purge(self, request): 604 - return self.purge(request) 707 - return self.purge(request.sender, request.recipient, 708 - request.nodeIdentifier) 605 709 - 606 710 - 607 711 - def _on_delete(self, request): 608 - return self.delete(request) 712 - return self.delete(request.sender, request.recipient, 713 - request.nodeIdentifier) 609 714 - 610 715 - … … 628 733 def _createNotification(self, eventType, service, nodeIdentifier, 629 734 subscriber, subscriptions=None): 630 @@ -11 18,6 +1075,8 @@735 @@ -1131,6 +1131,8 @@ 631 736 632 737 return message … … 637 742 for subscriber, subscriptions, items in notifications: 638 743 message = self._createNotification('items', service, 639 @@ -1 139,65 +1098,96@@640 self.send(message)641 642 643 - def getNodeInfo(self, requestor, service, nodeIdentifier): 644 - return None 645 744 @@ -1215,3 +1217,98 @@ 745 746 def delete(self, requestor, service, nodeIdentifier): 747 raise Unsupported('delete-nodes') 748 + 749 + 750 + 646 751 +class PubSubResource(object): 647 648 - def getNodes(self, requestor, service): 649 - return [] 752 + 650 753 + implements(IPubSubResource) 651 754 + 652 755 + features = [] 653 756 + discoIdentity = disco.DiscoIdentity('pubsub', 654 757 + 'service', 655 758 + 'Publish-Subscribe Service') 656 657 - def publish(self, request): 658 - raise Unsupported('publish') 659 759 + 760 + 660 761 + def locateResource(self, request): 661 762 + return self 662 663 - def subscribe(self, request): 664 - raise Unsupported('subscribe') 665 763 + 764 + 666 765 + def getInfo(self, requestor, service, nodeIdentifier): 667 766 + return defer.succeed(None) 668 669 - def unsubscribe(self, request): 670 - raise Unsupported('subscribe') 671 672 - 673 - def subscriptions(self, request): 674 - raise Unsupported('retrieve-subscriptions') 675 - 676 - 677 - def affiliations(self, request): 678 - raise Unsupported('retrieve-affiliations') 679 - 680 - 681 - def create(self, request): 682 - raise Unsupported('create-nodes') 767 + 768 + 683 769 + def getNodes(self, requestor, service, nodeIdentifier): 684 770 + return defer.succeed([]) 685 686 687 def getConfigurationOptions(self): 688 return {} 689 690 691 - def getDefaultConfiguration(self, request): 692 - raise Unsupported('retrieve-default') 771 + 772 + 773 + def getConfigurationOptions(self): 774 + return {} 775 + 776 + 693 777 + def publish(self, request): 694 778 + return defer.fail(Unsupported('publish')) 695 696 697 - def getConfiguration(self, request): 698 - raise Unsupported('config-node') 779 + 780 + 699 781 + def subscribe(self, request): 700 782 + return defer.fail(Unsupported('subscribe')) 701 702 703 - def setConfiguration(self, request): 704 - raise Unsupported('config-node') 783 + 784 + 705 785 + def unsubscribe(self, request): 706 786 + return defer.fail(Unsupported('subscribe')) … … 729 809 + def configureSet(self, request): 730 810 + return defer.fail(Unsupported('config-node')) 731 732 733 def items(self, request): 734 - raise Unsupported('retrieve-items') 811 + 812 + 813 + def items(self, request): 735 814 + return defer.fail(Unsupported('retrieve-items')) 736 737 738 def retract(self, request): 739 - raise Unsupported('retract-items') 815 + 816 + 817 + def retract(self, request): 740 818 + return defer.fail(Unsupported('retract-items')) 741 742 743 def purge(self, request): 744 - raise Unsupported('purge-nodes') 819 + 820 + 821 + def purge(self, request): 745 822 + return defer.fail(Unsupported('purge-nodes')) 746 747 748 def delete(self, request): 749 - raise Unsupported('delete-nodes') 823 + 824 + 825 + def delete(self, request): 750 826 + return defer.fail(Unsupported('delete-nodes')) 751 827 + … … 765 841 + def subscriptionsSet(self, request): 766 842 + return defer.fail(Unsupported('manage-subscriptions')) 767 diff -r ce121b9d0797wokkel/test/test_pubsub.py768 --- a/wokkel/test/test_pubsub.py Fri Apr 10 15:36:222009 +0200769 +++ b/wokkel/test/test_pubsub.py Fri Apr 10 17:31:542009 +0200843 diff -r 29f67459352b wokkel/test/test_pubsub.py 844 --- a/wokkel/test/test_pubsub.py Wed Apr 22 14:48:20 2009 +0200 845 +++ b/wokkel/test/test_pubsub.py Wed Apr 22 16:14:56 2009 +0200 770 846 @@ -1222,7 +1222,8 @@ 771 847 … … 914 990 A publish request should result in L{PubSubService.publish} being 915 991 called. 916 @@ -1338,12 +1419,12 @@ 917 def publish(request): 992 @@ -1335,15 +1416,15 @@ 993 </iq> 994 """ 995 996 - def publish(requestor, service, nodeIdentifier, items): 997 + def publish(request): 918 998 return defer.succeed(None) 919 999 … … 930 1010 A successful subscription should return the current subscription. 931 1011 """ 1012 @@ -1357,9 +1438,9 @@ 1013 </iq> 1014 """ 1015 1016 - def subscribe(requestor, service, nodeIdentifier, subscriber): 1017 - return defer.succeed(pubsub.Subscription(nodeIdentifier, 1018 - subscriber, 1019 + def subscribe(request): 1020 + return defer.succeed(pubsub.Subscription(request.nodeIdentifier, 1021 + request.subscriber, 1022 'subscribed')) 1023 1024 def cb(element): 932 1025 @@ -1371,14 +1452,14 @@ 933 1026 self.assertEqual('user@example.org/Home', subscription['jid']) … … 948 1041 A successful subscription on root node should return no node attribute. 949 1042 """ 950 @@ -1400,14 +1481,14 @@ 1043 @@ -1392,22 +1473,22 @@ 1044 </iq> 1045 """ 1046 1047 - def subscribe(requestor, service, nodeIdentifier, subscriber): 1048 - return defer.succeed(pubsub.Subscription(nodeIdentifier, 1049 - subscriber, 1050 + def subscribe(request): 1051 + return defer.succeed(pubsub.Subscription(request.nodeIdentifier, 1052 + request.subscriber, 1053 'subscribed')) 1054 951 1055 def cb(element): 952 1056 self.assertFalse(element.subscription.hasAttribute('node')) … … 966 1070 A successful unsubscription should return an empty response. 967 1071 """ 968 @@ -1427,14 +1508,14 @@ 1072 @@ -1421,20 +1502,20 @@ 1073 </iq> 1074 """ 1075 1076 - def unsubscribe(requestor, service, nodeIdentifier, subscriber): 1077 + def unsubscribe(request): 1078 return defer.succeed(None) 1079 969 1080 def cb(element): 970 1081 self.assertIdentical(None, element) … … 1019 1130 1020 1131 - 1021 - def subscriptions(request ):1132 - def subscriptions(requestor, service): 1022 1133 - subscription = pubsub.Subscription('test', JID('user@example.org'), 1023 1134 - 'subscribed') … … 1054 1165 1055 1166 - 1056 - def affiliations(request ):1167 - def affiliations(requestor, service): 1057 1168 - affiliation = ('test', 'owner') 1058 1169 - return defer.succeed([affiliation]) … … 1072 1183 Replies to create node requests don't return the created node. 1073 1184 """ 1074 @@ -1593,14 +1672,14 @@ 1185 @@ -1587,20 +1666,20 @@ 1186 </iq> 1187 """ 1188 1189 - def create(requestor, service, nodeIdentifier): 1190 - return defer.succeed(nodeIdentifier) 1191 + def create(request): 1192 + return defer.succeed(request.nodeIdentifier) 1193 1075 1194 def cb(element): 1076 1195 self.assertIdentical(None, element) … … 1090 1209 Replies to create node requests return the created node if changed. 1091 1210 """ 1211 @@ -1614,7 +1693,7 @@ 1212 </iq> 1213 """ 1214 1215 - def create(requestor, service, nodeIdentifier): 1216 + def create(request): 1217 return defer.succeed(u'myrenamednode') 1218 1219 def cb(element): 1092 1220 @@ -1624,14 +1703,14 @@ 1093 1221 self.assertEqual(u'myrenamednode', … … 1108 1236 Replies to create instant node requests return the created node. 1109 1237 """ 1238 @@ -1645,7 +1724,7 @@ 1239 </iq> 1240 """ 1241 1242 - def create(requestor, service, nodeIdentifier): 1243 + def create(request): 1244 return defer.succeed(u'random') 1245 1246 def cb(element): 1110 1247 @@ -1654,14 +1733,14 @@ 1111 1248 self.assertEqual(NS_PUBSUB, element.create.uri) … … 1130 1267 } 1131 1268 1132 - def getDefaultConfiguration(request ):1269 - def getDefaultConfiguration(requestor, service, nodeType): 1133 1270 + def default(request): 1134 1271 return defer.succeed({}) … … 1159 1296 } 1160 1297 1161 - def getDefaultConfiguration(request ):1298 - def getDefaultConfiguration(requestor, service, nodeType): 1162 1299 + def default(request): 1163 1300 return defer.succeed({}) … … 1185 1322 """ 1186 1323 1187 - def getDefaultConfiguration(request ):1324 - def getDefaultConfiguration(requestor, service, nodeType): 1188 1325 + def default(request): 1189 1326 self.fail("Unexpected call to getConfiguration") … … 1217 1354 } 1218 1355 1219 - def getConfiguration(request ):1356 - def getConfiguration(requestor, service, nodeIdentifier): 1220 1357 + def configureGet(request): 1221 1358 return defer.succeed({'pubsub#deliver_payloads': '0', … … 1251 1388 } 1252 1389 1253 - def setConfiguration(request ):1390 - def setConfiguration(requestor, service, nodeIdentifier, options): 1254 1391 + def configureSet(request): 1255 1392 self.assertEqual({'pubsub#deliver_payloads': False, 1256 'pubsub#persist_items': True}, request.options) 1393 - 'pubsub#persist_items': True}, options) 1394 + 'pubsub#persist_items': True}, request.options) 1257 1395 return defer.succeed(None) 1258 1396 … … 1280 1418 """ 1281 1419 1282 - def setConfiguration(request ):1420 - def setConfiguration(requestor, service, nodeIdentifier, options): 1283 1421 + def configureSet(request): 1284 1422 self.fail("Unexpected call to setConfiguration") … … 1296 1434 On a node configuration set request unknown fields should be ignored. 1297 1435 """ 1298 @@ -1959,1 7+2038,17 @@1436 @@ -1959,16 +2038,17 @@ 1299 1437 "label": "Deliver payloads with event notifications"} 1300 1438 } 1301 1439 1302 - def setConfiguration(request): 1440 - def setConfiguration(requestor, service, nodeIdentifier, options): 1441 - self.assertEquals(['pubsub#deliver_payloads'], options.keys()) 1303 1442 + def configureSet(request): 1304 1305 1443 + self.assertEquals(['pubsub#deliver_payloads'], 1444 + request.options.keys()) 1306 1445 1307 1446 - self.service.getConfigurationOptions = getConfigurationOptions … … 1319 1458 On a node configuration set request unknown fields should be ignored. 1320 1459 """ 1321 @@ - 2000,7 +2079,7 @@1460 @@ -1999,7 +2079,7 @@ 1322 1461 return d 1323 1462 … … 1328 1467 On a items request, return all items for the given node. 1329 1468 """ 1469 @@ -2012,8 +2092,7 @@ 1470 </iq> 1471 """ 1472 1473 - def items(requestor, service, nodeIdentifier, maxItems, 1474 - itemIdentifiers): 1475 + def items(request): 1476 return defer.succeed([pubsub.Item('current')]) 1477 1478 def cb(element): 1330 1479 @@ -2026,16 +2105,17 @@ 1331 1480 self.assertEqual(NS_PUBSUB, item.uri) … … 1350 1499 1351 1500 xml = """ 1352 @@ -2053,13 +2133,14 @@ 1353 def retract(request): 1501 @@ -2050,16 +2130,17 @@ 1502 </iq> 1503 """ 1504 1505 - def retract(requestor, service, nodeIdentifier, itemIdentifiers): 1506 + def retract(request): 1354 1507 return defer.succeed(None) 1355 1508 … … 1368 1521 """ 1369 1522 1370 @@ -2075,13 +2156,14 @@ 1371 def purge(request): 1523 @@ -2072,16 +2153,17 @@ 1524 </iq> 1525 """ 1526 1527 - def purge(requestor, service, nodeIdentifier): 1528 + def purge(request): 1372 1529 return defer.succeed(None) 1373 1530 … … 1386 1543 """ 1387 1544 1388 @@ -2097,7 +2179,8 @@ 1389 def delete(request): 1545 @@ -2094,10 +2176,11 @@ 1546 </iq> 1547 """ 1548 1549 - def delete(requestor, service, nodeIdentifier): 1550 + def delete(request): 1390 1551 return defer.succeed(None) 1391 1552 … … 1432 1593 Setting subscription options is not supported. 1433 1594 """ 1434 @@ -2256,18 +2339,38 @@ 1435 return d 1436 1437 1595 @@ -2256,6 +2339,15 @@ 1596 return d 1597 1598 1599 + 1600 +class PubSubServiceWithoutResourceTest(unittest.TestCase, TestableRequestHandlerMixin): 1601 + 1602 + def setUp(self): 1603 + self.stub = XmlStreamStub() 1604 + self.service = pubsub.PubSubService() 1605 + self.service.send = self.stub.xmlstream.send 1606 + 1607 + 1608 def test_publish(self): 1609 """ 1610 Non-overridden L{PubSubService.publish} yields unsupported error. 1611 @@ -2604,3 +2696,257 @@ 1612 self.assertFailure(d, error.StanzaError) 1613 d.addCallback(cb) 1614 return d 1615 + 1616 + 1438 1617 + 1439 1618 +class PubSubResourceTest(unittest.TestCase): … … 1464 1643 + 1465 1644 + 1466 def test_publish(self): 1467 """ 1468 - Non-overridden L{PubSubService.publish} yields unsupported error. 1469 - """ 1470 - 1471 - xml = """ 1472 - <iq type='set' to='pubsub.example.org' 1473 - from='user@example.org'> 1474 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1475 - <publish node='mynode'/> 1476 - </pubsub> 1477 - </iq> 1645 + def test_publish(self): 1646 + """ 1478 1647 + Non-overridden L{PubSubResource.publish} yields unsupported 1479 1648 + error. 1480 1481 1482 1483 @@ -2276,7 +2379,7 @@ 1484 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1485 self.assertEquals('publish', result.appCondition['feature'])1486 1487 - d = self.handleRequest(xml) 1649 + """ 1650 + 1651 + def cb(result): 1652 + self.assertEquals('feature-not-implemented', result.condition) 1653 + self.assertEquals('unsupported', result.appCondition.name) 1654 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1655 + self.assertEquals('publish', result.appCondition['feature']) 1656 + 1488 1657 + d = self.resource.publish(pubsub.PubSubRequest()) 1489 self.assertFailure(d, error.StanzaError) 1490 d.addCallback(cb) 1491 return d 1492 @@ -2284,16 +2387,7 @@ 1493 1494 def test_subscribe(self): 1495 """ 1496 - Non-overridden L{PubSubService.subscribe} yields unsupported error. 1497 - """ 1498 - 1499 - xml = """ 1500 - <iq type='set' to='pubsub.example.org' 1501 - from='user@example.org'> 1502 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1503 - <subscribe node='test' jid='user@example.org/Home'/> 1504 - </pubsub> 1505 - </iq> 1658 + self.assertFailure(d, error.StanzaError) 1659 + d.addCallback(cb) 1660 + return d 1661 + 1662 + 1663 + def test_subscribe(self): 1664 + """ 1506 1665 + Non-overridden subscriptions yields unsupported error. 1507 1508 1509 1510 @@ -2302,7 +2396,7 @@ 1511 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1512 self.assertEquals('subscribe', result.appCondition['feature'])1513 1514 - d = self.handleRequest(xml) 1666 + """ 1667 + 1668 + def cb(result): 1669 + self.assertEquals('feature-not-implemented', result.condition) 1670 + self.assertEquals('unsupported', result.appCondition.name) 1671 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1672 + self.assertEquals('subscribe', result.appCondition['feature']) 1673 + 1515 1674 + d = self.resource.subscribe(pubsub.PubSubRequest()) 1516 self.assertFailure(d, error.StanzaError) 1517 d.addCallback(cb) 1518 return d 1519 @@ -2310,16 +2404,7 @@ 1520 1521 def test_unsubscribe(self): 1522 """ 1523 - Non-overridden L{PubSubService.unsubscribe} yields unsupported error. 1524 - """ 1525 - 1526 - xml = """ 1527 - <iq type='set' to='pubsub.example.org' 1528 - from='user@example.org'> 1529 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1530 - <unsubscribe node='test' jid='user@example.org/Home'/> 1531 - </pubsub> 1532 - </iq> 1675 + self.assertFailure(d, error.StanzaError) 1676 + d.addCallback(cb) 1677 + return d 1678 + 1679 + 1680 + def test_unsubscribe(self): 1681 + """ 1533 1682 + Non-overridden unsubscribe yields unsupported error. 1534 1535 1536 1537 @@ -2328,7 +2413,7 @@ 1538 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1539 self.assertEquals('subscribe', result.appCondition['feature'])1540 1541 - d = self.handleRequest(xml) 1683 + """ 1684 + 1685 + def cb(result): 1686 + self.assertEquals('feature-not-implemented', result.condition) 1687 + self.assertEquals('unsupported', result.appCondition.name) 1688 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1689 + self.assertEquals('subscribe', result.appCondition['feature']) 1690 + 1542 1691 + d = self.resource.unsubscribe(pubsub.PubSubRequest()) 1543 self.assertFailure(d, error.StanzaError) 1544 d.addCallback(cb) 1545 return d 1546 @@ -2336,16 +2421,7 @@ 1547 1548 def test_subscriptions(self): 1549 """ 1550 - Non-overridden L{PubSubService.subscriptions} yields unsupported error. 1551 - """ 1552 - 1553 - xml = """ 1554 - <iq type='get' to='pubsub.example.org' 1555 - from='user@example.org'> 1556 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1557 - <subscriptions/> 1558 - </pubsub> 1559 - </iq> 1692 + self.assertFailure(d, error.StanzaError) 1693 + d.addCallback(cb) 1694 + return d 1695 + 1696 + 1697 + def test_subscriptions(self): 1698 + """ 1560 1699 + Non-overridden subscriptions yields unsupported error. 1561 """ 1562 1563 def cb(result): 1564 @@ -2355,7 +2431,7 @@ 1565 self.assertEquals('retrieve-subscriptions', 1566 result.appCondition['feature']) 1567 1568 - d = self.handleRequest(xml) 1700 + """ 1701 + 1702 + def cb(result): 1703 + self.assertEquals('feature-not-implemented', result.condition) 1704 + self.assertEquals('unsupported', result.appCondition.name) 1705 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1706 + self.assertEquals('retrieve-subscriptions', 1707 + result.appCondition['feature']) 1708 + 1569 1709 + d = self.resource.subscriptions(pubsub.PubSubRequest()) 1570 self.assertFailure(d, error.StanzaError) 1571 d.addCallback(cb) 1572 return d 1573 @@ -2363,16 +2439,7 @@ 1574 1575 def test_affiliations(self): 1576 """ 1577 - Non-overridden L{PubSubService.affiliations} yields unsupported error. 1578 - """ 1579 - 1580 - xml = """ 1581 - <iq type='get' to='pubsub.example.org' 1582 - from='user@example.org'> 1583 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1584 - <affiliations/> 1585 - </pubsub> 1586 - </iq> 1710 + self.assertFailure(d, error.StanzaError) 1711 + d.addCallback(cb) 1712 + return d 1713 + 1714 + 1715 + def test_affiliations(self): 1716 + """ 1587 1717 + Non-overridden affiliations yields unsupported error. 1588 """ 1589 1590 def cb(result): 1591 @@ -2382,7 +2449,7 @@ 1592 self.assertEquals('retrieve-affiliations', 1593 result.appCondition['feature']) 1594 1595 - d = self.handleRequest(xml) 1718 + """ 1719 + 1720 + def cb(result): 1721 + self.assertEquals('feature-not-implemented', result.condition) 1722 + self.assertEquals('unsupported', result.appCondition.name) 1723 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1724 + self.assertEquals('retrieve-affiliations', 1725 + result.appCondition['feature']) 1726 + 1596 1727 + d = self.resource.affiliations(pubsub.PubSubRequest()) 1597 self.assertFailure(d, error.StanzaError) 1598 d.addCallback(cb) 1599 return d 1600 @@ -2390,16 +2457,7 @@ 1601 1602 def test_create(self): 1603 """ 1604 - Non-overridden L{PubSubService.create} yields unsupported error. 1605 - """ 1606 - 1607 - xml = """ 1608 - <iq type='set' to='pubsub.example.org' 1609 - from='user@example.org'> 1610 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1611 - <create node='mynode'/> 1612 - </pubsub> 1613 - </iq> 1728 + self.assertFailure(d, error.StanzaError) 1729 + d.addCallback(cb) 1730 + return d 1731 + 1732 + 1733 + def test_create(self): 1734 + """ 1614 1735 + Non-overridden create yields unsupported error. 1615 1616 1617 1618 @@ -2408,87 +2466,51 @@ 1619 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1620 self.assertEquals('create-nodes', result.appCondition['feature'])1621 1622 - d = self.handleRequest(xml) 1736 + """ 1737 + 1738 + def cb(result): 1739 + self.assertEquals('feature-not-implemented', result.condition) 1740 + self.assertEquals('unsupported', result.appCondition.name) 1741 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1742 + self.assertEquals('create-nodes', result.appCondition['feature']) 1743 + 1623 1744 + d = self.resource.create(pubsub.PubSubRequest()) 1624 self.assertFailure(d, error.StanzaError) 1625 d.addCallback(cb) 1626 return d 1627 1628 1629 - def test_getDefaultConfiguration(self): 1745 + self.assertFailure(d, error.StanzaError) 1746 + d.addCallback(cb) 1747 + return d 1748 + 1749 + 1630 1750 + def test_default(self): 1631 """ 1632 - Non-overridden L{PubSubService.getDefaultConfiguration} yields 1633 - unsupported error. 1634 - """ 1635 - 1636 - xml = """ 1637 - <iq type='get' to='pubsub.example.org' 1638 - from='user@example.org'> 1639 - <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 1640 - <default/> 1641 - </pubsub> 1642 - </iq> 1751 + """ 1643 1752 + Non-overridden default yields unsupported error. 1644 """ 1645 1646 def cb(result): 1647 self.assertEquals('feature-not-implemented', result.condition) 1648 self.assertEquals('unsupported', result.appCondition.name) 1649 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1650 - self.assertEquals('retrieve-default', result.appCondition['feature']) 1753 + """ 1754 + 1755 + def cb(result): 1756 + self.assertEquals('feature-not-implemented', result.condition) 1757 + self.assertEquals('unsupported', result.appCondition.name) 1758 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1651 1759 + self.assertEquals('retrieve-default', 1652 1760 + result.appCondition['feature']) 1653 1654 - d = self.handleRequest(xml) 1761 + 1655 1762 + d = self.resource.default(pubsub.PubSubRequest()) 1656 self.assertFailure(d, error.StanzaError) 1657 d.addCallback(cb) 1658 return d 1659 1660 1661 - def test_getConfiguration(self): 1763 + self.assertFailure(d, error.StanzaError) 1764 + d.addCallback(cb) 1765 + return d 1766 + 1767 + 1662 1768 + def test_configureGet(self): 1663 """ 1664 - Non-overridden L{PubSubService.getConfiguration} yields unsupported 1769 + """ 1665 1770 + Non-overridden configureGet yields unsupported 1666 error. 1667 """ 1668 1669 - xml = """ 1670 - <iq type='get' to='pubsub.example.org' 1671 - from='user@example.org'> 1672 - <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 1673 - <configure/> 1674 - </pubsub> 1675 - </iq> 1676 - """ 1677 - 1678 def cb(result): 1679 self.assertEquals('feature-not-implemented', result.condition) 1680 self.assertEquals('unsupported', result.appCondition.name) 1681 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1682 self.assertEquals('config-node', result.appCondition['feature']) 1683 1684 - d = self.handleRequest(xml) 1771 + error. 1772 + """ 1773 + 1774 + def cb(result): 1775 + self.assertEquals('feature-not-implemented', result.condition) 1776 + self.assertEquals('unsupported', result.appCondition.name) 1777 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1778 + self.assertEquals('config-node', result.appCondition['feature']) 1779 + 1685 1780 + d = self.resource.configureGet(pubsub.PubSubRequest()) 1686 self.assertFailure(d, error.StanzaError) 1687 d.addCallback(cb) 1688 return d 1689 1690 1691 - def test_setConfiguration(self): 1781 + self.assertFailure(d, error.StanzaError) 1782 + d.addCallback(cb) 1783 + return d 1784 + 1785 + 1692 1786 + def test_configureSet(self): 1693 """ 1694 - Non-overridden L{PubSubService.setConfiguration} yields unsupported 1695 - error. 1696 - """ 1697 - 1698 - xml = """ 1699 - <iq type='set' to='pubsub.example.org' 1700 - from='user@example.org'> 1701 - <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 1702 - <configure node='test'> 1703 - <x xmlns='jabber:x:data' type='submit'> 1704 - <field var='FORM_TYPE' type='hidden'> 1705 - <value>http://jabber.org/protocol/pubsub#node_config</value> 1706 - </field> 1707 - <field var='pubsub#deliver_payloads'><value>0</value></field> 1708 - <field var='pubsub#persist_items'><value>1</value></field> 1709 - </x> 1710 - </configure> 1711 - </pubsub> 1712 - </iq> 1787 + """ 1713 1788 + Non-overridden configureSet yields unsupported error. 1714 1715 1716 1717 @@ -2497,7 +2519,7 @@ 1718 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1719 self.assertEquals('config-node', result.appCondition['feature'])1720 1721 - d = self.handleRequest(xml) 1789 + """ 1790 + 1791 + def cb(result): 1792 + self.assertEquals('feature-not-implemented', result.condition) 1793 + self.assertEquals('unsupported', result.appCondition.name) 1794 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1795 + self.assertEquals('config-node', result.appCondition['feature']) 1796 + 1722 1797 + d = self.resource.configureSet(pubsub.PubSubRequest()) 1723 self.assertFailure(d, error.StanzaError) 1724 d.addCallback(cb) 1725 return d 1726 @@ -2505,15 +2527,7 @@ 1727 1728 def test_items(self): 1729 """ 1730 - Non-overridden L{PubSubService.items} yields unsupported error. 1731 - """ 1732 - xml = """ 1733 - <iq type='get' to='pubsub.example.org' 1734 - from='user@example.org'> 1735 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1736 - <items node='test'/> 1737 - </pubsub> 1738 - </iq> 1798 + self.assertFailure(d, error.StanzaError) 1799 + d.addCallback(cb) 1800 + return d 1801 + 1802 + 1803 + def test_items(self): 1804 + """ 1739 1805 + Non-overridden items yields unsupported error. 1740 1741 1742 1743 @@ -2522,7 +2536,7 @@ 1744 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1745 self.assertEquals('retrieve-items', result.appCondition['feature'])1746 1747 - d = self.handleRequest(xml) 1806 + """ 1807 + 1808 + def cb(result): 1809 + self.assertEquals('feature-not-implemented', result.condition) 1810 + self.assertEquals('unsupported', result.appCondition.name) 1811 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1812 + self.assertEquals('retrieve-items', result.appCondition['feature']) 1813 + 1748 1814 + d = self.resource.items(pubsub.PubSubRequest()) 1749 self.assertFailure(d, error.StanzaError) 1750 d.addCallback(cb) 1751 return d 1752 @@ -2530,18 +2544,7 @@ 1753 1754 def test_retract(self): 1755 """ 1756 - Non-overridden L{PubSubService.retract} yields unsupported error. 1757 - """ 1758 - xml = """ 1759 - <iq type='set' to='pubsub.example.org' 1760 - from='user@example.org'> 1761 - <pubsub xmlns='http://jabber.org/protocol/pubsub'> 1762 - <retract node='test'> 1763 - <item id='item1'/> 1764 - <item id='item2'/> 1765 - </retract> 1766 - </pubsub> 1767 - </iq> 1815 + self.assertFailure(d, error.StanzaError) 1816 + d.addCallback(cb) 1817 + return d 1818 + 1819 + 1820 + def test_retract(self): 1821 + """ 1768 1822 + Non-overridden retract yields unsupported error. 1769 1770 1771 1772 @@ -2550,7 +2553,7 @@ 1773 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1774 self.assertEquals('retract-items', result.appCondition['feature'])1775 1776 - d = self.handleRequest(xml) 1823 + """ 1824 + 1825 + def cb(result): 1826 + self.assertEquals('feature-not-implemented', result.condition) 1827 + self.assertEquals('unsupported', result.appCondition.name) 1828 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1829 + self.assertEquals('retract-items', result.appCondition['feature']) 1830 + 1777 1831 + d = self.resource.retract(pubsub.PubSubRequest()) 1778 self.assertFailure(d, error.StanzaError) 1779 d.addCallback(cb) 1780 return d 1781 @@ -2558,15 +2561,7 @@ 1782 1783 def test_purge(self): 1784 """ 1785 - Non-overridden L{PubSubService.purge} yields unsupported error. 1786 - """ 1787 - xml = """ 1788 - <iq type='set' to='pubsub.example.org' 1789 - from='user@example.org'> 1790 - <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 1791 - <purge node='test'/> 1792 - </pubsub> 1793 - </iq> 1832 + self.assertFailure(d, error.StanzaError) 1833 + d.addCallback(cb) 1834 + return d 1835 + 1836 + 1837 + def test_purge(self): 1838 + """ 1794 1839 + Non-overridden purge yields unsupported error. 1795 1796 1797 1798 @@ -2575,7 +2570,7 @@ 1799 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1800 self.assertEquals('purge-nodes', result.appCondition['feature'])1801 1802 - d = self.handleRequest(xml) 1840 + """ 1841 + 1842 + def cb(result): 1843 + self.assertEquals('feature-not-implemented', result.condition) 1844 + self.assertEquals('unsupported', result.appCondition.name) 1845 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1846 + self.assertEquals('purge-nodes', result.appCondition['feature']) 1847 + 1803 1848 + d = self.resource.purge(pubsub.PubSubRequest()) 1804 self.assertFailure(d, error.StanzaError) 1805 d.addCallback(cb) 1806 return d 1807 @@ -2583,15 +2578,7 @@ 1808 1809 def test_delete(self): 1810 """ 1811 - Non-overridden L{PubSubService.delete} yields unsupported error. 1812 - """ 1813 - xml = """ 1814 - <iq type='set' to='pubsub.example.org' 1815 - from='user@example.org'> 1816 - <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 1817 - <delete node='test'/> 1818 - </pubsub> 1819 - </iq> 1849 + self.assertFailure(d, error.StanzaError) 1850 + d.addCallback(cb) 1851 + return d 1852 + 1853 + 1854 + def test_delete(self): 1855 + """ 1820 1856 + Non-overridden delete yields unsupported error. 1821 1822 1823 1824 @@ -2600,7 +2587,7 @@ 1825 self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri)1826 self.assertEquals('delete-nodes', result.appCondition['feature'])1827 1828 - d = self.handleRequest(xml) 1857 + """ 1858 + 1859 + def cb(result): 1860 + self.assertEquals('feature-not-implemented', result.condition) 1861 + self.assertEquals('unsupported', result.appCondition.name) 1862 + self.assertEquals(NS_PUBSUB_ERRORS, result.appCondition.uri) 1863 + self.assertEquals('delete-nodes', result.appCondition['feature']) 1864 + 1829 1865 + d = self.resource.delete(pubsub.PubSubRequest()) 1830 1831 1832 1866 + self.assertFailure(d, error.StanzaError) 1867 + d.addCallback(cb) 1868 + return d
Note: See TracChangeset
for help on using the changeset viewer.