Changeset 225:58dd11c3ddd5 for wokkel
- Timestamp:
- Aug 30, 2016, 9:42:32 PM (6 years ago)
- Branch:
- default
- committer:
- souliane <souliane@mailoo.org> 1472587266 -7200
- hg-git-rename-source:
- git
- Location:
- wokkel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/pubsub.py
r166 r225 40 40 'pubsub[@xmlns="' + NS_PUBSUB + '" or ' + \ 41 41 '@xmlns="' + NS_PUBSUB_OWNER + '"]' 42 43 BOOL_TRUE = ('1','true') 44 BOOL_FALSE = ('0','false') 42 45 43 46 class SubscriptionPending(Exception): … … 250 253 subscriptions = None 251 254 affiliations = None 255 notify = None 252 256 253 257 # Map request iq type and subelement name to request verb … … 291 295 'configureSet': ['nodeOrEmpty', 'configure'], 292 296 'items': ['node', 'maxItems', 'itemIdentifiers', 'subidOrNone'], 293 'retract': ['node', ' itemIdentifiers'],297 'retract': ['node', 'notify', 'itemIdentifiers'], 294 298 'purge': ['node'], 295 299 'delete': ['node'], … … 564 568 565 569 570 def _parse_notify(self, verbElement): 571 value = verbElement.getAttribute('notify') 572 573 if value: 574 if value in BOOL_TRUE: 575 self.notify = True 576 elif value in BOOL_FALSE: 577 self.notify = False 578 else: 579 raise BadRequest(text="Field notify must be a boolean value") 580 581 582 def _render_notify(self, verbElement): 583 if self.notify is not None: 584 verbElement['notify'] = "true" if self.notify else "false" 585 586 566 587 def parseElement(self, element): 567 588 """ … … 950 971 return d 951 972 973 def retractItems(self, service, nodeIdentifier, itemIdentifiers, notify=None, sender=None): 974 """ 975 Retract items from a publish subscribe node. 976 977 @param service: The publish subscribe service to delete the node from. 978 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} 979 @param nodeIdentifier: The identifier of the node. 980 @type nodeIdentifier: C{unicode} 981 @param itemIdentifiers: Identifiers of the items to be retracted. 982 @type itemIdentifiers: C{set} 983 @param notify: True if notification is required 984 @type notify: C{unicode} 985 """ 986 request = self._request_class('retract') 987 request.recipient = service 988 request.nodeIdentifier = nodeIdentifier 989 request.itemIdentifiers = itemIdentifiers 990 request.notify = notify 991 request.sender = sender 992 return request.send(self.xmlstream) 952 993 953 994 def getOptions(self, service, nodeIdentifier, subscriber, … … 1373 1414 1374 1415 1416 def notifyRetract(self, service, nodeIdentifier, notifications): 1417 for subscriber, subscriptions, items in notifications: 1418 message = self._createNotification('items', service, 1419 nodeIdentifier, subscriber, 1420 subscriptions) 1421 for item in items: 1422 retract = domish.Element((None, "retract")) 1423 retract['id'] = item['id'] 1424 message.event.items.addChild(retract) 1425 self.send(message) 1426 1427 1375 1428 def notifyDelete(self, service, nodeIdentifier, subscribers, 1376 1429 redirectURI=None): -
wokkel/test/test_pubsub.py
r183 r225 841 841 842 842 843 def test_retractItems(self): 844 """ 845 Test sending items retraction. 846 """ 847 d = self.protocol.retractItems(JID('pubsub.example.org'), 'test', 848 itemIdentifiers=['item1', 'item2']) 849 850 iq = self.stub.output[-1] 851 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) 852 self.assertEquals('set', iq.getAttribute('type')) 853 self.assertEquals('pubsub', iq.pubsub.name) 854 self.assertEquals(NS_PUBSUB, iq.pubsub.uri) 855 children = list(domish.generateElementsQNamed(iq.pubsub.children, 856 'retract', NS_PUBSUB)) 857 self.assertEquals(1, len(children)) 858 child = children[0] 859 self.assertEquals('test', child['node']) 860 itemIdentifiers = [item.getAttribute('id') for item in 861 domish.generateElementsQNamed(child.children, 'item', 862 NS_PUBSUB)] 863 self.assertEquals(['item1', 'item2'], itemIdentifiers) 864 865 self.stub.send(toResponse(iq, 'result')) 866 return d 867 868 869 def test_retractItemsWithSender(self): 870 """ 871 Test retracting items request from a specific JID. 872 """ 873 d = self.protocol.retractItems(JID('pubsub.example.org'), 'test', 874 itemIdentifiers=['item1', 'item2'], 875 sender=JID('user@example.org')) 876 877 iq = self.stub.output[-1] 878 self.assertEquals('user@example.org', iq['from']) 879 880 self.stub.send(toResponse(iq, 'result')) 881 return d 882 883 843 884 def test_getOptions(self): 844 885 def cb(form):
Note: See TracChangeset
for help on using the changeset viewer.