Changeset 62:3e957d5a5064 in ralphm-patches


Ignore:
Timestamp:
May 19, 2012, 10:46:18 PM (8 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Message:

Undo code move from wokkel.xmppim to wokkel.im.

This also adds a new patch for defining Wokkel's version in wokkel.version
and defers the JID cleanup.

Files:
1 added
1 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • c2s_stanza_handlers.patch

    r57 r62  
    11# HG changeset patch
    2 # Parent 24c6e79ab1c449f41fd5d4c2cb843dc16efe2c59
     2# Parent 8c6fa8ea95402e5c968f57e7fde2f8e249c11d12
    33Add c2s protocol handlers for iq, message and presence stanzas.
    44
     
    88 * Save last unavailable presence for future probes.
    99
    10 diff -r 24c6e79ab1c4 doc/examples/client_service.tac
    11 --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
    12 +++ b/doc/examples/client_service.tac   Wed Mar 28 13:23:36 2012 +0200
     10diff --git a/doc/examples/client_service.tac b/doc/examples/client_service.tac
     11new file mode 100644
     12--- /dev/null
     13+++ b/doc/examples/client_service.tac
    1314@@ -0,0 +1,75 @@
    1415+from twisted.application import service, strports
    1516+from twisted.internet import defer
    1617+
    17 +from wokkel import client, im
     18+from wokkel import client, xmppim
    1819+from wokkel.component import InternalComponent, Router
    1920+from wokkel.generic import FallbackHandler
    2021+from wokkel.ping import PingHandler
    21 +from wokkel.im import RosterItem
     22+from wokkel.xmppim import RosterItem
    2223+
    2324+from twisted.words.protocols.jabber.jid import internJID as JID
     
    5354+
    5455+
    55 +class StaticRoster(im.RosterServerProtocol):
     56+class StaticRoster(xmppim.RosterServerProtocol):
    5657+
    5758+    def __init__(self, roster):
    58 +        im.RosterServerProtocol.__init__(self)
     59+        xmppim.RosterServerProtocol.__init__(self)
    5960+        self.roster = roster
    6061+
     
    7475+sessionManager.setHandlerParent(component)
    7576+
    76 +im.AccountIQHandler(sessionManager).setHandlerParent(component)
    77 +im.AccountMessageHandler(sessionManager).setHandlerParent(component)
    78 +im.PresenceServerHandler(sessionManager, domain, roster).setHandlerParent(component)
     77+xmppim.AccountIQHandler(sessionManager).setHandlerParent(component)
     78+xmppim.AccountMessageHandler(sessionManager).setHandlerParent(component)
     79+xmppim.PresenceServerHandler(sessionManager, domain, roster).setHandlerParent(component)
    7980+FallbackHandler().setHandlerParent(component)
    8081+StaticRoster(roster).setHandlerParent(component)
     
    8788+
    8889+sessionManager.connectionManager = c2sFactory
    89 diff -r 24c6e79ab1c4 wokkel/im.py
    90 --- a/wokkel/im.py      Wed Mar 28 13:22:34 2012 +0200
    91 +++ b/wokkel/im.py      Wed Mar 28 13:23:36 2012 +0200
    92 @@ -10,7 +10,10 @@
    93  U{RFC 6121<http://www.xmpp.org/rfcs/rfc6121.html>} (XMPP IM).
    94  """
     90diff --git a/wokkel/test/test_xmppim.py b/wokkel/test/test_xmppim.py
     91--- a/wokkel/test/test_xmppim.py
     92+++ b/wokkel/test/test_xmppim.py
     93@@ -13,7 +13,7 @@
     94 from twisted.words.xish import domish, utility
     95 
     96 from wokkel import xmppim
     97-from wokkel.generic import ErrorStanza, parseXml
     98+from wokkel.generic import ErrorStanza, Stanza, parseXml
     99 from wokkel.test.helpers import TestableRequestHandlerMixin, XmlStreamStub
     100 
     101 NS_XML = 'http://www.w3.org/XML/1998/namespace'
     102@@ -1333,6 +1333,82 @@
     103 
     104 
     105 
     106+class AccountIQHandlerTest(unittest.TestCase):
     107+    """
     108+    Tests for L{xmppim.AccountIQHandler}.
     109+    """
     110+
     111+    def setUp(self):
     112+        self.stub = XmlStreamStub()
     113+        self.protocol = xmppim.AccountIQHandler(None)
     114+        self.protocol.makeConnection(self.stub.xmlstream)
     115+        self.protocol.connectionInitialized()
     116+
     117+
     118+    def test_onIQNotUser(self):
     119+        """
     120+        IQs to JIDs without local part are ignored.
     121+        """
     122+        xml = """
     123+          <iq to='example.org'>
     124+            <query xmlns='jabber:iq:version'/>
     125+          </iq>
     126+        """
     127+
     128+        iq = parseXml(xml)
     129+        self.stub.send(iq)
     130+
     131+        self.assertFalse(getattr(iq, 'handled'))
     132+
     133+
     134+
     135+class AccountMessageHandlerTest(unittest.TestCase):
     136+    """
     137+    Tests for L{xmppim.AccountMessageHandler}.
     138+    """
     139+
     140+    def setUp(self):
     141+        self.stub = XmlStreamStub()
     142+        self.protocol = xmppim.AccountMessageHandler(None)
     143+        self.protocol.makeConnection(self.stub.xmlstream)
     144+        self.protocol.connectionInitialized()
     145+
     146+
     147+    def test_onMessageNotUser(self):
     148+        """
     149+        Messages to JIDs without local part are ignored.
     150+        """
     151+        xml = """
     152+          <message to='example.org'>
     153+            <body>Hello</body>
     154+          </message>
     155+        """
     156+
     157+        message = parseXml(xml)
     158+        self.stub.send(message)
     159+
     160+        self.assertFalse(getattr(message, 'handled'))
     161+
     162+
     163+
     164+class ClonePresenceTest(unittest.TestCase):
     165+    """
     166+    Tests for L{xmppim.clonePresence}.
     167+    """
     168+
     169+    def test_rootElement(self):
     170+        """
     171+        The copied presence stanza is not identical, but renders identically.
     172+        """
     173+        originalElement = domish.Element((None, 'presence'))
     174+        stanza = Stanza.fromElement(originalElement)
     175+        copyElement = xmppim.clonePresence(stanza)
     176+
     177+        self.assertNotIdentical(copyElement, originalElement)
     178+        self.assertEquals(copyElement.toXml(), originalElement.toXml())
     179+
     180+
     181+
     182 class RosterServerProtocolTest(unittest.TestCase, TestableRequestHandlerMixin):
     183     """
     184     Tests for L{xmppim.RosterServerProtocol}.
     185diff --git a/wokkel/xmppim.py b/wokkel/xmppim.py
     186--- a/wokkel/xmppim.py
     187+++ b/wokkel/xmppim.py
     188@@ -12,7 +12,10 @@
     189 
     190 import warnings
    95191 
    96192+import copy
     
    99195+from twisted.python import log
    100196 from twisted.words.protocols.jabber import error
    101  from twisted.words.protocols.jabber import jid
     197 from twisted.words.protocols.jabber.jid import JID
    102198 from twisted.words.xish import domish
    103 @@ -179,10 +182,7 @@
     199@@ -408,10 +411,7 @@
    104200 
    105201 
     
    113209 
    114210         presenceType = stanza.stanzaType or 'available'
    115 @@ -192,14 +192,22 @@
     211@@ -421,14 +421,22 @@
    116212         except KeyError:
    117213             return
     
    138234 
    139235 
    140 @@ -582,6 +590,440 @@
     236@@ -1067,6 +1075,440 @@
    141237 
    142238 
     
    168264+
    169265+        try:
    170 +            recipient = jid.internJID(iq['to'])
     266+            recipient = JID(iq['to'])
    171267+        except KeyError:
    172268+            return
     
    218314+
    219315+        try:
    220 +            recipient = jid.internJID(message['to'])
     316+            recipient = JID(message['to'])
    221317+        except KeyError:
    222318+            return
     
    351447+                continue
    352448+
    353 +            resourceJID = jid.JID(tuple=(fromJID.user,
    354 +                                         fromJID.host,
    355 +                                         otherResource))
     449+            resourceJID = JID(tuple=(fromJID.user,
     450+                                     fromJID.host,
     451+                                     otherResource))
    356452+            outPresence = clonePresence(presence)
    357453+            outPresence['to'] = resourceJID.full()
     
    378474+                    # broadcast to contact's available resources
    379475+                    for itemResource in self.presences[item.entity.user]:
    380 +                        resourceJID = jid.JID(tuple=(item.entity.user,
    381 +                                                     item.entity.host,
    382 +                                                     itemResource))
     476+                        resourceJID = JID(tuple=(item.entity.user,
     477+                                                 item.entity.host,
     478+                                                 itemResource))
    383479+                        self.sessionManager.deliverStanza(outPresence,
    384480+                                                          resourceJID)
     
    458554+        if toJID.user in self.presences:
    459555+            for resource in self.presences[toJID.user]:
    460 +                resourceJID = jid.JID(tuple=(toJID.user,
    461 +                                             toJID.host,
    462 +                                             resource))
     556+                resourceJID = JID(tuple=(toJID.user,
     557+                                         toJID.host,
     558+                                         resource))
    463559+                self.sessionManager.deliverStanza(presence.element, resourceJID)
    464560+            self.remotePresences[toJID.user][fromJID] = presence
     
    579675     """
    580676     XMPP subprotocol handler for the roster, server side.
    581 diff -r 24c6e79ab1c4 wokkel/test/test_im.py
    582 --- a/wokkel/test/test_im.py    Wed Mar 28 13:22:34 2012 +0200
    583 +++ b/wokkel/test/test_im.py    Wed Mar 28 13:23:36 2012 +0200
    584 @@ -13,7 +13,7 @@
    585  from twisted.words.xish import domish, utility
    586  
    587  from wokkel import im
    588 -from wokkel.generic import ErrorStanza, parseXml
    589 +from wokkel.generic import ErrorStanza, Stanza, parseXml
    590  from wokkel.test.helpers import TestableRequestHandlerMixin, XmlStreamStub
    591  
    592  NS_XML = 'http://www.w3.org/XML/1998/namespace'
    593 @@ -846,6 +846,82 @@
    594  
    595  
    596  
    597 +class AccountIQHandlerTest(unittest.TestCase):
    598 +    """
    599 +    Tests for L{im.AccountIQHandler}.
    600 +    """
    601 +
    602 +    def setUp(self):
    603 +        self.stub = XmlStreamStub()
    604 +        self.protocol = im.AccountIQHandler(None)
    605 +        self.protocol.makeConnection(self.stub.xmlstream)
    606 +        self.protocol.connectionInitialized()
    607 +
    608 +
    609 +    def test_onIQNotUser(self):
    610 +        """
    611 +        IQs to JIDs without local part are ignored.
    612 +        """
    613 +        xml = """
    614 +          <iq to='example.org'>
    615 +            <query xmlns='jabber:iq:version'/>
    616 +          </iq>
    617 +        """
    618 +
    619 +        iq = parseXml(xml)
    620 +        self.stub.send(iq)
    621 +
    622 +        self.assertFalse(getattr(iq, 'handled'))
    623 +
    624 +
    625 +
    626 +class AccountMessageHandlerTest(unittest.TestCase):
    627 +    """
    628 +    Tests for L{im.AccountMessageHandler}.
    629 +    """
    630 +
    631 +    def setUp(self):
    632 +        self.stub = XmlStreamStub()
    633 +        self.protocol = im.AccountMessageHandler(None)
    634 +        self.protocol.makeConnection(self.stub.xmlstream)
    635 +        self.protocol.connectionInitialized()
    636 +
    637 +
    638 +    def test_onMessageNotUser(self):
    639 +        """
    640 +        Messages to JIDs without local part are ignored.
    641 +        """
    642 +        xml = """
    643 +          <message to='example.org'>
    644 +            <body>Hello</body>
    645 +          </message>
    646 +        """
    647 +
    648 +        message = parseXml(xml)
    649 +        self.stub.send(message)
    650 +
    651 +        self.assertFalse(getattr(message, 'handled'))
    652 +
    653 +
    654 +
    655 +class ClonePresenceTest(unittest.TestCase):
    656 +    """
    657 +    Tests for L{im.clonePresence}.
    658 +    """
    659 +
    660 +    def test_rootElement(self):
    661 +        """
    662 +        The copied presence stanza is not identical, but renders identically.
    663 +        """
    664 +        originalElement = domish.Element((None, 'presence'))
    665 +        stanza = Stanza.fromElement(originalElement)
    666 +        copyElement = im.clonePresence(stanza)
    667 +
    668 +        self.assertNotIdentical(copyElement, originalElement)
    669 +        self.assertEquals(copyElement.toXml(), originalElement.toXml())
    670 +
    671 +
    672 +
    673  class RosterServerProtocolTest(unittest.TestCase, TestableRequestHandlerMixin):
    674      """
    675      Tests for L{im.RosterServerProtocol}.
  • roster_server.patch

    r54 r62  
    99 * Add support for roster sets?
    1010
    11 diff -r e3c41b054210 wokkel/im.py
    12 --- a/wokkel/im.py      Wed Oct 05 09:32:22 2011 +0200
    13 +++ b/wokkel/im.py      Wed Oct 05 09:38:26 2011 +0200
    14 @@ -23,6 +23,7 @@
    15  NS_ROSTER = 'jabber:iq:roster'
    16  
    17  XPATH_ROSTER_SET = "/iq[@type='set']/query[@xmlns='%s']" % NS_ROSTER
    18 +XPATH_ROSTER_GET = "/iq[@type='get']/query[@xmlns='%s']" % NS_ROSTER
    19  
    20  
    21  
    22 @@ -549,3 +550,40 @@
    23          @param entity: The entity for which the roster item has been removed.
    24          @type entity: L{jid.JID}
    25          """
    26 +
    27 +
    28 +
    29 +class RosterServerProtocol(XMPPHandler, IQHandlerMixin):
    30 +    """
    31 +    XMPP subprotocol handler for the roster, server side.
    32 +    """
    33 +
    34 +    iqHandlers = {
    35 +            XPATH_ROSTER_GET: '_onRosterGet',
    36 +            # XPATH_ROSTER_SET: '_onRosterSet',
    37 +            }
    38 +
    39 +    def connectionInitialized(self):
    40 +        self.xmlstream.addObserver(XPATH_ROSTER_GET, self.handleRequest)
    41 +        self.xmlstream.addObserver(XPATH_ROSTER_SET, self.handleRequest)
    42 +
    43 +
    44 +    def _toRosterReply(self, roster, request):
    45 +        response = domish.Element((NS_ROSTER, 'query'))
    46 +
    47 +        for item in roster:
    48 +            response.addChild(item.toElement())
    49 +
    50 +        return response
    51 +
    52 +
    53 +    def _onRosterGet(self, iq):
    54 +        request = Stanza.fromElement(iq)
    55 +
    56 +        d = self.getRoster(request)
    57 +        d.addCallback(self._toRosterReply, request)
    58 +        return d
    59 +
    60 +
    61 +    def getRoster(self, entity):
    62 +        raise NotImplementedError()
    63 diff -r e3c41b054210 wokkel/test/test_im.py
    64 --- a/wokkel/test/test_im.py    Wed Oct 05 09:32:22 2011 +0200
    65 +++ b/wokkel/test/test_im.py    Wed Oct 05 09:38:26 2011 +0200
    66 @@ -844,3 +844,80 @@
     11diff --git a/wokkel/test/test_xmppim.py b/wokkel/test/test_xmppim.py
     12--- a/wokkel/test/test_xmppim.py
     13+++ b/wokkel/test/test_xmppim.py
     14@@ -1330,3 +1330,81 @@
     15         d = self.handleRequest(xml)
    6716         d.addCallback(cb)
    6817         return d
    69  
     18+
    7019+
    7120+
    7221+class RosterServerProtocolTest(unittest.TestCase, TestableRequestHandlerMixin):
    7322+    """
    74 +    Tests for L{im.RosterServerProtocol}.
     23+    Tests for L{xmppim.RosterServerProtocol}.
    7524+    """
    7625+
    7726+    def setUp(self):
    7827+        self.stub = XmlStreamStub()
    79 +        self.service = im.RosterServerProtocol()
     28+        self.service = xmppim.RosterServerProtocol()
    8029+        self.service.makeConnection(self.stub.xmlstream)
    8130+        self.service.connectionInitialized()
     
    9443+        def getRoster(request):
    9544+            self.assertEqual(JID('user@example.org'), request.sender)
    96 +            item = im.RosterItem(JID('other@example.org'), True, False,
     45+            item = xmppim.RosterItem(JID('other@example.org'), True, False,
    9746+                                 'The User')
    9847+            return defer.succeed([item])
     
    14594+        self.assertFailure(d, NotImplementedError)
    14695+        return d
     96diff --git a/wokkel/xmppim.py b/wokkel/xmppim.py
     97--- a/wokkel/xmppim.py
     98+++ b/wokkel/xmppim.py
     99@@ -25,6 +25,7 @@
     100 NS_ROSTER = 'jabber:iq:roster'
     101 
     102 XPATH_ROSTER_SET = "/iq[@type='set']/query[@xmlns='%s']" % NS_ROSTER
     103+XPATH_ROSTER_GET = "/iq[@type='get']/query[@xmlns='%s']" % NS_ROSTER
     104 
     105 
     106 
     107@@ -1063,3 +1064,40 @@
     108         """
     109         Called when a message stanza was received.
     110         """
     111+
     112+
     113+
     114+class RosterServerProtocol(XMPPHandler, IQHandlerMixin):
     115+    """
     116+    XMPP subprotocol handler for the roster, server side.
     117+    """
     118+
     119+    iqHandlers = {
     120+            XPATH_ROSTER_GET: '_onRosterGet',
     121+            # XPATH_ROSTER_SET: '_onRosterSet',
     122+            }
     123+
     124+    def connectionInitialized(self):
     125+        self.xmlstream.addObserver(XPATH_ROSTER_GET, self.handleRequest)
     126+        self.xmlstream.addObserver(XPATH_ROSTER_SET, self.handleRequest)
     127+
     128+
     129+    def _toRosterReply(self, roster, request):
     130+        response = domish.Element((NS_ROSTER, 'query'))
     131+
     132+        for item in roster:
     133+            response.addChild(item.toElement())
     134+
     135+        return response
     136+
     137+
     138+    def _onRosterGet(self, iq):
     139+        request = Stanza.fromElement(iq)
     140+
     141+        d = self.getRoster(request)
     142+        d.addCallback(self._toRosterReply, request)
     143+        return d
     144+
     145+
     146+    def getRoster(self, entity):
     147+        raise NotImplementedError()
  • series

    r61 r62  
    1 pubsub_client_example.patch
    2 
    3 copy_xmppim.patch #+c2s
    4 jid_cleanup.patch #+c2s
    51roster_server.patch #+c2s
    62router_unknown.patch #+c2s
     
    106c2s_stanza_handlers.patch #+c2s
    117
     8version.patch
     9
     10pubsub_client_example.patch
    1211pubsub_resource_example.patch
    1312
     
    1514pubsub-item.patch #-compatible
    1615
     16jid_cleanup.patch #+deferred
    1717pubsub-default-type-attribute.patch #+deferred
    1818disco_simplify_gatherResults.patch #+deferred
Note: See TracChangeset for help on using the changeset viewer.