Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/python-nbxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2020-04-29 23:03:54 +0300
committerlovetox <philipp@hoerist.com>2020-04-29 23:03:54 +0300
commit5303bb12ee2fb424760220e70918380a1217091f (patch)
treedbdbc22377c4ca72e08d42312fd42238afee6eaf
parent8a817d6c44ca4d1ed7df03fff41eb34b5631a023 (diff)
Dispatcher: Refactor handler registration
-rw-r--r--nbxmpp/dispatcher.py62
-rw-r--r--nbxmpp/smacks.py26
-rw-r--r--test/unit/test_activity.py6
-rw-r--r--test/unit/test_avatar.py6
-rw-r--r--test/unit/test_bookmarks.py12
-rw-r--r--test/unit/test_location.py6
-rw-r--r--test/unit/test_mood.py6
-rw-r--r--test/unit/test_pubsub.py24
-rw-r--r--test/unit/test_tune.py6
9 files changed, 79 insertions, 75 deletions
diff --git a/nbxmpp/dispatcher.py b/nbxmpp/dispatcher.py
index 5554bfa..f3f412c 100644
--- a/nbxmpp/dispatcher.py
+++ b/nbxmpp/dispatcher.py
@@ -183,7 +183,7 @@ class StanzaDispatcher(Observable):
for instance in self._modules.values():
for handler in instance.handlers:
- self.register_handler(*handler)
+ self.register_handler(handler)
def reset_parser(self):
if self._parser is not None:
@@ -253,75 +253,69 @@ class StanzaDispatcher(Observable):
tag_name, xmlns, protocol)
self._handlers[xmlns][tag_name] = {'type': protocol, 'default': []}
- def register_handler(self, name, handler, typ='', ns='',
- xmlns=None, priority=50):
+ def register_handler(self, handler):
"""
Register handler
-
- :param name: name of top level tag, example: iq, message, presence
- :param handler: callback
- :param typ: value of stanza's "type" attribute.
- If not specified any value will match
- :param ns: Namespace of child that stanza must contain
- :param xmlns: XML namespace, only needed if not jabber:client
- :param priority: The priority of the handler, higher get called later
"""
- if not xmlns:
- xmlns = Namespace.CLIENT
+ xmlns = handler.xmlns or Namespace.CLIENT
- if not typ and not ns:
+ typ = handler.typ
+ if not typ and not handler.ns:
typ = 'default'
self._log.debug(
'Register handler %s for "%s" type->%s ns->%s(%s) priority->%s',
- handler, name, typ, ns, xmlns, priority)
+ handler.callback, handler.name, typ, handler.ns,
+ xmlns, handler.priority
+ )
if xmlns not in self._handlers:
self._register_namespace(xmlns)
- if name not in self._handlers[xmlns]:
- self._register_protocol(name, Protocol, xmlns)
+ if handler.name not in self._handlers[xmlns]:
+ self._register_protocol(handler.name, Protocol, xmlns)
- specific = typ + ns
- if specific not in self._handlers[xmlns][name]:
- self._handlers[xmlns][name][specific] = []
+ specific = typ + handler.ns
+ if specific not in self._handlers[xmlns][handler.name]:
+ self._handlers[xmlns][handler.name][specific] = []
- self._handlers[xmlns][name][specific].append(
- {'func': handler,
- 'priority': priority,
+ self._handlers[xmlns][handler.name][specific].append(
+ {'func': handler.callback,
+ 'priority': handler.priority,
'specific': specific})
- def unregister_handler(self, name, handler, typ='', ns='', xmlns=None):
+ def unregister_handler(self, handler):
"""
Unregister handler
"""
- if not xmlns:
- xmlns = Namespace.CLIENT
+ xmlns = handler.xmlns or Namespace.CLIENT
- if not typ and not ns:
+ typ = handler.typ
+ if not typ and not handler.ns:
typ = 'default'
- specific = typ + ns
+ specific = typ + handler.ns
try:
- self._handlers[xmlns][name][specific]
+ self._handlers[xmlns][handler.name][specific]
except KeyError:
return
- for handler_dict in self._handlers[xmlns][name][specific]:
- if handler_dict['func'] != handler:
+ for handler_dict in self._handlers[xmlns][handler.name][specific]:
+ if handler_dict['func'] != handler.callback:
return
try:
- self._handlers[xmlns][name][specific].remove(handler_dict)
+ self._handlers[xmlns][handler.name][specific].remove(
+ handler_dict)
except ValueError:
self._log.warning(
'Unregister failed: %s for "%s" type->%s ns->%s(%s)',
- handler, name, typ, ns, xmlns)
+ handler.callback, handler.name, typ, handler.ns, xmlns)
else:
self._log.debug(
'Unregister handler %s for "%s" type->%s ns->%s(%s)',
- handler, name, typ, ns, xmlns)
+ handler.callback, handler.name, typ, handler.ns, xmlns)
def _default_handler(self, stanza):
"""
diff --git a/nbxmpp/smacks.py b/nbxmpp/smacks.py
index 58c0788..d75cb19 100644
--- a/nbxmpp/smacks.py
+++ b/nbxmpp/smacks.py
@@ -22,6 +22,7 @@ from nbxmpp.namespaces import Namespace
from nbxmpp.simplexml import Node
from nbxmpp.const import StreamState
from nbxmpp.util import LogAdapter
+from nbxmpp.structs import StanzaHandler
log = logging.getLogger('nbxmpp.smacks')
@@ -80,14 +81,23 @@ class Smacks:
self._on_failed(None, stanza, None)
def register_handlers(self):
- self._client.register_handler(
- 'enabled', self._on_enabled, xmlns=Namespace.STREAM_MGMT)
- self._client.register_handler(
- 'failed', self._on_failed, xmlns=Namespace.STREAM_MGMT)
- self._client.register_handler(
- 'r', self._send_ack, xmlns=Namespace.STREAM_MGMT)
- self._client.register_handler(
- 'a', self._on_ack, xmlns=Namespace.STREAM_MGMT)
+ handlers = [
+ StanzaHandler(name='enabled',
+ callback=self._on_enabled,
+ xmlns=Namespace.STREAM_MGMT),
+ StanzaHandler(name='failed',
+ callback=self._on_failed,
+ xmlns=Namespace.STREAM_MGMT),
+ StanzaHandler(name='r',
+ callback=self._send_ack,
+ xmlns=Namespace.STREAM_MGMT),
+ StanzaHandler(name='a',
+ callback=self._on_ack,
+ xmlns=Namespace.STREAM_MGMT)
+ ]
+
+ for handler in handlers:
+ self._client.register_handler(handler)
def send_enable(self):
if not self.sm_supported:
diff --git a/test/unit/test_activity.py b/test/unit/test_activity.py
index 95052bb..0e0d656 100644
--- a/test/unit/test_activity.py
+++ b/test/unit/test_activity.py
@@ -46,8 +46,8 @@ class ActivityTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_avatar.py b/test/unit/test_avatar.py
index be12185..a90763b 100644
--- a/test/unit/test_avatar.py
+++ b/test/unit/test_avatar.py
@@ -51,8 +51,8 @@ class AvatarTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_bookmarks.py b/test/unit/test_bookmarks.py
index edfa6f4..b9f423e 100644
--- a/test/unit/test_bookmarks.py
+++ b/test/unit/test_bookmarks.py
@@ -62,9 +62,9 @@ class BookmarkTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
@@ -107,8 +107,8 @@ class BookmarkTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_location.py b/test/unit/test_location.py
index cb9de94..ab46ba1 100644
--- a/test/unit/test_location.py
+++ b/test/unit/test_location.py
@@ -87,8 +87,8 @@ class LocationTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_mood.py b/test/unit/test_mood.py
index 065bddb..7e1cf71 100644
--- a/test/unit/test_mood.py
+++ b/test/unit/test_mood.py
@@ -42,8 +42,8 @@ class MoodTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_pubsub.py b/test/unit/test_pubsub.py
index 6cdca53..ad9b0e8 100644
--- a/test/unit/test_pubsub.py
+++ b/test/unit/test_pubsub.py
@@ -30,10 +30,10 @@ class PubsubTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT,
- priority=16))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT,
+ priority=16))
self.dispatcher.process_data(event)
@@ -60,10 +60,10 @@ class PubsubTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT,
- priority=16))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT,
+ priority=16))
self.dispatcher.process_data(event)
@@ -91,9 +91,9 @@ class PubsubTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT,
- priority=16))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT,
+ priority=16))
self.dispatcher.process_data(event)
diff --git a/test/unit/test_tune.py b/test/unit/test_tune.py
index da573c2..5984266 100644
--- a/test/unit/test_tune.py
+++ b/test/unit/test_tune.py
@@ -53,8 +53,8 @@ class TuneTest(StanzaHandlerTest):
'''
self.dispatcher.register_handler(
- *StanzaHandler(name='message',
- callback=_on_message,
- ns=Namespace.PUBSUB_EVENT))
+ StanzaHandler(name='message',
+ callback=_on_message,
+ ns=Namespace.PUBSUB_EVENT))
self.dispatcher.process_data(event)