Changeset 83:81daaca3d75f for wokkel/pubsub.py
- Timestamp:
- Jan 5, 2010, 2:55:40 PM (13 years ago)
- Branch:
- default
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/pubsub.py
r82 r83 229 229 _parameters = { 230 230 'publish': ['node', 'items'], 231 'subscribe': ['nodeOrEmpty', 'jid' ],231 'subscribe': ['nodeOrEmpty', 'jid', 'optionsWithSubscribe'], 232 232 'unsubscribe': ['nodeOrEmpty', 'jid'], 233 233 'optionsGet': ['nodeOrEmpty', 'jid'], … … 373 373 form = data_form.findForm(element, NS_PUBSUB_NODE_CONFIG) 374 374 if form: 375 if form.formType == 'submit': 376 self.options = form 377 else: 375 if form.formType != 'submit': 378 376 raise BadRequest(text=u"Unexpected form type '%s'" % 379 377 form.formType) … … 381 379 form = data_form.Form('submit', 382 380 formNamespace=NS_PUBSUB_NODE_CONFIG) 383 381 self.options = form 384 382 385 383 … … 452 450 453 451 452 453 def _render_options(self, verbElement): 454 verbElement.addChild(self.options.toElement()) 455 456 457 def _parse_optionsWithSubscribe(self, verbElement): 458 for element in verbElement.parent.elements(): 459 if element.name == 'options' and element.uri == NS_PUBSUB: 460 form = data_form.findForm(element, 461 NS_PUBSUB_SUBSCRIBE_OPTIONS) 462 if form: 463 if form.formType != 'submit': 464 raise BadRequest(text=u"Unexpected form type '%s'" % 465 form.formType) 466 else: 467 form = data_form.Form('submit', 468 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 469 self.options = form 470 471 472 def _render_optionsWithSubscribe(self, verbElement): 473 if self.options: 474 optionsElement = verbElement.parent.addElement('options') 475 self._render_options(optionsElement) 476 477 454 478 def parseElement(self, element): 455 479 """ … … 458 482 generic.Stanza.parseElement(self, element) 459 483 484 verbs = [] 485 children = [] 460 486 for child in element.pubsub.elements(): 461 487 key = (self.stanzaType, child.uri, child.name) … … 464 490 except KeyError: 465 491 continue 492 493 verbs.append(verb) 494 children.append(child) 495 496 if not verbs: 497 raise NotImplementedError() 498 499 if len(verbs) > 1: 500 if 'optionsSet' in verbs and 'subscribe' in verbs: 501 self.verb = 'subscribe' 502 child = children[verbs.index('subscribe')] 466 503 else: 467 self.verb = verb 468 break 469 470 if not self.verb: 471 raise NotImplementedError() 472 473 for parameter in self._parameters[verb]: 504 raise NotImplementedError() 505 else: 506 self.verb = verbs[0] 507 508 for parameter in self._parameters[self.verb]: 474 509 getattr(self, '_parse_%s' % parameter)(child) 510 475 511 476 512 … … 687 723 688 724 689 def subscribe(self, service, nodeIdentifier, subscriber, sender=None): 725 def subscribe(self, service, nodeIdentifier, subscriber, 726 options=None, sender=None): 690 727 """ 691 728 Subscribe to a publish subscribe node. … … 698 735 will get notifications of new published items. 699 736 @type subscriber: L{JID} 737 @param options: Subscription options. 738 @type options: C{dict}. 700 739 """ 701 740 request = PubSubRequest('subscribe') … … 704 743 request.subscriber = subscriber 705 744 request.sender = sender 745 746 if options: 747 form = data_form.Form(formType='submit', 748 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 749 form.makeFields(options) 750 request.options = form 706 751 707 752 def cb(iq): … … 788 833 d = request.send(self.xmlstream) 789 834 d.addCallback(cb) 835 return d 836 837 838 def getOptions(self, service, nodeIdentifier, subscriber, sender=None): 839 """ 840 Get subscription options. 841 842 @param service: The publish subscribe service that keeps the node. 843 @type service: L{JID} 844 845 @param nodeIdentifier: The identifier of the node. 846 @type nodeIdentifier: C{unicode} 847 848 @param subscriber: The entity subscribed to the node. 849 @type subscriber: L{JID} 850 851 @rtype: L{data_form.Form} 852 """ 853 request = PubSubRequest('optionsGet') 854 request.recipient = service 855 request.nodeIdentifier = nodeIdentifier 856 request.subscriber = subscriber 857 request.sender = sender 858 859 def cb(iq): 860 form = data_form.findForm(iq.pubsub.options, 861 NS_PUBSUB_SUBSCRIBE_OPTIONS) 862 form.typeCheck() 863 return form 864 865 d = request.send(self.xmlstream) 866 d.addCallback(cb) 867 return d 868 869 870 def setOptions(self, service, nodeIdentifier, subscriber, 871 options, sender=None): 872 """ 873 Set subscription options. 874 875 @param service: The publish subscribe service that keeps the node. 876 @type service: L{JID} 877 878 @param nodeIdentifier: The identifier of the node. 879 @type nodeIdentifier: C{unicode} 880 881 @param subscriber: The entity subscribed to the node. 882 @type subscriber: L{JID} 883 884 @param options: Subscription options. 885 @type options: C{dict}. 886 """ 887 request = PubSubRequest('optionsSet') 888 request.recipient = service 889 request.nodeIdentifier = nodeIdentifier 890 request.subscriber = subscriber 891 request.sender = sender 892 893 form = data_form.Form(formType='submit', 894 formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 895 form.makeFields(options) 896 request.options = form 897 898 d = request.send(self.xmlstream) 790 899 return d 791 900
Note: See TracChangeset
for help on using the changeset viewer.