source:
ralphm-patches/pubsub_disco_fixes.patch
@
37:03cd0cb8548c
Last change on this file since 37:03cd0cb8548c was 34:e46c5701df9e, checked in by Ralph Meijer <ralphm@…>, 12 years ago | |
---|---|
File size: 7.6 KB |
-
wokkel/disco.py
diff -r 7740d56a1644 wokkel/disco.py
a b 495 495 """ 496 496 Gather results from a list of deferreds. 497 497 498 Similar to L{defer.gatherResults}, but flattens the returned results, 499 consumes errors after the first one and fires the errback of the 500 returned deferred with the failure of the first deferred that fires its 501 errback. 498 Similar to L{defer.gatherResults}, but flattens the returned results. 502 499 503 500 @param deferredList: List of deferreds for which the results should be 504 501 gathered. … … 512 509 results.extend(value) 513 510 return results 514 511 515 def eb(failure):516 failure.trap(defer.FirstError)517 return failure.value.subFailure518 519 512 d = defer.DeferredList(deferredList, fireOnOneErrback=1, 520 513 consumeErrors=1) 521 d.addCallback s(cb, eb)514 d.addCallback(cb) 522 515 return d 523 516 524 517 -
wokkel/pubsub.py
diff -r 7740d56a1644 wokkel/pubsub.py
a b 1011 1011 @type pubSubFeatures: C{list} or C{None} 1012 1012 """ 1013 1013 1014 implements(IPubSubService )1014 implements(IPubSubService, disco.IDisco) 1015 1015 1016 1016 iqHandlers = { 1017 1017 '/*': '_onPubSubRequest', … … 1057 1057 self.xmlstream.addObserver(PUBSUB_REQUEST, self.handleRequest) 1058 1058 1059 1059 1060 def getDiscoInfo(self, requestor, target, nodeIdentifier ):1061 def toInfo(nodeInfo , info):1060 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): 1061 def toInfo(nodeInfo): 1062 1062 if not nodeInfo: 1063 return info1063 return 1064 1064 1065 1065 (nodeType, metaData) = nodeInfo['type'], nodeInfo['meta-data'] 1066 1066 info.append(disco.DiscoIdentity('pubsub', nodeType)) … … 1080 1080 1081 1081 info.append(form) 1082 1082 1083 return info1083 return 1084 1084 1085 1085 info = [] 1086 1086 … … 1106 1106 for feature in features]) 1107 1107 1108 1108 d = defer.maybeDeferred(getInfo, requestor, target, nodeIdentifier or '') 1109 d.addCallback(toInfo , info)1109 d.addCallback(toInfo) 1110 1110 d.addErrback(log.err) 1111 d.addCallback(lambda _: info) 1111 1112 return d 1112 1113 1113 1114 1114 def getDiscoItems(self, requestor, target, nodeIdentifier ):1115 def getDiscoItems(self, requestor, target, nodeIdentifier=''): 1115 1116 if self.hideNodes: 1116 1117 d = defer.succeed([]) 1117 1118 elif self.resource is not None: -
wokkel/test/test_disco.py
diff -r 7740d56a1644 wokkel/test/test_disco.py
a b 9 9 10 10 from twisted.internet import defer 11 11 from twisted.trial import unittest 12 from twisted.words.protocols.jabber.error import StanzaError 12 13 from twisted.words.protocols.jabber.jid import JID 13 14 from twisted.words.protocols.jabber.xmlstream import toResponse 14 from twisted.words.xish import domish 15 from twisted.words.xish import domish, utility 15 16 16 17 from wokkel import data_form, disco 17 18 from wokkel.generic import parseXml … … 596 597 self.service = disco.DiscoHandler() 597 598 598 599 600 def test_connectionInitializedObserveInfo(self): 601 """ 602 An observer for Disco Info requests is setup on stream initialization. 603 """ 604 xml = """<iq from='test@example.com' to='example.com' 605 type='get'> 606 <query xmlns='%s'/> 607 </iq>""" % NS_DISCO_INFO 608 609 def handleRequest(iq): 610 called.append(iq) 611 612 called = [] 613 self.service.xmlstream = utility.EventDispatcher() 614 self.service.handleRequest = handleRequest 615 self.service.connectionInitialized() 616 self.service.xmlstream.dispatch(parseXml(xml)) 617 self.assertEqual(1, len(called)) 618 619 620 def test_connectionInitializedObserveItems(self): 621 """ 622 An observer for Disco Items requests is setup on stream initialization. 623 """ 624 xml = """<iq from='test@example.com' to='example.com' 625 type='get'> 626 <query xmlns='%s'/> 627 </iq>""" % NS_DISCO_ITEMS 628 629 def handleRequest(iq): 630 called.append(iq) 631 632 called = [] 633 self.service.xmlstream = utility.EventDispatcher() 634 self.service.handleRequest = handleRequest 635 self.service.connectionInitialized() 636 self.service.xmlstream.dispatch(parseXml(xml)) 637 self.assertEqual(1, len(called)) 638 639 599 640 def test_onDiscoInfo(self): 600 641 """ 601 642 C{onDiscoInfo} should process an info request and return a response. … … 661 702 return d 662 703 663 704 705 def test_onDiscoInfoWithNodeNoResults(self): 706 """ 707 An info request for a node with no results returns items-not-found. 708 """ 709 xml = """<iq from='test@example.com' to='example.com' 710 type='get'> 711 <query xmlns='%s' node='test'/> 712 </iq>""" % NS_DISCO_INFO 713 714 def cb(exc): 715 self.assertEquals('item-not-found', exc.condition) 716 717 def info(requestor, target, nodeIdentifier): 718 self.assertEqual('test', nodeIdentifier) 719 720 return defer.succeed([]) 721 722 self.service.info = info 723 d = self.handleRequest(xml) 724 self.assertFailure(d, StanzaError) 725 d.addCallback(cb) 726 return d 727 728 664 729 def test_onDiscoItems(self): 665 730 """ 666 731 C{onDiscoItems} should process an items request and return a response. -
wokkel/test/test_pubsub.py
diff -r 7740d56a1644 wokkel/test/test_pubsub.py
a b 1903 1903 verify.verifyObject(iwokkel.IPubSubService, self.service) 1904 1904 1905 1905 1906 def test_interfaceIDisco(self): 1907 """ 1908 Do instances of L{pubsub.PubSubService} provide L{iwokkel.IDisco}? 1909 """ 1910 verify.verifyObject(iwokkel.IDisco, self.service) 1911 1912 1906 1913 def test_connectionMade(self): 1907 1914 """ 1908 1915 Verify setup of observers in L{pubsub.connectionMade}. … … 2009 2016 return d 2010 2017 2011 2018 2019 def test_getDiscoInfoBadResponse(self): 2020 """ 2021 If getInfo returns invalid response, it should be logged, then ignored. 2022 """ 2023 def cb(info): 2024 self.assertEquals([], info) 2025 self.assertEqual(1, len(self.flushLoggedErrors(TypeError))) 2026 2027 def getInfo(requestor, target, nodeIdentifier): 2028 return defer.succeed('bad response') 2029 2030 self.resource.getInfo = getInfo 2031 d = self.service.getDiscoInfo(JID('user@example.org/home'), 2032 JID('pubsub.example.org'), 'test') 2033 d.addCallback(cb) 2034 return d 2035 2036 2037 def test_getDiscoInfoException(self): 2038 """ 2039 If getInfo returns invalid response, it should be logged, then ignored. 2040 """ 2041 def cb(info): 2042 self.assertEquals([], info) 2043 self.assertEqual(1, len(self.flushLoggedErrors(NotImplementedError))) 2044 2045 def getInfo(requestor, target, nodeIdentifier): 2046 return defer.fail(NotImplementedError()) 2047 2048 self.resource.getInfo = getInfo 2049 d = self.service.getDiscoInfo(JID('user@example.org/home'), 2050 JID('pubsub.example.org'), 'test') 2051 d.addCallback(cb) 2052 return d 2053 2054 2012 2055 def test_getDiscoItemsRoot(self): 2013 2056 """ 2014 2057 Test getDiscoItems on the root node.
Note: See TracBrowser
for help on using the repository browser.