diff libervia/backend/plugins/plugin_pubsub_cache.py @ 4356:c9626f46b63e

plugin XEP-0059: Use Pydantic models for RSM.
author Goffi <goffi@goffi.org>
date Fri, 11 Apr 2025 18:19:28 +0200
parents 0d7bb4df2343
children
line wrap: on
line diff
--- a/libervia/backend/plugins/plugin_pubsub_cache.py	Fri Apr 11 18:19:28 2025 +0200
+++ b/libervia/backend/plugins/plugin_pubsub_cache.py	Fri Apr 11 18:19:28 2025 +0200
@@ -18,7 +18,7 @@
 
 import time
 from datetime import datetime
-from typing import Optional, List, Tuple, Dict, Any
+from typing import Optional, List, Tuple, Dict, Any, cast
 from twisted.words.protocols.jabber import jid, error
 from twisted.words.xish import domish
 from twisted.internet import defer
@@ -28,6 +28,7 @@
 from libervia.backend.core import exceptions
 from libervia.backend.core.log import getLogger
 from libervia.backend.core.core_types import SatXMPPEntity
+from libervia.backend.plugins.plugin_xep_0059 import XEP_0059, RSMRequest
 from libervia.backend.tools import xml_tools, utils
 from libervia.backend.tools.common import data_format
 from libervia.backend.memory.sqla import PubsubNode, PubsubItem, SyncState, IntegrityError
@@ -285,8 +286,8 @@
                 )
                 await self.cache_items(client, pubsub_node, items)
             else:
-                rsm_p = self.host.plugins["XEP-0059"]
-                rsm_request = rsm.RSMRequest()
+                rsm_p = cast(XEP_0059, self.host.plugins["XEP-0059"])
+                rsm_request = RSMRequest()
                 cached_ids = set()
                 while True:
                     items, rsm_response = await client.pubsub_client.items(
@@ -314,9 +315,9 @@
                             )
                             rsm_request = None
                             break
-                    rsm_request = rsm_p.get_next_request(rsm_request, rsm_response)
                     if rsm_request is None:
                         break
+                    rsm_request = rsm_p.get_next_request(rsm_request, rsm_response)
 
             await self.host.memory.storage.update_pubsub_node_sync_state(
                 pubsub_node, SyncState.COMPLETED
@@ -656,7 +657,7 @@
                         f"({pubsub_node.sync_state_updated//60} minutes), "
                         "cancelling it and retrying."
                     )
-                    self.in_progress.pop[(service, node)].cancel()
+                    self.in_progress.pop((service, node)).cancel()
                     pubsub_node.sync_state = None
                     await self.host.memory.storage.delete_pubsub_items(pubsub_node)
                 else: