Changeset 25:fd00a744a458 for wokkel/pubsub.py
- Timestamp:
- Jul 7, 2008, 4:29:02 PM (14 years ago)
- Branch:
- default
- Convert:
- svn:b33ecbfc-034c-dc11-8662-000475d9059e/trunk@55
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/pubsub.py
r24 r25 174 174 self.command = self.pubsub.addElement(verb) 175 175 176 176 177 def send(self, to): 177 178 """ … … 199 200 self.xmlstream.addObserver('/message/event[@xmlns="%s"]' % 200 201 NS_PUBSUB_EVENT, self._onEvent) 202 201 203 202 204 def _onEvent(self, message): … … 271 273 return request.send(service).addCallback(cb) 272 274 275 273 276 def deleteNode(self, service, nodeIdentifier): 274 277 """ … … 283 286 request.command['node'] = nodeIdentifier 284 287 return request.send(service) 288 285 289 286 290 def subscribe(self, service, nodeIdentifier, subscriber): … … 315 319 return request.send(service).addCallback(cb) 316 320 321 317 322 def unsubscribe(self, service, nodeIdentifier, subscriber): 318 323 """ … … 331 336 return request.send(service) 332 337 338 333 339 def publish(self, service, nodeIdentifier, items=None): 334 340 """ … … 349 355 350 356 return request.send(service) 357 351 358 352 359 def items(self, service, nodeIdentifier, maxItems=None): … … 431 438 } 432 439 440 433 441 def __init__(self): 434 442 self.discoIdentity = {'category': 'pubsub', … … 437 445 438 446 self.pubSubFeatures = [] 447 439 448 440 449 def connectionMade(self): … … 444 453 self.xmlstream.addObserver(PUBSUB_OWNER_SET, self.handleRequest) 445 454 455 446 456 def getDiscoInfo(self, requestor, target, nodeIdentifier): 447 457 info = [] … … 454 464 for feature in self.pubSubFeatures]) 455 465 456 return defer.succeed(info) 457 else: 458 def toInfo(nodeInfo): 459 if not nodeInfo: 460 return [] 461 462 (nodeType, metaData) = nodeInfo['type'], nodeInfo['meta-data'] 463 info.append(disco.DiscoIdentity('pubsub', nodeType)) 464 if metaData: 465 form = data_form.Form(type="result", 466 form_type=NS_PUBSUB_META_DATA) 467 form.add_field("text-single", 468 "pubsub#node_type", 469 "The type of node (collection or leaf)", 470 nodeType) 471 472 for metaDatum in metaData: 473 form.add_field(**metaDatum) 474 475 info.append(form) 476 return info 477 478 d = self.getNodeInfo(requestor, target, nodeIdentifier) 479 d.addCallback(toInfo) 480 return d 466 def toInfo(nodeInfo): 467 if not nodeInfo: 468 return 469 470 (nodeType, metaData) = nodeInfo['type'], nodeInfo['meta-data'] 471 info.append(disco.DiscoIdentity('pubsub', nodeType)) 472 if metaData: 473 form = data_form.Form(formType="result", 474 formNamespace=NS_PUBSUB_META_DATA) 475 form.fields.append( 476 data_form.Field( 477 var='pubsub#node_type', 478 value=nodeType, 479 label='The type of node (collection or leaf)' 480 ) 481 ) 482 483 for metaDatum in metaData: 484 form.fields.append(data_form.Field.fromDict(metaDatum)) 485 486 info.append(form.toElement()) 487 488 d = self.getNodeInfo(requestor, target, nodeIdentifier or '') 489 d.addCallback(toInfo) 490 d.addBoth(lambda result: info) 491 return d 492 481 493 482 494 def getDiscoItems(self, requestor, target, nodeIdentifier): … … 489 501 return d 490 502 503 504 def _findForm(self, element, formNamespace): 505 if not element: 506 return None 507 508 form = None 509 for child in element.elements(): 510 try: 511 form = data_form.Form.fromElement(child) 512 except data_form.Error: 513 continue 514 515 if form.formNamespace != NS_PUBSUB_NODE_CONFIG: 516 continue 517 518 return form 519 520 491 521 def _onPublish(self, iq): 492 522 requestor = jid.internJID(iq["from"]).userhostJID() … … 504 534 505 535 return self.publish(requestor, service, nodeIdentifier, items) 536 506 537 507 538 def _onSubscribe(self, iq): … … 528 559 return d 529 560 561 530 562 def _onUnsubscribe(self, iq): 531 563 requestor = jid.internJID(iq["from"]).userhostJID() … … 540 572 return self.unsubscribe(requestor, service, nodeIdentifier, subscriber) 541 573 574 542 575 def _onOptionsGet(self, iq): 543 576 raise Unsupported('subscription-options-unavailable') 544 577 578 545 579 def _onOptionsSet(self, iq): 546 580 raise Unsupported('subscription-options-unavailable') 581 547 582 548 583 def _onSubscriptions(self, iq): … … 564 599 return d 565 600 601 566 602 def _onAffiliations(self, iq): 567 603 requestor = jid.internJID(iq["from"]).userhostJID() … … 582 618 d.addCallback(toResponse) 583 619 return d 620 584 621 585 622 def _onCreate(self, iq): … … 601 638 return d 602 639 603 def _formFromConfiguration(self, options): 604 form = data_form.Form(type="form", form_type=NS_PUBSUB_NODE_CONFIG) 605 606 for option in options: 607 form.add_field(**option) 640 641 def _formFromConfiguration(self, values): 642 options = self.getConfigurationOptions() 643 form = data_form.Form(formType="form", 644 formNamespace=NS_PUBSUB_NODE_CONFIG) 645 646 for name, value in values.iteritems(): 647 if name in options: 648 option = {'var': name} 649 option.update(options[name]) 650 if isinstance(value, list): 651 option['values'] = value 652 else: 653 option['value'] = value 654 form.fields.append(data_form.Field.fromDict(option)) 608 655 609 656 return form 657 610 658 611 659 def _onDefault(self, iq): … … 616 664 response = domish.Element((NS_PUBSUB_OWNER, "pubsub")) 617 665 default = response.addElement("default") 618 default.addChild(self._formFromConfiguration(options) )666 default.addChild(self._formFromConfiguration(options).toElement()) 619 667 return response 620 668 … … 623 671 return d 624 672 673 625 674 def _onConfigureGet(self, iq): 626 675 requestor = jid.internJID(iq["from"]).userhostJID() … … 631 680 response = domish.Element((NS_PUBSUB_OWNER, "pubsub")) 632 681 configure = response.addElement("configure") 633 configure.addChild(self._formFromConfiguration(options) )682 configure.addChild(self._formFromConfiguration(options).toElement()) 634 683 635 684 if nodeIdentifier: … … 642 691 return d 643 692 693 644 694 def _onConfigureSet(self, iq): 645 695 requestor = jid.internJID(iq["from"]).userhostJID() … … 647 697 nodeIdentifier = iq.pubsub.configure["node"] 648 698 649 def getFormOptions(form):650 options = {}651 652 for element in form.elements():653 if element.name == 'field' and \654 element.uri == data_form.NS_X_DATA:655 try:656 options[element["var"]] = str(element.value)657 except (KeyError, AttributeError):658 raise BadRequest659 660 return options661 662 699 # Search configuration form with correct FORM_TYPE and process it 663 700 664 for element in iq.pubsub.configure.elements(): 665 if element.name != 'x' or element.uri != data_form.NS_X_DATA: 666 continue 667 668 type = element.getAttribute("type") 669 if type == "cancel": 670 return None 671 elif type != "submit": 672 continue 673 674 options = getFormOptions(element) 675 676 if options["FORM_TYPE"] == NS_PUBSUB + "#node_config": 677 del options["FORM_TYPE"] 701 form = self._findForm(iq.pubsub.configure, NS_PUBSUB_NODE_CONFIG) 702 703 if form: 704 if form.formType == 'submit': 705 options = form.getValues() 706 678 707 return self.setConfiguration(requestor, service, 679 708 nodeIdentifier, options) 680 681 raise BadRequest 709 elif form.formType == 'cancel': 710 return None 711 712 raise BadRequest() 713 682 714 683 715 def _onItems(self, iq): … … 721 753 return d 722 754 755 723 756 def _onRetract(self, iq): 724 757 requestor = jid.internJID(iq["from"]).userhostJID() … … 741 774 itemIdentifiers) 742 775 776 743 777 def _onPurge(self, iq): 744 778 requestor = jid.internJID(iq["from"]).userhostJID() … … 752 786 return self.purge(requestor, service, nodeIdentifier) 753 787 788 754 789 def _onDelete(self, iq): 755 790 requestor = jid.internJID(iq["from"]).userhostJID() … … 763 798 return self.delete(requestor, service, nodeIdentifier) 764 799 800 765 801 def _onAffiliationsGet(self, iq): 766 802 raise Unsupported('modify-affiliations') 767 803 804 768 805 def _onAffiliationsSet(self, iq): 769 806 raise Unsupported('modify-affiliations') 770 807 808 771 809 def _onSubscriptionsGet(self, iq): 772 810 raise Unsupported('manage-subscriptions') 811 773 812 774 813 def _onSubscriptionsSet(self, iq): … … 788 827 self.send(message) 789 828 829 790 830 def notifyDelete(self, service, nodeIdentifier, recipients): 791 831 for recipient in recipients: … … 798 838 self.send(message) 799 839 840 800 841 def getNodeInfo(self, requestor, service, nodeIdentifier): 801 842 return None 802 843 844 803 845 def getNodes(self, requestor, service): 804 846 return [] 805 847 848 806 849 def publish(self, requestor, service, nodeIdentifier, items): 807 850 raise Unsupported('publish') 808 851 852 809 853 def subscribe(self, requestor, service, nodeIdentifier, subscriber): 810 854 raise Unsupported('subscribe') 811 855 856 812 857 def unsubscribe(self, requestor, service, nodeIdentifier, subscriber): 813 858 raise Unsupported('subscribe') 814 859 860 815 861 def subscriptions(self, requestor, service): 816 862 raise Unsupported('retrieve-subscriptions') 817 863 864 818 865 def affiliations(self, requestor, service): 819 866 raise Unsupported('retrieve-affiliations') 820 867 868 821 869 def create(self, requestor, service, nodeIdentifier): 822 870 raise Unsupported('create-nodes') 823 871 872 873 def getConfigurationOptions(self): 874 return {} 875 876 824 877 def getDefaultConfiguration(self, requestor, service): 825 878 raise Unsupported('retrieve-default') 826 879 880 827 881 def getConfiguration(self, requestor, service, nodeIdentifier): 828 882 raise Unsupported('config-node') 829 883 884 830 885 def setConfiguration(self, requestor, service, nodeIdentifier, options): 831 886 raise Unsupported('config-node') 887 832 888 833 889 def items(self, requestor, service, nodeIdentifier, maxItems, … … 835 891 raise Unsupported('retrieve-items') 836 892 893 837 894 def retract(self, requestor, service, nodeIdentifier, itemIdentifiers): 838 895 raise Unsupported('retract-items') 839 896 897 840 898 def purge(self, requestor, service, nodeIdentifier): 841 899 raise Unsupported('purge-nodes') 842 900 901 843 902 def delete(self, requestor, service, nodeIdentifier): 844 903 raise Unsupported('delete-nodes')
Note: See TracChangeset
for help on using the changeset viewer.