plugin XEP-0059: Use Pydantic models for RSM.

This commit is contained in:
Goffi 2025-04-11 18:19:28 +02:00
commit 174bf8de1a

View file

@ -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.constants import Const as C
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 @@ class PubsubCache:
)
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 @@ class PubsubCache:
)
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 @@ class PubsubCache:
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: