# HG changeset patch # User Goffi # Date 1511106367 -3600 # Node ID 81a45e7886c9facadd68217dcc2aa03d8615a856 # Parent b8ffb7f8056bac674a88a6fa37a068c0d7f6b693 core: added a mechanism to associate short names to namespaces: - new internal registerNamespace can be used by a plugin to associate a short name to a namespace - new NamespacesGet bridge method retrieve those associations diff -r b8ffb7f8056b -r 81a45e7886c9 frontends/src/bridge/dbus_bridge.py --- a/frontends/src/bridge/dbus_bridge.py Sun Nov 19 16:41:59 2017 +0100 +++ b/frontends/src/bridge/dbus_bridge.py Sun Nov 19 16:46:07 2017 +0100 @@ -504,6 +504,20 @@ error_handler = lambda err:errback(dbus_to_bridge_exception(err)) return self.db_core_iface.messageSend(to_jid, message, subject, mess_type, extra, profile_key, timeout=const_TIMEOUT, reply_handler=callback, error_handler=error_handler) + def namespacesGet(self, callback=None, errback=None): + if callback is None: + error_handler = None + else: + if errback is None: + errback = log.error + error_handler = lambda err:errback(dbus_to_bridge_exception(err)) + kwargs={} + if callback is not None: + kwargs['timeout'] = const_TIMEOUT + kwargs['reply_handler'] = callback + kwargs['error_handler'] = error_handler + return self.db_core_iface.namespacesGet(**kwargs) + def paramsRegisterApp(self, xml, security_limit=-1, app='', callback=None, errback=None): if callback is None: error_handler = None diff -r b8ffb7f8056b -r 81a45e7886c9 src/bridge/bridge_constructor/bridge_template.ini --- a/src/bridge/bridge_constructor/bridge_template.ini Sun Nov 19 16:41:59 2017 +0100 +++ b/src/bridge/bridge_constructor/bridge_template.ini Sun Nov 19 16:46:07 2017 +0100 @@ -763,3 +763,11 @@ doc_return=session informations, with at least the following keys: jid: current full jid started: date of creation of the session (Epoch time) + +[namespacesGet] +type=method +category=core +sig_in= +sig_out=a{ss} +doc=Get a dict to short name => whole namespaces +doc_return=namespaces mapping diff -r b8ffb7f8056b -r 81a45e7886c9 src/bridge/dbus_bridge.py --- a/src/bridge/dbus_bridge.py Sun Nov 19 16:41:59 2017 +0100 +++ b/src/bridge/dbus_bridge.py Sun Nov 19 16:46:07 2017 +0100 @@ -384,6 +384,12 @@ return self._callback("messageSend", unicode(to_jid), message, subject, unicode(mess_type), extra, unicode(profile_key), callback=callback, errback=errback) @dbus.service.method(const_INT_PREFIX+const_CORE_SUFFIX, + in_signature='', out_signature='a{ss}', + async_callbacks=None) + def namespacesGet(self, ): + return self._callback("namespacesGet", ) + + @dbus.service.method(const_INT_PREFIX+const_CORE_SUFFIX, in_signature='sis', out_signature='', async_callbacks=None) def paramsRegisterApp(self, xml, security_limit=-1, app=''): diff -r b8ffb7f8056b -r 81a45e7886c9 src/core/sat_main.py --- a/src/core/sat_main.py Sun Nov 19 16:41:59 2017 +0100 +++ b/src/core/sat_main.py Sun Nov 19 16:46:07 2017 +0100 @@ -55,6 +55,7 @@ self.initialised = defer.Deferred() self.profiles = {} self.plugins = {} + self._ns_map = {} # map for short name to whole namespace self.memory = Memory(self) self.trigger = trigger.TriggerManager() # trigger are used to change SàT behaviour @@ -118,6 +119,7 @@ self.bridge.register_method("saveParamsTemplate", self.memory.save_xml) self.bridge.register_method("loadParamsTemplate", self.memory.load_xml) self.bridge.register_method("sessionInfosGet", self.getSessionInfos) + self.bridge.register_method("namespacesGet", self.getNamespaces) self.memory.initialized.addCallback(self._postMemoryInit) @@ -955,6 +957,17 @@ languageSwitch() return help_string + # misc methods + + def registerNamespace(self, short_name, namespace): + """associate a namespace to a short name""" + if short_name in self._ns_map: + raise exceptions.ConflictError(u'this short name is already used') + self._ns_map[short_name] = namespace + + def getNamespaces(self): + return self._ns_map + def getSessionInfos(self, profile_key): """compile interesting data on current profile session""" client = self.getClient(profile_key) diff -r b8ffb7f8056b -r 81a45e7886c9 src/plugins/plugin_misc_tickets.py --- a/src/plugins/plugin_misc_tickets.py Sun Nov 19 16:41:59 2017 +0100 +++ b/src/plugins/plugin_misc_tickets.py Sun Nov 19 16:46:07 2017 +0100 @@ -47,6 +47,7 @@ def __init__(self, host): log.info(_(u"Tickets plugin initialization")) self.host = host + host.registerNamespace('tickets', NS_TICKETS) self._p = self.host.plugins["XEP-0060"] self._s = self.host.plugins["PUBSUB_SCHEMA"] self._m = self.host.plugins["XEP-0277"]