source:
ralphm-patches/pubsub_resource.patch
@
4:c8c73d9e5496
Last change on this file since 4:c8c73d9e5496 was 4:c8c73d9e5496, checked in by Ralph Meijer <ralphm@…>, 13 years ago | |
---|---|
File size: 31.7 KB |
-
wokkel/iwokkel.py
diff -r dc8ed1ff55d7 wokkel/iwokkel.py
a b 297 297 """ 298 298 299 299 300 def publish(request): 300 class IPubSubResource(Interface): 301 302 def locateResource(request): 301 303 """ 302 Called when a publish request has been received.304 Locate a resource that will handle the request. 303 305 304 306 @param request: The publish-subscribe request. 305 307 @type request: L{wokkel.pubsub.PubSubRequest} 306 @return: deferred that fires on success.307 @rtype: L{defer.Deferred}308 """309 310 311 def subscribe(request):312 """313 Called when a subscribe request has been received.314 315 @param request: The publish-subscribe request.316 @type request: L{wokkel.pubsub.PubSubRequest}317 @return: A deferred that fires with a318 L{Subscription<wokkel.pubsub.Subscription>}.319 @rtype: L{defer.Deferred}320 """321 322 323 def unsubscribe(request):324 """325 Called when a subscribe request has been received.326 327 @param request: The publish-subscribe request.328 @type request: L{wokkel.pubsub.PubSubRequest}329 @return: A deferred that fires with C{None} when unsubscription has330 succeeded.331 @rtype: L{defer.Deferred}332 """333 334 335 def subscriptions(request):336 """337 Called when a subscriptions retrieval request has been received.338 339 @param request: The publish-subscribe request.340 @type request: L{wokkel.pubsub.PubSubRequest}341 @return: A deferred that fires with a C{list} of subscriptions as342 L{Subscription<wokkel.pubsub.Subscription>}.343 @rtype: L{defer.Deferred}344 """345 346 347 def affiliations(request):348 """349 Called when a affiliations retrieval request has been received.350 351 @param request: The publish-subscribe request.352 @type request: L{wokkel.pubsub.PubSubRequest}353 @return: A deferred that fires with a C{list} of affiliations as354 C{tuple}s of (node identifier as C{unicode}, affiliation state355 as C{str}). The affiliation can be C{'owner'}, C{'publisher'},356 or C{'outcast'}.357 @rtype: L{defer.Deferred}358 """359 360 361 def create(request):362 """363 Called when a node creation request has been received.364 365 @param request: The publish-subscribe request.366 @type request: L{wokkel.pubsub.PubSubRequest}367 @return: A deferred that fires with a C{unicode} that represents368 the identifier of the new node.369 @rtype: L{defer.Deferred}370 308 """ 371 309 372 310 … … 406 344 """ 407 345 408 346 409 def getDefaultConfiguration(request): 347 def pubsub_publish(request): 348 """ 349 Called when a publish request has been received. 350 351 @param request: The publish-subscribe request. 352 @type request: L{wokkel.pubsub.PubSubRequest} 353 @return: deferred that fires on success. 354 @rtype: L{defer.Deferred} 355 """ 356 357 358 def pubsub_subscribe(request): 359 """ 360 Called when a subscribe request has been received. 361 362 @param request: The publish-subscribe request. 363 @type request: L{wokkel.pubsub.PubSubRequest} 364 @return: A deferred that fires with a 365 L{Subscription<wokkel.pubsub.Subscription>}. 366 @rtype: L{defer.Deferred} 367 """ 368 369 370 def pubsub_unsubscribe(request): 371 """ 372 Called when a subscribe request has been received. 373 374 @param request: The publish-subscribe request. 375 @type request: L{wokkel.pubsub.PubSubRequest} 376 @return: A deferred that fires with C{None} when unsubscription has 377 succeeded. 378 @rtype: L{defer.Deferred} 379 """ 380 381 382 def pubsub_subscriptions(request): 383 """ 384 Called when a subscriptions retrieval request has been received. 385 386 @param request: The publish-subscribe request. 387 @type request: L{wokkel.pubsub.PubSubRequest} 388 @return: A deferred that fires with a C{list} of subscriptions as 389 L{Subscription<wokkel.pubsub.Subscription>}. 390 @rtype: L{defer.Deferred} 391 """ 392 393 394 def pubsub_affiliations(request): 395 """ 396 Called when a affiliations retrieval request has been received. 397 398 @param request: The publish-subscribe request. 399 @type request: L{wokkel.pubsub.PubSubRequest} 400 @return: A deferred that fires with a C{list} of affiliations as 401 C{tuple}s of (node identifier as C{unicode}, affiliation state 402 as C{str}). The affiliation can be C{'owner'}, C{'publisher'}, 403 or C{'outcast'}. 404 @rtype: L{defer.Deferred} 405 """ 406 407 408 def pubsub_create(request): 409 """ 410 Called when a node creation request has been received. 411 412 @param request: The publish-subscribe request. 413 @type request: L{wokkel.pubsub.PubSubRequest} 414 @return: A deferred that fires with a C{unicode} that represents 415 the identifier of the new node. 416 @rtype: L{defer.Deferred} 417 """ 418 419 420 def pubsub_default(request): 410 421 """ 411 422 Called when a default node configuration request has been received. 412 423 … … 420 431 """ 421 432 422 433 423 def getConfiguration(request):434 def pubsub_configureGet(request): 424 435 """ 425 436 Called when a node configuration retrieval request has been received. 426 437 … … 433 444 """ 434 445 435 446 436 def setConfiguration(request):447 def pubsub_configureSet(request): 437 448 """ 438 449 Called when a node configuration change request has been received. 439 450 … … 445 456 """ 446 457 447 458 448 def items(request):459 def pubsub_items(request): 449 460 """ 450 461 Called when a items retrieval request has been received. 451 462 … … 456 467 """ 457 468 458 469 459 def retract(request):470 def pubsub_retract(request): 460 471 """ 461 472 Called when a item retraction request has been received. 462 473 … … 468 479 """ 469 480 470 481 471 def pu rge(request):482 def pubsub_purge(request): 472 483 """ 473 484 Called when a node purge request has been received. 474 485 … … 480 491 """ 481 492 482 493 483 def delete(request):494 def pubsub_delete(request): 484 495 """ 485 496 Called when a node deletion request has been received. 486 497 -
wokkel/pubsub.py
diff -r dc8ed1ff55d7 wokkel/pubsub.py
a b 18 18 19 19 from wokkel import disco, data_form, generic, shim 20 20 from wokkel.subprotocols import IQHandlerMixin, XMPPHandler 21 from wokkel.iwokkel import IPubSubClient, IPubSubService 21 from wokkel.iwokkel import IPubSubClient, IPubSubService, IPubSubResource 22 22 23 23 # Iq get and set XPath queries 24 24 IQ_GET = '/iq[@type="get"]' … … 77 77 78 78 class Unsupported(PubSubError): 79 79 def __init__(self, feature, text=None): 80 self.feature = feature 80 81 PubSubError.__init__(self, 'feature-not-implemented', 81 82 'unsupported', 82 83 feature, 83 84 text) 84 85 86 def __str__(self): 87 message = PubSubError.__str__(self) 88 message += ', feature %r' % self.feature 89 return message 85 90 86 91 87 92 class Subscription(object): … … 228 233 'retract': ['node', 'itemIdentifiers'], 229 234 'purge': ['node'], 230 235 'delete': ['node'], 231 'affiliationsGet': [ ],236 'affiliationsGet': ['nodeOrEmpty'], 232 237 'affiliationsSet': [], 233 'subscriptionsGet': [ ],238 'subscriptionsGet': ['nodeOrEmpty'], 234 239 'subscriptionsSet': [], 235 240 } 236 241 … … 359 364 else: 360 365 self.nodeType = 'leaf' 361 366 367 if self.nodeType not in ('leaf', 'collection'): 368 raise error.StanzaError('not-acceptable') 369 362 370 363 371 def _parse_configure(self, verbElement): 364 372 """ … … 787 795 '/*': '_onPubSubRequest', 788 796 } 789 797 790 791 def __init__(self):798 def __init__(self, resource): 799 self.resource = resource 792 800 self.discoIdentity = {'category': 'pubsub', 793 801 'type': 'generic', 794 802 'name': 'Generic Publish-Subscribe Service'} … … 851 859 852 860 def _onPubSubRequest(self, iq): 853 861 request = PubSubRequest.fromElement(iq) 854 handler = getattr(self, '_on_%s' % request.verb) 855 return handler(request) 862 resource = self.resource.locateResource(request) 856 863 864 # Preprocess the request, knowing the handling resource 865 try: 866 preProcessor = getattr(self, '_preProcess_%s' % request.verb) 867 except AttributeError: 868 pass 869 else: 870 request = preProcessor(resource, request) 871 if request is None: 872 return defer.succeed(None) 857 873 858 def _on_publish(self, request): 859 return self.publish(request) 874 # Process the request itself, 875 try: 876 handler = getattr(resource, 'pubsub_%s' % request.verb) 877 except AttributeError: 878 # fix lookup feature 879 text = "Request verb: %s" % request.verb 880 return defer.fail(Unsupported('', text)) 860 881 882 d = handler(request) 861 883 862 def _on_subscribe(self, request): 884 # If needed, translate the result into a response 885 try: 886 cb = getattr(self, '_toResponse_%s' % request.verb) 887 except AttributeError: 888 pass 889 else: 890 d.addCallback(cb, resource, request) 863 891 864 def toResponse(result):865 response = domish.Element((NS_PUBSUB, "pubsub"))866 subscription = response.addElement("subscription")867 if result.nodeIdentifier:868 subscription["node"] = result.nodeIdentifier869 subscription["jid"] = result.subscriber.full()870 subscription["subscription"] = result.state871 return response872 873 d = self.subscribe(request)874 d.addCallback(toResponse)875 892 return d 876 893 877 894 878 def _on_unsubscribe(self, request): 879 return self.unsubscribe(request) 895 def _toResponse_subscribe(self, result, resource, request): 896 response = domish.Element((NS_PUBSUB, "pubsub")) 897 subscription = response.addElement("subscription") 898 if result.nodeIdentifier: 899 subscription["node"] = result.nodeIdentifier 900 subscription["jid"] = result.subscriber.full() 901 subscription["subscription"] = result.state 902 return response 880 903 881 904 882 def _on_optionsGet(self, request): 883 raise Unsupported('subscription-options') 905 def _toResponse_subscriptions(self, result, resource, request): 906 response = domish.Element((NS_PUBSUB, 'pubsub')) 907 subscriptions = response.addElement('subscriptions') 908 for subscription in result: 909 item = subscriptions.addElement('subscription') 910 item['node'] = subscription.nodeIdentifier 911 item['jid'] = subscription.subscriber.full() 912 item['subscription'] = subscription.state 913 return response 884 914 885 915 886 def _on_optionsSet(self, request): 887 raise Unsupported('subscription-options') 916 def _toResponse_affiliations(self, result, resource, request): 917 response = domish.Element((NS_PUBSUB, 'pubsub')) 918 affiliations = response.addElement('affiliations') 888 919 920 for nodeIdentifier, affiliation in result: 921 item = affiliations.addElement('affiliation') 922 item['node'] = nodeIdentifier 923 item['affiliation'] = affiliation 889 924 890 def _on_subscriptions(self, request):925 return response 891 926 892 def toResponse(result): 927 928 def _toResponse_create(self, result, resource, request): 929 if not request.nodeIdentifier or request.nodeIdentifier != result: 893 930 response = domish.Element((NS_PUBSUB, 'pubsub')) 894 subscriptions = response.addElement('subscriptions') 895 for subscription in result: 896 item = subscriptions.addElement('subscription') 897 item['node'] = subscription.nodeIdentifier 898 item['jid'] = subscription.subscriber.full() 899 item['subscription'] = subscription.state 931 create = response.addElement('create') 932 create['node'] = result 900 933 return response 901 902 d = self.subscriptions(request) 903 d.addCallback(toResponse) 904 return d 905 906 907 def _on_affiliations(self, request): 908 909 def toResponse(result): 910 response = domish.Element((NS_PUBSUB, 'pubsub')) 911 affiliations = response.addElement('affiliations') 912 913 for nodeIdentifier, affiliation in result: 914 item = affiliations.addElement('affiliation') 915 item['node'] = nodeIdentifier 916 item['affiliation'] = affiliation 917 918 return response 919 920 d = self.affiliations(request) 921 d.addCallback(toResponse) 922 return d 923 924 925 def _on_create(self, request): 926 927 def toResponse(result): 928 if not request.nodeIdentifier or request.nodeIdentifier != result: 929 response = domish.Element((NS_PUBSUB, 'pubsub')) 930 create = response.addElement('create') 931 create['node'] = result 932 return response 933 else: 934 return None 935 936 d = self.create(request) 937 d.addCallback(toResponse) 938 return d 934 else: 935 return None 939 936 940 937 941 938 def _makeFields(self, options, values): … … 954 951 return fields 955 952 956 953 957 def _formFromConfiguration(self, values):958 options = self.getConfigurationOptions()954 def _formFromConfiguration(self, resource, values): 955 options = resource.getConfigurationOptions() 959 956 fields = self._makeFields(options, values) 960 957 form = data_form.Form(formType="form", 961 958 formNamespace=NS_PUBSUB_NODE_CONFIG, … … 964 961 return form 965 962 966 963 967 def _checkConfiguration(self, values):968 options = self.getConfigurationOptions()964 def _checkConfiguration(self, resource, values): 965 options = resource.getConfigurationOptions() 969 966 processedValues = {} 970 967 971 968 for key, value in values.iteritems(): … … 989 986 return processedValues 990 987 991 988 992 def _on_default(self, request): 989 def _toResponse_default(self, options, resource, request): 990 response = domish.Element((NS_PUBSUB_OWNER, "pubsub")) 991 default = response.addElement("default") 992 form = self._formFromConfiguration(resource, options) 993 default.addChild(form.toElement()) 994 return response 993 995 994 def toResponse(options):995 response = domish.Element((NS_PUBSUB_OWNER, "pubsub"))996 default = response.addElement("default")997 default.addChild(self._formFromConfiguration(options).toElement())998 return response999 996 1000 if request.nodeType not in ('leaf', 'collection'): 1001 return defer.fail(error.StanzaError('not-acceptable')) 997 def _toResponse_configureGet(self, options, resource, request): 998 response = domish.Element((NS_PUBSUB_OWNER, "pubsub")) 999 configure = response.addElement("configure") 1000 form = self._formFromConfiguration(resource, options) 1001 configure.addChild(form.toElement()) 1002 1002 1003 d = self.getDefaultConfiguration(request) 1004 d.addCallback(toResponse) 1005 return d 1003 if request.nodeIdentifier: 1004 configure["node"] = request.nodeIdentifier 1006 1005 1006 return response 1007 1007 1008 def _on_configureGet(self, request):1009 def toResponse(options):1010 response = domish.Element((NS_PUBSUB_OWNER, "pubsub"))1011 configure = response.addElement("configure")1012 form = self._formFromConfiguration(options)1013 configure.addChild(form.toElement())1014 1008 1015 if request.nodeIdentifier: 1016 configure["node"] = request.nodeIdentifier 1017 1018 return response 1019 1020 d = self.getConfiguration(request) 1021 d.addCallback(toResponse) 1022 return d 1023 1024 1025 def _on_configureSet(self, request): 1009 def _preProcess_configureSet(self, resource, request): 1026 1010 if request.options: 1027 request.options = self._checkConfiguration(request.options) 1028 return self.setConfiguration(request) 1011 request.options = self._checkConfiguration(resource, 1012 request.options) 1013 return request 1029 1014 else: 1030 1015 return None 1031 1016 1032 1017 1018 def _toResponse_items(self, result, resource, request): 1019 response = domish.Element((NS_PUBSUB, 'pubsub')) 1020 items = response.addElement('items') 1021 items["node"] = request.nodeIdentifier 1033 1022 1034 def _on_items(self, request): 1023 for item in result: 1024 items.addChild(item) 1035 1025 1036 def toResponse(result): 1037 response = domish.Element((NS_PUBSUB, 'pubsub')) 1038 items = response.addElement('items') 1039 items["node"] = request.nodeIdentifier 1026 return response 1040 1027 1041 for item in result:1042 items.addChild(item)1043 1044 return response1045 1046 d = self.items(request)1047 d.addCallback(toResponse)1048 return d1049 1050 1051 def _on_retract(self, request):1052 return self.retract(request)1053 1054 1055 def _on_purge(self, request):1056 return self.purge(request)1057 1058 1059 def _on_delete(self, request):1060 return self.delete(request)1061 1062 1063 def _on_affiliationsGet(self, iq):1064 raise Unsupported('modify-affiliations')1065 1066 1067 def _on_affiliationsSet(self, iq):1068 raise Unsupported('modify-affiliations')1069 1070 1071 def _on_subscriptionsGet(self, iq):1072 raise Unsupported('manage-subscriptions')1073 1074 1075 def _on_subscriptionsSet(self, iq):1076 raise Unsupported('manage-subscriptions')1077 1078 # public methods1079 1028 1080 1029 def _createNotification(self, eventType, service, nodeIdentifier, 1081 1030 subscriber, subscriptions=None): … … 1099 1048 1100 1049 return message 1101 1050 1051 # public methods 1052 1102 1053 def notifyPublish(self, service, nodeIdentifier, notifications): 1103 1054 for subscriber, subscriptions, items in notifications: 1104 1055 message = self._createNotification('items', service, … … 1120 1071 self.send(message) 1121 1072 1122 1073 1123 def getNodeInfo(self, requestor, service, nodeIdentifier): 1124 return None 1074 1075 class PubSubResource(object): 1076 1077 implements(IPubSubResource) 1078 1079 def locateResource(self, request): 1080 return self 1081 1082 1083 def getInfo(self, requestor, service, nodeIdentifier): 1084 return defer.succeed(None) 1125 1085 1126 1086 1127 1087 def getNodes(self, requestor, service): 1128 1088 return [] 1129 1089 1130 1090 1131 def publish(self, request):1132 raise Unsupported('publish')1133 1134 1135 def subscribe(self, request):1136 raise Unsupported('subscribe')1137 1138 1139 def unsubscribe(self, request):1140 raise Unsupported('subscribe')1141 1142 1143 def subscriptions(self, request):1144 raise Unsupported('retrieve-subscriptions')1145 1146 1147 def affiliations(self, request):1148 raise Unsupported('retrieve-affiliations')1149 1150 1151 def create(self, request):1152 raise Unsupported('create-nodes')1153 1154 1155 1091 def getConfigurationOptions(self): 1156 1092 return {} 1157 1093 1158 1094 1159 def getDefaultConfiguration(self, request):1160 r aise Unsupported('retrieve-default')1095 def pubsub_publish(self, request): 1096 return defer.fail(Unsupported('publish')) 1161 1097 1162 1098 1163 def getConfiguration(self, request):1164 r aise Unsupported('config-node')1099 def pubsub_subscribe(self, request): 1100 return defer.fail(Unsupported('subscribe')) 1165 1101 1166 1102 1167 def setConfiguration(self, request):1168 r aise Unsupported('config-node')1103 def pubsub_unsubscribe(self, request): 1104 return defer.fail(Unsupported('subscribe')) 1169 1105 1170 1106 1171 def items(self, request):1172 r aise Unsupported('retrieve-items')1107 def pubsub_subscriptions(self, request): 1108 return defer.fail(Unsupported('retrieve-subscriptions')) 1173 1109 1174 1110 1175 def retract(self, request):1176 r aise Unsupported('retract-items')1111 def pubsub_affiliations(self, request): 1112 return defer.fail(Unsupported('retrieve-affiliations')) 1177 1113 1178 1114 1179 def pu rge(self, request):1180 r aise Unsupported('purge-nodes')1115 def pubsub_create(self, request): 1116 return defer.fail(Unsupported('create-nodes')) 1181 1117 1182 1118 1183 def delete(self, request): 1184 raise Unsupported('delete-nodes') 1119 def pubsub_default(self, request): 1120 return defer.fail(Unsupported('retrieve-default')) 1121 1122 1123 def pubsub_configureGet(self, request): 1124 return defer.fail(Unsupported('config-node')) 1125 1126 1127 def pubsub_configureSet(self, request): 1128 return defer.fail(Unsupported('config-node')) 1129 1130 1131 def pubsub_items(self, request): 1132 return defer.fail(Unsupported('retrieve-items')) 1133 1134 1135 def pubsub_retract(self, request): 1136 return defer.fail(Unsupported('retract-items')) 1137 1138 1139 def pubsub_purge(self, request): 1140 return defer.fail(Unsupported('purge-nodes')) 1141 1142 1143 def pubsub_delete(self, request): 1144 return defer.fail(Unsupported('delete-nodes')) 1145 1146 1147 def pubsub_affiliationsGet(self, request): 1148 return defer.fail(Unsupported('modify-affiliations')) 1149 1150 1151 def pubsub_affiliationsSet(self, request): 1152 return defer.fail(Unsupported('modify-affiliations')) 1153 1154 1155 def pubsub_subscriptionsGet(self, request): 1156 return defer.fail(Unsupported('manage-subscriptions')) 1157 1158 1159 def pubsub_subscriptionsSet(self, request): 1160 return defer.fail(Unsupported('manage-subscriptions')) -
wokkel/test/test_pubsub.py
diff -r dc8ed1ff55d7 wokkel/test/test_pubsub.py
a b 600 600 601 601 def setUp(self): 602 602 self.stub = XmlStreamStub() 603 self.service = pubsub.PubSubService() 603 self.resource = pubsub.PubSubResource() 604 self.service = pubsub.PubSubService(self.resource) 604 605 self.service.send = self.stub.xmlstream.send 605 606 606 607 def test_interface(self): … … 694 695 self.assertEqual([], request.items) 695 696 return defer.succeed(None) 696 697 697 self. service.publish = publish698 verify.verifyObject(iwokkel.IPubSub Service, self.service)698 self.resource.pubsub_publish = publish 699 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 699 700 return self.handleRequest(xml) 700 701 701 702 … … 722 723 self.assertEqual(u'item2', request.items[1]["id"]) 723 724 return defer.succeed(None) 724 725 725 self. service.publish = publish726 verify.verifyObject(iwokkel.IPubSub Service, self.service)726 self.resource.pubsub_publish = publish 727 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 727 728 return self.handleRequest(xml) 728 729 729 730 … … 759 760 self.assertEqual('user@example.org/Home', subscription['jid']) 760 761 self.assertEqual('subscribed', subscription['subscription']) 761 762 762 self. service.subscribe = subscribe763 verify.verifyObject(iwokkel.IPubSub Service, self.service)763 self.resource.pubsub_subscribe = subscribe 764 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 764 765 d = self.handleRequest(xml) 765 766 d.addCallback(cb) 766 767 return d … … 789 790 def cb(element): 790 791 self.assertFalse(element.subscription.hasAttribute('node')) 791 792 792 self. service.subscribe = subscribe793 verify.verifyObject(iwokkel.IPubSub Service, self.service)793 self.resource.pubsub_subscribe = subscribe 794 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 794 795 d = self.handleRequest(xml) 795 796 d.addCallback(cb) 796 797 return d … … 820 821 def cb(element): 821 822 self.assertIdentical(None, element) 822 823 823 self. service.unsubscribe = unsubscribe824 verify.verifyObject(iwokkel.IPubSub Service, self.service)824 self.resource.pubsub_unsubscribe = unsubscribe 825 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 825 826 d = self.handleRequest(xml) 826 827 d.addCallback(cb) 827 828 return d … … 914 915 'subscribed') 915 916 return defer.succeed([subscription]) 916 917 917 self. service.subscriptions = subscriptions918 verify.verifyObject(iwokkel.IPubSub Service, self.service)918 self.resource.pubsub_subscriptions = subscriptions 919 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 919 920 d = self.handleRequest(xml) 920 921 d.addCallback(cb) 921 922 return d … … 956 957 affiliation = ('test', 'owner') 957 958 return defer.succeed([affiliation]) 958 959 959 self. service.affiliations = affiliations960 verify.verifyObject(iwokkel.IPubSub Service, self.service)960 self.resource.pubsub_affiliations = affiliations 961 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 961 962 d = self.handleRequest(xml) 962 963 d.addCallback(cb) 963 964 return d … … 986 987 def cb(element): 987 988 self.assertIdentical(None, element) 988 989 989 self. service.create = create990 verify.verifyObject(iwokkel.IPubSub Service, self.service)990 self.resource.pubsub_create = create 991 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 991 992 d = self.handleRequest(xml) 992 993 d.addCallback(cb) 993 994 return d … … 1017 1018 self.assertEqual(u'myrenamednode', 1018 1019 element.create.getAttribute('node')) 1019 1020 1020 self. service.create = create1021 verify.verifyObject(iwokkel.IPubSub Service, self.service)1021 self.resource.pubsub_create = create 1022 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1022 1023 d = self.handleRequest(xml) 1023 1024 d.addCallback(cb) 1024 1025 return d … … 1048 1049 self.assertEqual(NS_PUBSUB, element.create.uri) 1049 1050 self.assertEqual(u'random', element.create.getAttribute('node')) 1050 1051 1051 self. service.create = create1052 verify.verifyObject(iwokkel.IPubSub Service, self.service)1052 self.resource.pubsub_create = create 1053 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1053 1054 d = self.handleRequest(xml) 1054 1055 d.addCallback(cb) 1055 1056 return d … … 1093 1094 form = data_form.Form.fromElement(element.default.x) 1094 1095 self.assertEqual(NS_PUBSUB_CONFIG, form.formNamespace) 1095 1096 1096 self. service.getConfigurationOptions = getConfigurationOptions1097 self. service.getDefaultConfiguration= getDefaultConfiguration1098 verify.verifyObject(iwokkel.IPubSub Service, self.service)1097 self.resource.getConfigurationOptions = getConfigurationOptions 1098 self.resource.pubsub_default = getDefaultConfiguration 1099 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1099 1100 d = self.handleRequest(xml) 1100 1101 d.addCallback(cb) 1101 1102 return d … … 1143 1144 form = data_form.Form.fromElement(element.default.x) 1144 1145 self.assertEqual(NS_PUBSUB_CONFIG, form.formNamespace) 1145 1146 1146 self. service.getConfigurationOptions = getConfigurationOptions1147 self. service.getDefaultConfiguration= getDefaultConfiguration1148 verify.verifyObject(iwokkel.IPubSub Service, self.service)1147 self.resource.getConfigurationOptions = getConfigurationOptions 1148 self.resource.pubsub_default = getDefaultConfiguration 1149 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1149 1150 d = self.handleRequest(xml) 1150 1151 d.addCallback(cb) 1151 1152 return d … … 1182 1183 def cb(result): 1183 1184 self.assertEquals('not-acceptable', result.condition) 1184 1185 1185 self. service.getDefaultConfiguration= getDefaultConfiguration1186 verify.verifyObject(iwokkel.IPubSub Service, self.service)1186 self.resource.pubsub_default = getDefaultConfiguration 1187 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1187 1188 d = self.handleRequest(xml) 1188 1189 self.assertFailure(d, error.StanzaError) 1189 1190 d.addCallback(cb) … … 1257 1258 self.assertNotIn('x-myfield', fields) 1258 1259 1259 1260 1260 self. service.getConfigurationOptions = getConfigurationOptions1261 self. service.getConfiguration= getConfiguration1262 verify.verifyObject(iwokkel.IPubSub Service, self.service)1261 self.resource.getConfigurationOptions = getConfigurationOptions 1262 self.resource.pubsub_configureGet = getConfiguration 1263 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1263 1264 d = self.handleRequest(xml) 1264 1265 d.addCallback(cb) 1265 1266 return d … … 1306 1307 'pubsub#persist_items': True}, request.options) 1307 1308 return defer.succeed(None) 1308 1309 1309 self. service.getConfigurationOptions = getConfigurationOptions1310 self. service.setConfiguration= setConfiguration1311 verify.verifyObject(iwokkel.IPubSub Service, self.service)1310 self.resource.getConfigurationOptions = getConfigurationOptions 1311 self.resource.pubsub_configureSet = setConfiguration 1312 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1312 1313 return self.handleRequest(xml) 1313 1314 1314 1315 … … 1336 1337 def setConfiguration(request): 1337 1338 self.fail("Unexpected call to setConfiguration") 1338 1339 1339 self. service.setConfiguration= setConfiguration1340 verify.verifyObject(iwokkel.IPubSub Service, self.service)1340 self.resource.pubsub_configureSet = setConfiguration 1341 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1341 1342 return self.handleRequest(xml) 1342 1343 1343 1344 … … 1377 1378 self.assertEquals(['pubsub#deliver_payloads'], 1378 1379 request.options.keys()) 1379 1380 1380 self. service.getConfigurationOptions = getConfigurationOptions1381 self. service.setConfiguration= setConfiguration1382 verify.verifyObject(iwokkel.IPubSub Service, self.service)1381 self.resource.getConfigurationOptions = getConfigurationOptions 1382 self.resource.pubsub_configureSet = setConfiguration 1383 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1383 1384 return self.handleRequest(xml) 1384 1385 1385 1386 … … 1445 1446 self.assertEqual(NS_PUBSUB, item.uri) 1446 1447 self.assertEqual('current', item['id']) 1447 1448 1448 self.service.items = items 1449 self.resource.pubsub_items = items 1450 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1449 1451 d = self.handleRequest(xml) 1450 1452 d.addCallback(cb) 1451 1453 return d … … 1476 1478 self.assertEqual(['item1', 'item2'], request.itemIdentifiers) 1477 1479 return defer.succeed(None) 1478 1480 1479 self.service.retract = retract 1481 self.resource.pubsub_retract = retract 1482 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1480 1483 return self.handleRequest(xml) 1481 1484 1482 1485 … … 1501 1504 self.assertEqual('test', request.nodeIdentifier) 1502 1505 return defer.succeed(None) 1503 1506 1504 self.service.purge = purge 1507 self.resource.pubsub_purge = purge 1508 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1505 1509 return self.handleRequest(xml) 1506 1510 1507 1511 … … 1526 1530 self.assertEqual('test', request.nodeIdentifier) 1527 1531 return defer.succeed(None) 1528 1532 1529 self.service.delete = delete 1533 self.resource.pubsub_delete = delete 1534 verify.verifyObject(iwokkel.IPubSubResource, self.resource) 1530 1535 return self.handleRequest(xml) 1531 1536 1532 1537 … … 1687 1692 1688 1693 def test_publish(self): 1689 1694 """ 1690 Non-overridden L{PubSub Service.publish} yields unsupported error.1695 Non-overridden L{PubSubResource.publish} yields unsupported error. 1691 1696 """ 1692 1697 1693 1698 xml = """
Note: See TracBrowser
for help on using the repository browser.