[Git][gajim/python-nbxmpp][master] 2 commits: Add Blocking (XEP-0191) module

Philipp Hörist gitlab at dev.gajim.org
Mon Jan 21 22:34:22 CET 2019


Philipp Hörist pushed to branch master at gajim / python-nbxmpp


Commits:
d85cb5e5 by Philipp Hörist at 2019-01-21T21:33:26Z
Add Blocking (XEP-0191) module

- - - - -
f90126ec by Philipp Hörist at 2019-01-21T21:33:26Z
BOSH: Fix setting language on stream

- - - - -


4 changed files:

- nbxmpp/bosh.py
- nbxmpp/dispatcher_nb.py
- + nbxmpp/modules/blocking.py
- nbxmpp/structs.py


Changes:

=====================================
nbxmpp/bosh.py
=====================================
@@ -45,7 +45,6 @@ class NonBlockingBOSH(NonBlockingTransport):
             idlequeue, estabilish_tls, certs, tls_version, cipher_list)
 
         self.bosh_sid = None
-        self.bosh_xml_lang = self._owner.lang
 
         self.http_version = 'HTTP/1.1'
         self.http_persistent = True
@@ -414,7 +413,7 @@ class NonBlockingBOSH(NonBlockingTransport):
             t = BOSHBody(
                     attrs={ 'to': self.bosh_to,
                             'sid': self.bosh_sid,
-                            'xml:lang': self.bosh_xml_lang,
+                            'xml:lang': self._owner.lang,
                             'xmpp:restart': 'true',
                             'secure': self.bosh_secure,
                             'xmlns:xmpp': 'urn:xmpp:xbosh'})
@@ -425,7 +424,7 @@ class NonBlockingBOSH(NonBlockingTransport):
                     'route': 'xmpp:%s:%s' % (self.route_host, self.route_port),
                     'to': self.bosh_to,
                     'wait': str(self.bosh_wait),
-                    'xml:lang': self.bosh_xml_lang,
+                    'xml:lang': self._owner.lang,
                     'xmpp:version': '1.0',
                     'ver': '1.6',
                     'xmlns:xmpp': 'urn:xmpp:xbosh'})


=====================================
nbxmpp/dispatcher_nb.py
=====================================
@@ -55,6 +55,7 @@ from nbxmpp.modules.signed import Signed
 from nbxmpp.modules.vcard_avatar import VCardAvatar
 from nbxmpp.modules.captcha import Captcha
 from nbxmpp.modules.entity_caps import EntityCaps
+from nbxmpp.modules.blocking import Blocking
 from nbxmpp.modules.misc import unwrap_carbon
 from nbxmpp.modules.misc import unwrap_mam
 from nbxmpp.util import get_properties_struct
@@ -177,6 +178,7 @@ class XMPPDispatcher(PlugIn):
         self._modules['Signed'] = Signed(self._owner)
         self._modules['VCardAvatar'] = VCardAvatar(self._owner)
         self._modules['EntityCaps'] = EntityCaps(self._owner)
+        self._modules['Blocking'] = Blocking(self._owner)
 
         for instance in self._modules.values():
             for handler in instance.handlers:


=====================================
nbxmpp/modules/blocking.py
=====================================
@@ -0,0 +1,81 @@
+# Copyright (C) 2018 Philipp Hörist <philipp AT hoerist.com>
+#
+# This file is part of nbxmpp.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; If not, see <http://www.gnu.org/licenses/>.
+
+import logging
+
+from nbxmpp.protocol import NS_BLOCKING
+from nbxmpp.protocol import Iq
+from nbxmpp.protocol import isResultNode
+from nbxmpp.structs import BlockingListResult
+from nbxmpp.structs import CommonResult
+from nbxmpp.util import call_on_response
+from nbxmpp.util import callback
+
+log = logging.getLogger('nbxmpp.m.blocking')
+
+
+class Blocking:
+    def __init__(self, client):
+        self._client = client
+        self.handlers = []
+
+    @call_on_response('_blocking_list_received')
+    def get_blocking_list(self):
+        iq = Iq('get', NS_BLOCKING)
+        iq.setQuery('blocklist')
+        return iq
+
+    @callback
+    def _blocking_list_received(self, stanza):
+        blocked = []
+        if not isResultNode(stanza):
+            log.info('Error: %s', stanza.getErrorMsg())
+            return BlockingListResult(blocking_list=blocked,
+                                      error=stanza.getErrorMsg())
+
+        blocklist = stanza.getTag('blocklist', namespace=NS_BLOCKING)
+        for item in blocklist.getTags('item'):
+            blocked.append(item.getAttr('jid'))
+
+        log.info('Received blocking list: %s', blocked)
+        return BlockingListResult(blocking_list=blocked)
+
+    @call_on_response('_default_response')
+    def block(self, jids):
+        log.info('Block: %s', jids)
+        iq = Iq('set', NS_BLOCKING)
+        query = iq.setQuery(name='block')
+        for jid in jids:
+            query.addChild(name='item', attrs={'jid': jid})
+        return iq
+
+    @call_on_response('_default_response')
+    def unblock(self, jids):
+        log.info('Unblock: %s', jids)
+        iq = Iq('set', NS_BLOCKING)
+        query = iq.setQuery(name='unblock')
+        for jid in jids:
+            query.addChild(name='item', attrs={'jid': jid})
+        return iq
+
+    @callback
+    def _default_response(self, stanza):
+        if not isResultNode(stanza):
+            log.info('Error: %s', stanza.getErrorMsg())
+            return CommonResult(jid=stanza.getFrom(),
+                                error=stanza.getErrorMsg())
+        return CommonResult(jid=stanza.getFrom())


=====================================
nbxmpp/structs.py
=====================================
@@ -294,14 +294,23 @@ class CommonResult(BaseResult, namedtuple('CommonResult', 'jid error')):
 
 CommonResult.__new__.__defaults__ = (None,)
 
+
 class AffiliationResult(BaseResult, namedtuple('AffiliationResult',
                                                'jid affiliation users error')):
     pass
 
 AffiliationResult.__new__.__defaults__ = (None, None)
 
+
 class MucConfigResult(BaseResult, namedtuple('MucConfigResult',
                                              'jid form error')):
     pass
 
 MucConfigResult.__new__.__defaults__ = (None, None)
+
+
+class BlockingListResult(BaseResult, namedtuple('BlockingListResult',
+                                                'blocking_list error')):
+    pass
+
+BlockingListResult.__new__.__defaults__ = (None,)



View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/compare/00189cbbcfd51063c2bb3ebe0d2733e4bccb4fac...f90126ecf2f9ddee0c6426aa0c2625086c88f687

-- 
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/compare/00189cbbcfd51063c2bb3ebe0d2733e4bccb4fac...f90126ecf2f9ddee0c6426aa0c2625086c88f687
You're receiving this email because of your account on dev.gajim.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gajim.org/pipermail/commits/attachments/20190121/f21cb990/attachment-0001.html>


More information about the Commits mailing list