changeset 4349:1bedcc6712e9

plugin XEP-0131: update triggers priority + add headers to MessageDataExtra: - Lower priority is used for triggers so other plugins can add headers before the XML is generated. - Added `headers` to `MessageDataExtra` type. rel 456
author Goffi <goffi@goffi.org>
date Fri, 28 Feb 2025 09:23:35 +0100
parents 35d41de5b2aa
children 6baea959dc33
files libervia/backend/core/core_types.py libervia/backend/memory/disco.py libervia/backend/plugins/plugin_xep_0131.py
diffstat 3 files changed, 14 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/libervia/backend/core/core_types.py	Mon Jan 13 01:23:22 2025 +0100
+++ b/libervia/backend/core/core_types.py	Fri Feb 28 09:23:35 2025 +0100
@@ -18,7 +18,7 @@
 
 from abc import ABC, abstractmethod
 from collections import namedtuple
-from typing import Dict, Callable, Optional
+from typing import Any
 from twisted.internet import defer
 from twisted.python import failure
 from typing_extensions import TypedDict
@@ -42,7 +42,7 @@
 
 # Incomplete types built through observation rather than code inspection.
 MessageDataExtra = TypedDict(
-    "MessageDataExtra", {"encrypted": bool, "origin_id": str}, total=False
+    "MessageDataExtra", {"encrypted": bool, "origin_id": str, "headers": dict[str, Any]}, total=False
 )
 
 
@@ -52,8 +52,8 @@
         "from": t_jid.JID,
         "to": t_jid.JID,
         "uid": str,
-        "message": Dict[str, str],
-        "subject": Dict[str, str],
+        "message": dict[str, str],
+        "subject": dict[str, str],
         "type": str,
         "timestamp": float,
         "extra": MessageDataExtra,
@@ -129,7 +129,7 @@
     def generate_message_xml(
         self,
         data: MessageData,
-        post_xml_treatments: Optional[defer.Deferred] = None,
+        post_xml_treatments: defer.Deferred|None = None,
     ) -> MessageData:
         """Generate <message/> stanza from message data
 
--- a/libervia/backend/memory/disco.py	Mon Jan 13 01:23:22 2025 +0100
+++ b/libervia/backend/memory/disco.py	Fri Feb 28 09:23:35 2025 +0100
@@ -198,7 +198,7 @@
         @param category: identity category
         @param type_: identity type
         @param jid_: jid of the target, or None for profile's server
-        @param node(unicode): optional node to use for disco request
+        @param node: optional node to use for disco request
         @return: True if the entity has the given identity
         """
         disco_infos = await self.get_infos(client, jid_, node)
--- a/libervia/backend/plugins/plugin_xep_0131.py	Mon Jan 13 01:23:22 2025 +0100
+++ b/libervia/backend/plugins/plugin_xep_0131.py	Fri Feb 28 09:23:35 2025 +0100
@@ -151,9 +151,13 @@
         log.info(_("Stanza Headers and Internet Metadata plugin initialization"))
         self.host = host
         host.register_namespace("shim", NS_SHIM)
-        host.trigger.add("sendMessage", self.send_message_trigger)
-        host.trigger.add("sendMessageComponent", self.send_message_trigger)
-        host.trigger.add("message_received", self.message_received_trigger)
+        # We give negative priority, as we want header to be added after normal priority
+        # trigger are called, in case they add their own headers.
+        host.trigger.add("sendMessage", self.send_message_trigger, priority=-50)
+        host.trigger.add("sendMessageComponent", self.send_message_trigger, priority=-50)
+        # We give non defaut priority, has we want header parsing to be done before normal
+        # priority triggers are called.
+        host.trigger.add("message_received", self.message_received_trigger, priority=50)
 
     def quote_value(self, value: str) -> str:
         """Quote a value if it contain special characters
@@ -241,7 +245,7 @@
             pass
         else:
 
-            def post_treat_addr(mess_data: MessageData):
+            def post_treat_addr(mess_data: MessageData) -> MessageData:
                 """Add the headers metadata to the message data"""
                 if headers.keywords:
                     # We move keywords to a list of string in extra's "keywords" field.