[pim/akonadi-e2e-tests] /: Remove the dependency on async in general and asyncio in particular

Kevin Ottens <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 6a659e037e422675c74eb25bdf8e8fc73ebbed4c by Kevin Ottens.
Committed on 17/07/2026 at 10:09.
Pushed by ervin into branch 'master'.

Remove the dependency on async in general and asyncio in particular

We got enough asynchronous behavior in the test suite, so let's move to
everything blocking instead.

M  +13   -13   conftest.py
M  +1    -5    pyproject.toml
M  +16   -18   src/akonadi/dav_resource.py
M  +53   -37   src/akonadi/dbus/client.py
M  +13   -33   src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_control.py
M  +61   -163  src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_manager.py
M  +5    -6    src/akonadi/dbus/interfaces/org_freedesktop_akonadi_controlmanager.py
M  +27   -67   src/akonadi/dbus/interfaces/org_freedesktop_akonadi_resource.py
M  +7    -9    src/akonadi/dbus/interfaces/org_freedesktop_akonadi_server.py
M  +54   -67   src/akonadi/dbus/interfaces/org_kde_akonadi_davgroupware_settings.py
M  +9    -10   src/akonadi/dbus/interfaces/org_kde_akonadi_imap_resource.py
M  +117  -146  src/akonadi/dbus/interfaces/org_kde_akonadi_imap_settings.py
M  +23   -27   src/akonadi/imap_resource.py
M  +5    -5    src/akonadi/resource.py
M  +14   -26   src/dav/dav_server.py
M  +16   -18   src/kwallet/client.py
M  +88   -218  src/kwallet/interfaces/org_kde_kwallet.py
M  +2    -2    tests/dav/test_recurring_event_change.py
M  +8    -17   tests/selftest/test_infra.py
M  +2    -423  uv.lock

https://invent.kde.org/pim/akonadi-e2e-tests/-/commit/6a659e037e422675c74eb25bdf8e8fc73ebbed4c

diff --git a/conftest.py b/conftest.py
index 7d480d4..a4350e8 100644
--- a/conftest.py
+++ b/conftest.py
@@ -5,7 +5,7 @@
 import locale
 import os
 import tempfile
-from collections.abc import AsyncGenerator, Generator
+from collections.abc import Generator
 from pathlib import Path
 from typing import Any
 
@@ -63,7 +63,7 @@ def instance_id() -> Generator[str, Any]:
 
 
 @pytest.fixture(scope="session")
-async def dbus_client(instance_id: str) -> AsyncGenerator[AkonadiDBus]:
+def dbus_client(instance_id: str) -> Generator[AkonadiDBus]:
     """A pytest fixture that creates a new AkonadiDBus client.
 
     Depends on the `instance_id` fixture.
@@ -107,7 +107,7 @@ def qcore_app(_akonadi_env: AkonadiEnv):
 
 
 @pytest.fixture(scope="session", params=list(DAVServerType))
-async def dav_server_session(request: pytest.FixtureRequest) -> AsyncGenerator[DAVServer]:
+def dav_server_session(request: pytest.FixtureRequest) -> Generator[DAVServer]:
     server_type = request.param
     server: DAVServer
     match server_type:
@@ -118,9 +118,9 @@ async def dav_server_session(request: pytest.FixtureRequest) -> AsyncGenerator[D
         case _:
             pytest.fail(f"Unknown DAV server type: {server_type}")
 
-    await server.start()
+    server.start()
     yield server
-    await server.stop()
+    server.stop()
 
 
 @pytest.fixture(scope="session", params=list(ImapServerType))
@@ -167,13 +167,13 @@ def akonadi_client(
 
 
 @pytest.fixture()
-async def imap_resource(
+def imap_resource(
     akonadi_client: AkonadiClient,
     dbus_client: AkonadiDBus,
     imap_server: ImapServer,
-) -> AsyncGenerator[ImapResource]:
+) -> Generator[ImapResource]:
     resource = ImapResource.create(akonadi_client, dbus_client)
-    await resource.configure(
+    resource.configure(
         host=imap_server.host_or_ip,
         port=imap_server.port,
         username=imap_server.username,
@@ -185,7 +185,7 @@ async def imap_resource(
     yield resource
 
     # Remove the resource after the test - this cleans up useless secrets from the keychain
-    await resource.remove()
+    resource.remove()
 
 
 @pytest.fixture()
@@ -224,11 +224,11 @@ def itip_handler() -> Generator[ITIPHandler]:
 
 
 @pytest.fixture()
-async def groupware_resource(
+def groupware_resource(
     akonadi_client: AkonadiClient, dbus_client: AkonadiDBus, dav_server: DAVServer
-) -> AsyncGenerator[DAVResource]:
+) -> Generator[DAVResource]:
     resource = DAVResource.create(akonadi_client, dbus_client)
-    await resource.configure(
+    resource.configure(
         dav_server.base_url, username=dav_server.username, password=dav_server.password
     )
     resource.synchronize()
@@ -236,7 +236,7 @@ async def groupware_resource(
 
     yield resource
 
-    await resource.remove()
+    resource.remove()
 
 
 @pytest.fixture(autouse=True)
diff --git a/pyproject.toml b/pyproject.toml
index 1f5bbe1..fe4b76e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,7 +11,7 @@ requires-python = ">=3.13"
 # Most of those dependencies would normally be in dev-dependencies, but since tests
 # >are< the main usage of this package, we list them here.
 dependencies = [
-    "aiohttp>=3.13.3",
+    "requests>=2.33.1",
     "caldav>=3.1.0",
     "camel-converter>=4.0.1",
     "factory-boy>=3.3.3",
@@ -20,7 +20,6 @@ dependencies = [
     "lxml>=6.0.2",
     "psutil>=7.0.0",
     "pytest>=8.3.5",
-    "pytest-asyncio>=0.26.0",
     "pytest-order>=1.3.0",
     "pytest-xdist>=3.6.1",
     "sdbus>=0.14.0",
@@ -29,9 +28,6 @@ dependencies = [
 ]
 
 [tool.pytest.ini_options]
-asyncio_default_fixture_loop_scope = "session"
-asyncio_default_test_loop_scope = "session"
-asyncio_mode = "auto"
 testpaths = ["tests", "src"]
 addopts = "-v"
 
diff --git a/src/akonadi/dav_resource.py b/src/akonadi/dav_resource.py
index 9cc2064..72015cf 100644
--- a/src/akonadi/dav_resource.py
+++ b/src/akonadi/dav_resource.py
@@ -31,40 +31,38 @@ class DAVResource(Resource):
             f"{self._identifier}_{self.akonadi_client.akonadi_instance_name},$default$"
         )
 
-    async def configure(self, base_url: str, username: str, password: str) -> None:
-        settings = OrgKdeAkonadiDavGroupwareSettingsInterface.new_proxy(
+    def configure(self, base_url: str, username: str, password: str) -> None:
+        settings = OrgKdeAkonadiDavGroupwareSettingsInterface(
             self._dbus.resource_service_name(self._identifier),
             "/Settings",
         )
 
         # The DAV resource doesn't expose means to set password externally, so we instead
         # store it into KWallet ourselves under the name that the resource expects.
-        async with KWalletClient() as kwallet:
-            await kwallet.store_password(self._kwallet_key, password)
-
-        await settings.set_settings_version(3)
-        await settings.set_remote_urls([f"$default$|CalDav|{base_url}"])
-        await settings.set_default_username(username)
-        await settings.set_refresh_interval(-1)
-        await settings.set_display_name(
-            f"akonadi-e2e-test - {self.akonadi_client.akonadi_instance_name}"
-        )
+        with KWalletClient() as kwallet:
+            kwallet.store_password(self._kwallet_key, password)
+
+        settings.set_settings_version(3)
+        settings.set_remote_urls([f"$default$|CalDav|{base_url}"])
+        settings.set_default_username(username)
+        settings.set_refresh_interval(-1)
+        settings.set_display_name(f"akonadi-e2e-test - {self.akonadi_client.akonadi_instance_name}")
 
-        await settings.save()
+        settings.save()
 
         self.instance.reconfigure()
 
         AkonadiUtils.wait_for_status(self, 0)
 
     @override
-    async def remove(self) -> None:
-        await super().remove()
+    def remove(self) -> None:
+        super().remove()
 
-        async with KWalletClient() as kwallet:
-            password_exists = await kwallet.get_password(self._kwallet_key) is not None
+        with KWalletClient() as kwallet:
+            password_exists = kwallet.get_password(self._kwallet_key) is not None
             if password_exists:
                 # Remove the KWallet entry
-                await kwallet.remove_password(
+                kwallet.remove_password(
                     self._kwallet_key,
                 )
 
diff --git a/src/akonadi/dbus/client.py b/src/akonadi/dbus/client.py
index 96a80e1..1e24765 100644
--- a/src/akonadi/dbus/client.py
+++ b/src/akonadi/dbus/client.py
@@ -2,12 +2,13 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import asyncio
-import os
 from logging import getLogger
 
-from sdbus.exceptions import DbusNameHasNoOwnerError
-from sdbus_async.dbus_daemon import FreedesktopDbus
+from sdbus import (
+    DbusInterfaceCommon,
+    DbusUnprivilegedFlag,
+    dbus_method,
+)
 
 from src.akonadi.dbus.interfaces.org_freedesktop_akonadi_agent_control import (
     OrgFreedesktopAkonadiAgentControlInterface,
@@ -24,22 +25,43 @@ from src.akonadi.dbus.interfaces.org_freedesktop_akonadi_resource import (
 from src.akonadi.dbus.interfaces.org_freedesktop_akonadi_server import (
     OrgFreedesktopAkonadiServerInterface,
 )
+from src.test import wait_until
 
 log = getLogger(__name__)
 
 
+class FreedesktopDbus(
+    DbusInterfaceCommon,
+    interface_name="org.freedesktop.DBus",
+):
+    @dbus_method(
+        flags=DbusUnprivilegedFlag,
+        input_signature="s",
+        method_name="NameHasOwner",
+        result_signature="b",
+    )
+    def name_has_owner(
+        self,
+        service_name: str,
+    ) -> bool:
+        raise NotImplementedError
+
+    @dbus_method(
+        flags=DbusUnprivilegedFlag,
+        input_signature="s",
+        method_name="GetNameOwner",
+        result_signature="s",
+    )
+    def get_name_owner(self, service_name: str) -> str:
+        raise NotImplementedError
+
+
 class AkonadiDBus:
     """A high-level client for the Akonadi DBus service."""
 
     def __init__(self, instance_id: str) -> None:
         self._instance_id = instance_id
 
-    async def wait_for_service(self, service_name: str, timeout_secs: float | None = 10) -> None:
-        await asyncio.wait_for(
-            self.name_owner(service_name),
-            timeout=timeout_secs,
-        )
-
     @property
     def akonadi_server_service_name(self) -> str:
         return f"org.freedesktop.Akonadi.{self._instance_id}"
@@ -56,65 +78,59 @@ class AkonadiDBus:
 
     @property
     def control_interface(self) -> OrgFreedesktopAkonadiControlManagerInterface:
-        return OrgFreedesktopAkonadiControlManagerInterface.new_proxy(
+        return OrgFreedesktopAkonadiControlManagerInterface(
             self.akonadi_control_service_name,
             "/ControlManager",
         )
 
     @property
     def server_interface(self) -> OrgFreedesktopAkonadiServerInterface:
-        return OrgFreedesktopAkonadiServerInterface.new_proxy(
+        return OrgFreedesktopAkonadiServerInterface(
             self.akonadi_server_service_name,
             "/Server",
         )
 
     @property
     def agent_manager_interface(self) -> OrgFreedesktopAkonadiAgentManagerInterface:
-        return OrgFreedesktopAkonadiAgentManagerInterface.new_proxy(
+        return OrgFreedesktopAkonadiAgentManagerInterface(
             self.akonadi_control_service_name,
             "/AgentManager",
         )
 
     def agent_interface(self, instance_name: str) -> OrgFreedesktopAkonadiAgentControlInterface:
-        return OrgFreedesktopAkonadiAgentControlInterface.new_proxy(
+        return OrgFreedesktopAkonadiAgentControlInterface(
             self.agent_service_name(instance_name),
             "/",
         )
 
     def resource_interface(self, instance_name: str) -> OrgFreedesktopAkonadiResourceInterface:
-        return OrgFreedesktopAkonadiResourceInterface.new_proxy(
+        return OrgFreedesktopAkonadiResourceInterface(
             self.resource_service_name(instance_name),
             "/",
         )
 
-    async def name_owner(self, service_name: str) -> str:
+    def name_owner(self, service_name: str) -> str:
         log.debug("Waiting for name owner of %s", service_name)
-        dbus = FreedesktopDbus.new_proxy(
+        dbus = FreedesktopDbus(
             "org.freedesktop.DBus",
             "/org/freedesktop/DBus",
         )
 
-        async def name_owner_changed():
-            async for name, _, new_owner in dbus.name_owner_changed.catch():
-                if name == service_name:
-                    log.debug("Name owner changed: %s -> %s", name, new_owner)
-                    return new_owner
-
-        try:
-            resp = await dbus.get_name_owner(service_name)
-        except DbusNameHasNoOwnerError:
-            timeout = None if os.environ.get("AKONADI_DEBUG_WAIT", None) else 10
+        if not dbus.name_has_owner(service_name):
             log.debug("Service %s has no owner, waiting for it...", service_name)
-            return await asyncio.wait_for(name_owner_changed(), timeout=timeout)
+            wait_until(lambda: dbus.name_has_owner(service_name))
+            owner = dbus.get_name_owner(service_name)
+            log.debug("Name owner changed: %s -> %s", service_name, owner)
         else:
-            log.debug("Service %s has owner %s, continuing", service_name, resp)
-            return resp
+            owner = dbus.get_name_owner(service_name)
+            log.debug("Service %s has owner %s, continuing", service_name, owner)
+
+        assert owner is not None
+        return owner
 
-    async def wait_name_owner_changed(self, name_owner: str, service_name: str, timeout=5):
-        async def name_owner_changed() -> None:
-            while True:
-                new_owner = await self.name_owner(service_name)
-                if new_owner != name_owner:
-                    return
+    def wait_name_owner_changed(self, name_owner: str, service_name: str, timeout=5):
+        def name_owner_changed() -> bool:
+            new_owner = self.name_owner(service_name)
+            return new_owner != name_owner
 
-        await asyncio.wait_for(name_owner_changed(), timeout=timeout)
+        wait_until(name_owner_changed, timeout=timeout)
diff --git a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_control.py b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_control.py
index a402c47..93f513e 100644
--- a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_control.py
+++ b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_control.py
@@ -3,79 +3,59 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
-    dbus_signal_async,
+    dbus_method,
 )
 
 
 class OrgFreedesktopAkonadiAgentControlInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.freedesktop.Akonadi.Agent.Control",
 ):
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="quit",
-        result_args_names=(),
     )
-    async def quit(
+    def quit(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="cleanup",
-        result_args_names=(),
     )
-    async def cleanup(
+    def cleanup(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="x",
         flags=DbusUnprivilegedFlag,
         method_name="configure",
-        result_args_names=(),
     )
-    async def configure(
+    def configure(
         self,
         window_id: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="reconfigure",
-        result_args_names=(),
     )
-    async def reconfigure(
+    def reconfigure(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="abort",
-        result_args_names=(),
     )
-    async def abort(
+    def abort(
         self,
     ) -> None:
         raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="configurationDialogAccepted",
-    )
-    def configuration_dialog_accepted(self) -> None:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="configurationDialogRejected",
-    )
-    def configuration_dialog_rejected(self) -> None:
-        raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_manager.py b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_manager.py
index b22e1f7..f02895e 100644
--- a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_manager.py
+++ b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_agent_manager.py
@@ -5,262 +5,255 @@
 from typing import Any
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
-    dbus_signal_async,
+    dbus_method,
 )
 
 
 class OrgFreedesktopAkonadiAgentManagerInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.freedesktop.Akonadi.AgentManager",
 ):
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="agentTypes",
     )
-    async def agent_types(
+    def agent_types(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentName",
     )
-    async def agent_name(
+    def agent_name(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentComment",
     )
-    async def agent_comment(
+    def agent_comment(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentIcon",
     )
-    async def agent_icon(
+    def agent_icon(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="agentMimeTypes",
     )
-    async def agent_mime_types(
+    def agent_mime_types(
         self,
         identifier: str,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="agentCapabilities",
     )
-    async def agent_capabilities(
+    def agent_capabilities(
         self,
         identifier: str,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="a{sv}",
         flags=DbusUnprivilegedFlag,
         method_name="agentCustomProperties",
     )
-    async def agent_custom_properties(
+    def agent_custom_properties(
         self,
         identifier: str,
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="createAgentInstance",
     )
-    async def create_agent_instance(
+    def create_agent_instance(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="removeAgentInstance",
-        result_args_names=(),
     )
-    async def remove_agent_instance(
+    def remove_agent_instance(
         self,
         identifier: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceType",
     )
-    async def agent_instance_type(
+    def agent_instance_type(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstances",
     )
-    async def agent_instances(
+    def agent_instances(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceStatus",
     )
-    async def agent_instance_status(
+    def agent_instance_status(
         self,
         identifier: str,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceStatusMessage",
     )
-    async def agent_instance_status_message(
+    def agent_instance_status_message(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="u",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceProgress",
     )
-    async def agent_instance_progress(
+    def agent_instance_progress(
         self,
         identifier: str,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceProgressMessage",
     )
-    async def agent_instance_progress_message(
+    def agent_instance_progress_message(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="ss",
         flags=DbusUnprivilegedFlag,
         method_name="setAgentInstanceName",
-        result_args_names=(),
     )
-    async def set_agent_instance_name(
+    def set_agent_instance_name(
         self,
         identifier: str,
         name: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceName",
     )
-    async def agent_instance_name(
+    def agent_instance_name(
         self,
         identifier: str,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sx",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceConfigure",
-        result_args_names=(),
     )
-    async def agent_instance_configure(
+    def agent_instance_configure(
         self,
         identifier: str,
         window_id: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceSynchronize",
-        result_args_names=(),
     )
-    async def agent_instance_synchronize(
+    def agent_instance_synchronize(
         self,
         identifier: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceSynchronizeCollectionTree",
-        result_args_names=(),
     )
-    async def agent_instance_synchronize_collection_tree(
+    def agent_instance_synchronize_collection_tree(
         self,
         identifier: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sxb",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceSynchronizeCollection",
-        result_args_names=(),
     )
-    async def agent_instance_synchronize_collection(
+    def agent_instance_synchronize_collection(
         self,
         identifier: str,
         collection: int,
@@ -268,191 +261,96 @@ class OrgFreedesktopAkonadiAgentManagerInterface(
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceSynchronizeTags",
-        result_args_names=(),
     )
-    async def agent_instance_synchronize_tags(
+    def agent_instance_synchronize_tags(
         self,
         identifier: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceOnline",
     )
-    async def agent_instance_online(
+    def agent_instance_online(
         self,
         identifier: str,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sb",
         flags=DbusUnprivilegedFlag,
         method_name="setAgentInstanceOnline",
-        result_args_names=(),
     )
-    async def set_agent_instance_online(
+    def set_agent_instance_online(
         self,
         identifier: str,
         state: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceActivities",
     )
-    async def agent_instance_activities(
+    def agent_instance_activities(
         self,
         identifier: str,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sas",
         flags=DbusUnprivilegedFlag,
         method_name="setAgentInstanceActivities",
-        result_args_names=(),
     )
-    async def set_agent_instance_activities(
+    def set_agent_instance_activities(
         self,
         identifier: str,
         activities: list[str],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="restartAgentInstance",
-        result_args_names=(),
     )
-    async def restart_agent_instance(
+    def restart_agent_instance(
         self,
         identifier: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sb",
         flags=DbusUnprivilegedFlag,
         method_name="setAgentInstanceActivitiesEnabled",
-        result_args_names=(),
     )
-    async def set_agent_instance_activities_enabled(
+    def set_agent_instance_activities_enabled(
         self,
         identifier: str,
         en: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="agentInstanceActivitiesEnabled",
     )
-    async def agent_instance_activities_enabled(
+    def agent_instance_activities_enabled(
         self,
         identifier: str,
     ) -> bool:
         raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("agentType",),
-        signal_name="typeAdded",
-    )
-    def agent_type_added(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("agentType",),
-        signal_name="typeRemoved",
-    )
-    def agent_type_removed(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("agentIdentifier",),
-        signal_name="instanceAdded",
-    )
-    def agent_instance_added(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("agentIdentifier",),
-        signal_name="instanceRemoved",
-    )
-    def agent_instance_removed(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="sis",
-        signal_args_names=("agentIdentifier", "status", "message"),
-        signal_name="statusChanged",
-    )
-    def agent_instance_status_changed(self) -> tuple[str, int, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="sa{sv}",
-        signal_args_names=("agentIdentifier", "status"),
-        signal_name="advancedStatusChanged",
-    )
-    def agent_instance_advanced_status_changed(
-        self,
-    ) -> tuple[str, dict[str, tuple[str, Any]]]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="sus",
-        signal_args_names=("agentIdentifier", "progress", "message"),
-        signal_name="progressChanged",
-    )
-    def agent_instance_progress_changed(self) -> tuple[str, int, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ss",
-        signal_args_names=("agentIdentifier", "name"),
-        signal_name="nameChanged",
-    )
-    def agent_instance_name_changed(self) -> tuple[str, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ss",
-        signal_args_names=("agentIdentifier", "message"),
-        signal_name="warning",
-    )
-    def agent_instance_warning(self) -> tuple[str, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ss",
-        signal_args_names=("agentIdentifier", "message"),
-        signal_name="error",
-    )
-    def agent_instance_error(self) -> tuple[str, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="sb",
-        signal_args_names=("agentIdentifier", "state"),
-        signal_name="onlineChanged",
-    )
-    def agent_instance_online_changed(self) -> tuple[str, bool]:
-        raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_controlmanager.py b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_controlmanager.py
index 8c1bdb8..fdd5ce4 100644
--- a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_controlmanager.py
+++ b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_controlmanager.py
@@ -3,22 +3,21 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
+    dbus_method,
 )
 
 
 class OrgFreedesktopAkonadiControlManagerInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.freedesktop.Akonadi.ControlManager",
 ):
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="shutdown",
-        result_args_names=(),
     )
-    async def shutdown(
+    def shutdown(
         self,
     ) -> None:
         raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_resource.py b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_resource.py
index 50bc2e7..78dfec6 100644
--- a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_resource.py
+++ b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_resource.py
@@ -3,177 +3,137 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
-    dbus_signal_async,
+    dbus_method,
 )
 
 
 class OrgFreedesktopAkonadiResourceInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.freedesktop.Akonadi.Resource",
 ):
-    @dbus_method_async(
+    @dbus_method(
         input_signature="axaay",
         flags=DbusUnprivilegedFlag,
         method_name="requestItemDelivery",
-        result_args_names=(),
     )
-    async def request_item_delivery(
+    def request_item_delivery(
         self,
         uids: list[int],
         parts: list[bytes],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="synchronize",
-        result_args_names=(),
     )
-    async def synchronize(
+    def synchronize(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="synchronizeCollectionTree",
-        result_args_names=(),
     )
-    async def synchronize_collection_tree(
+    def synchronize_collection_tree(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="xb",
         flags=DbusUnprivilegedFlag,
         method_name="synchronizeCollection",
-        result_args_names=(),
     )
-    async def synchronize_collection(
+    def synchronize_collection(
         self,
         collection_id: int,
         recursive: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="x",
         flags=DbusUnprivilegedFlag,
         method_name="synchronizeCollectionAttributes",
-        result_args_names=(),
     )
-    async def synchronize_collection_attributes(
+    def synchronize_collection_attributes(
         self,
         collection_id: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="synchronizeTags",
-        result_args_names=(),
     )
-    async def synchronize_tags(
+    def synchronize_tags(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setName",
-        result_args_names=(),
     )
-    async def set_name(
+    def set_name(
         self,
         name: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="name",
     )
-    async def name(
+    def name(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="setActivities",
-        result_args_names=(),
     )
-    async def set_activities(
+    def set_activities(
         self,
         name: list[str],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="activities",
     )
-    async def activities(
+    def activities(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setActivitiesEnabled",
-        result_args_names=(),
     )
-    async def set_activities_enabled(
+    def set_activities_enabled(
         self,
         en: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="activitiesEnabled",
     )
-    async def activities_enabled(
+    def activities_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("name",),
-        signal_name="nameChanged",
-    )
-    def name_changed(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="synchronized",
-    )
-    def synchronized(self) -> None:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="x",
-        signal_args_names=("collectionId",),
-        signal_name="attributesSynchronized",
-    )
-    def attributes_synchronized(self) -> int:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="collectionTreeSynchronized",
-    )
-    def collection_tree_synchronized(self) -> None:
-        raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_server.py b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_server.py
index d18b203..c7a9065 100644
--- a/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_server.py
+++ b/src/akonadi/dbus/interfaces/org_freedesktop_akonadi_server.py
@@ -3,33 +3,31 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
+    dbus_method,
 )
 
 
 class OrgFreedesktopAkonadiServerInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.freedesktop.Akonadi.Server",
 ):
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="quit",
-        result_args_names=(),
     )
-    async def quit(
+    def quit(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="serverPath",
-        result_args_names=("path",),
     )
-    async def server_path(
+    def server_path(
         self,
     ) -> str:
         raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_kde_akonadi_davgroupware_settings.py b/src/akonadi/dbus/interfaces/org_kde_akonadi_davgroupware_settings.py
index 2da46ab..994da89 100644
--- a/src/akonadi/dbus/interfaces/org_kde_akonadi_davgroupware_settings.py
+++ b/src/akonadi/dbus/interfaces/org_kde_akonadi_davgroupware_settings.py
@@ -4,7 +4,7 @@
 
 # Generated using `sdbus` with some manual edits.
 # ```
-# python3 -m sdbus gen-from-connection \
+# python3 -m sdbus gen-from-connection --block \
 #   org.freedesktop.Akonadi.Agent.akonadi_davgroupware_resource_0 \
 #   /Settings
 # ```
@@ -12,285 +12,272 @@
 from __future__ import annotations
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
+    dbus_method,
 )
 
 
 class OrgKdeAkonadiDavGroupwareSettingsInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.kde.Akonadi.davGroupware.Settings",
 ):
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="save",
-        result_args_names=(),
     )
-    async def save(
+    def save(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="settingsVersion",
     )
-    async def settings_version(
+    def settings_version(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setSettingsVersion",
-        result_args_names=(),
     )
-    async def set_settings_version(
+    def set_settings_version(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="displayName",
     )
-    async def display_name(
+    def display_name(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setDisplayName",
-        result_args_names=(),
     )
-    async def set_display_name(
+    def set_display_name(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="refreshInterval",
     )
-    async def refresh_interval(
+    def refresh_interval(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setRefreshInterval",
-        result_args_names=(),
     )
-    async def set_refresh_interval(
+    def set_refresh_interval(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="remoteUrls",
     )
-    async def remote_urls(
+    def remote_urls(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="setRemoteUrls",
-        result_args_names=(),
     )
-    async def set_remote_urls(
+    def set_remote_urls(
         self,
         arg_0: list[str],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="defaultUsername",
     )
-    async def default_username(
+    def default_username(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setDefaultUsername",
-        result_args_names=(),
     )
-    async def set_default_username(
+    def set_default_username(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="limitSyncRange",
     )
-    async def limit_sync_range(
+    def limit_sync_range(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setLimitSyncRange",
-        result_args_names=(),
     )
-    async def set_limit_sync_range(
+    def set_limit_sync_range(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="syncRangeStartNumber",
     )
-    async def sync_range_start_number(
+    def sync_range_start_number(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSyncRangeStartNumber",
-        result_args_names=(),
     )
-    async def set_sync_range_start_number(
+    def set_sync_range_start_number(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="syncRangeStartType",
     )
-    async def sync_range_start_type(
+    def sync_range_start_type(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSyncRangeStartType",
-        result_args_names=(),
     )
-    async def set_sync_range_start_type(
+    def set_sync_range_start_type(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="collectionsUrlsMappings",
     )
-    async def collections_urls_mappings(
+    def collections_urls_mappings(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setCollectionsUrlsMappings",
-        result_args_names=(),
     )
-    async def set_collections_urls_mappings(
+    def set_collections_urls_mappings(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="readOnly",
     )
-    async def read_only(
+    def read_only(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setReadOnly",
-        result_args_names=(),
     )
-    async def set_read_only(
+    def set_read_only(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="u",
         flags=DbusUnprivilegedFlag,
         method_name="accountId",
     )
-    async def account_id(
+    def account_id(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="u",
         flags=DbusUnprivilegedFlag,
         method_name="setAccountId",
-        result_args_names=(),
     )
-    async def set_account_id(
+    def set_account_id(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="accountServices",
     )
-    async def account_services(
+    def account_services(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="setAccountServices",
-        result_args_names=(),
     )
-    async def set_account_services(
+    def set_account_services(
         self,
         arg_0: list[str],
     ) -> None:
diff --git a/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_resource.py b/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_resource.py
index 88a4a0e..59246ab 100644
--- a/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_resource.py
+++ b/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_resource.py
@@ -3,46 +3,45 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
+    dbus_method,
 )
 
 
 class OrgKdeAkonadiImapResourceBaseInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.kde.Akonadi.ImapResourceBase",
 ):
-    @dbus_method_async(
+    @dbus_method(
         input_signature="x",
         flags=DbusUnprivilegedFlag,
         method_name="requestManualExpunge",
-        result_args_names=(),
     )
-    async def request_manual_expunge(
+    def request_manual_expunge(
         self,
         collection_id: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="x",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="configureSubscription",
     )
-    async def configure_subscription(
+    def configure_subscription(
         self,
         window_id: int,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="serverCapabilities",
     )
-    async def server_capabilities(
+    def server_capabilities(
         self,
     ) -> list[str]:
         raise NotImplementedError
diff --git a/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_settings.py b/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_settings.py
index 2df9aee..b12181b 100644
--- a/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_settings.py
+++ b/src/akonadi/dbus/interfaces/org_kde_akonadi_imap_settings.py
@@ -3,637 +3,608 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 from sdbus import (
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
+    dbus_method,
 )
 
 
 class OrgKdeAkonadiImapSettingsInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.kde.Akonadi.Imap.Settings",
 ):
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="save",
-        result_args_names=(),
     )
-    async def save(
+    def save(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="imapServer",
     )
-    async def imap_server(
+    def imap_server(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setImapServer",
-        result_args_names=(),
     )
-    async def set_imap_server(
+    def set_imap_server(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="imapPort",
     )
-    async def imap_port(
+    def imap_port(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setImapPort",
-        result_args_names=(),
     )
-    async def set_imap_port(
+    def set_imap_port(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="userName",
     )
-    async def user_name(
+    def user_name(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setUserName",
-        result_args_names=(),
     )
-    async def set_user_name(
+    def set_user_name(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="safety",
     )
-    async def safety(
+    def safety(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSafety",
-        result_args_names=(),
     )
-    async def set_safety(
+    def set_safety(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="overrideEncryption",
     )
-    async def override_encryption(
+    def override_encryption(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setOverrideEncryption",
-        result_args_names=(),
     )
-    async def set_override_encryption(
+    def set_override_encryption(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="authentication",
     )
-    async def authentication(
+    def authentication(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setAuthentication",
-        result_args_names=(),
     )
-    async def set_authentication(
+    def set_authentication(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="subscriptionEnabled",
     )
-    async def subscription_enabled(
+    def subscription_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setSubscriptionEnabled",
-        result_args_names=(),
     )
-    async def set_subscription_enabled(
+    def set_subscription_enabled(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="sessionTimeout",
     )
-    async def session_timeout(
+    def session_timeout(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setSessionTimeout",
-        result_args_names=(),
     )
-    async def set_session_timeout(
+    def set_session_timeout(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="useProxy",
     )
-    async def use_proxy(
+    def use_proxy(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setUseProxy",
-        result_args_names=(),
     )
-    async def set_use_proxy(
+    def set_use_proxy(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="disconnectedModeEnabled",
     )
-    async def disconnected_mode_enabled(
+    def disconnected_mode_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setDisconnectedModeEnabled",
-        result_args_names=(),
     )
-    async def set_disconnected_mode_enabled(
+    def set_disconnected_mode_enabled(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="intervalCheckEnabled",
     )
-    async def interval_check_enabled(
+    def interval_check_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setIntervalCheckEnabled",
-        result_args_names=(),
     )
-    async def set_interval_check_enabled(
+    def set_interval_check_enabled(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="intervalCheckTime",
     )
-    async def interval_check_time(
+    def interval_check_time(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setIntervalCheckTime",
-        result_args_names=(),
     )
-    async def set_interval_check_time(
+    def set_interval_check_time(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="retrieveMetadataOnFolderListing",
     )
-    async def retrieve_metadata_on_folder_listing(
+    def retrieve_metadata_on_folder_listing(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setRetrieveMetadataOnFolderListing",
-        result_args_names=(),
     )
-    async def set_retrieve_metadata_on_folder_listing(
+    def set_retrieve_metadata_on_folder_listing(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="automaticExpungeEnabled",
     )
-    async def automatic_expunge_enabled(
+    def automatic_expunge_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setAutomaticExpungeEnabled",
-        result_args_names=(),
     )
-    async def set_automatic_expunge_enabled(
+    def set_automatic_expunge_enabled(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="x",
         flags=DbusUnprivilegedFlag,
         method_name="trashCollection",
     )
-    async def trash_collection(
+    def trash_collection(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="x",
         flags=DbusUnprivilegedFlag,
         method_name="setTrashCollection",
-        result_args_names=(),
     )
-    async def set_trash_collection(
+    def set_trash_collection(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="trashCollectionMigrated",
     )
-    async def trash_collection_migrated(
+    def trash_collection_migrated(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setTrashCollectionMigrated",
-        result_args_names=(),
     )
-    async def set_trash_collection_migrated(
+    def set_trash_collection_migrated(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="useDefaultIdentity",
     )
-    async def use_default_identity(
+    def use_default_identity(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setUseDefaultIdentity",
-        result_args_names=(),
     )
-    async def set_use_default_identity(
+    def set_use_default_identity(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="accountIdentity",
     )
-    async def account_identity(
+    def account_identity(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setAccountIdentity",
-        result_args_names=(),
     )
-    async def set_account_identity(
+    def set_account_identity(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="knownMailBoxes",
     )
-    async def known_mail_boxes(
+    def known_mail_boxes(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="setKnownMailBoxes",
-        result_args_names=(),
     )
-    async def set_known_mail_boxes(
+    def set_known_mail_boxes(
         self,
         arg_0: list[str],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="idleRidPath",
     )
-    async def idle_rid_path(
+    def idle_rid_path(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="setIdleRidPath",
-        result_args_names=(),
     )
-    async def set_idle_rid_path(
+    def set_idle_rid_path(
         self,
         arg_0: list[str],
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="sieveSupport",
     )
-    async def sieve_support(
+    def sieve_support(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveSupport",
-        result_args_names=(),
     )
-    async def set_sieve_support(
+    def set_sieve_support(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="sieveReuseConfig",
     )
-    async def sieve_reuse_config(
+    def sieve_reuse_config(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveReuseConfig",
-        result_args_names=(),
     )
-    async def set_sieve_reuse_config(
+    def set_sieve_reuse_config(
         self,
         arg_0: bool,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="sievePort",
     )
-    async def sieve_port(
+    def sieve_port(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setSievePort",
-        result_args_names=(),
     )
-    async def set_sieve_port(
+    def set_sieve_port(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="sieveAlternateUrl",
     )
-    async def sieve_alternate_url(
+    def sieve_alternate_url(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveAlternateUrl",
-        result_args_names=(),
     )
-    async def set_sieve_alternate_url(
+    def set_sieve_alternate_url(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="alternateAuthentication",
     )
-    async def alternate_authentication(
+    def alternate_authentication(
         self,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="setAlternateAuthentication",
-        result_args_names=(),
     )
-    async def set_alternate_authentication(
+    def set_alternate_authentication(
         self,
         arg_0: int,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="sieveVacationFilename",
     )
-    async def sieve_vacation_filename(
+    def sieve_vacation_filename(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveVacationFilename",
-        result_args_names=(),
     )
-    async def set_sieve_vacation_filename(
+    def set_sieve_vacation_filename(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="sieveCustomUsername",
     )
-    async def sieve_custom_username(
+    def sieve_custom_username(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveCustomUsername",
-        result_args_names=(),
     )
-    async def set_sieve_custom_username(
+    def set_sieve_custom_username(
         self,
         arg_0: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="sieveCustomAuthentification",
     )
-    async def sieve_custom_authentification(
+    def sieve_custom_authentification(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="setSieveCustomAuthentification",
-        result_args_names=(),
     )
-    async def set_sieve_custom_authentification(
+    def set_sieve_custom_authentification(
         self,
         arg_0: str,
     ) -> None:
diff --git a/src/akonadi/imap_resource.py b/src/akonadi/imap_resource.py
index 4cc32cd..ccae1ee 100644
--- a/src/akonadi/imap_resource.py
+++ b/src/akonadi/imap_resource.py
@@ -7,7 +7,7 @@ from typing import override
 
 import pytest
 from AkonadiCore import Akonadi  # type: ignore
-from sdbus import DbusInterfaceCommonAsync, DbusUnprivilegedFlag, dbus_method_async
+from sdbus import DbusInterfaceCommon, DbusUnprivilegedFlag, dbus_method
 
 from src.akonadi.client import AkonadiClient
 from src.akonadi.dbus.client import AkonadiDBus
@@ -24,15 +24,13 @@ from src.kwallet.client import KWalletClient
 log = getLogger(__name__)
 
 
-class WalletIface(DbusInterfaceCommonAsync, interface_name="org.kde.Akonadi.Imap.Wallet"):
-    @dbus_method_async(
+class WalletIface(DbusInterfaceCommon, interface_name="org.kde.Akonadi.Imap.Wallet"):
+    @dbus_method(
         input_signature="s",
-        result_signature="",
-        result_args_names="password",
         flags=DbusUnprivilegedFlag,
         method_name="setPassword",
     )
-    async def set_password(self, password: str) -> None:
+    def set_password(self, password: str) -> None:
         pass
 
 
@@ -43,49 +41,47 @@ class ImapResource(Resource):
         super().__init__(akonadi_client, dbus, identifier)
         self._kwallet_key = f"{self._identifier}_{self.akonadi_client.akonadi_instance_name}rc"
 
-    async def configure(
-        self, host: str, port: int, username: str, password: str, delim: str
-    ) -> None:
+    def configure(self, host: str, port: int, username: str, password: str, delim: str) -> None:
         self.delimiter = delim
-        settings = OrgKdeAkonadiImapSettingsInterface.new_proxy(
+        settings = OrgKdeAkonadiImapSettingsInterface(
             self._dbus.resource_service_name(self._identifier),
             "/Settings",
         )
 
-        await settings.set_imap_server(host)
-        await settings.set_imap_port(port)
-        await settings.set_safety("PLAIN")
-        await settings.set_authentication(1)
-        await settings.set_user_name(username)
-        await settings.set_interval_check_enabled(False)
+        settings.set_imap_server(host)
+        settings.set_imap_port(port)
+        settings.set_safety("PLAIN")
+        settings.set_authentication(1)
+        settings.set_user_name(username)
+        settings.set_interval_check_enabled(False)
 
-        wallet = WalletIface.new_proxy(
+        wallet = WalletIface(
             self._dbus.resource_service_name(self._identifier),
             "/Settings",
         )
-        await wallet.set_password(password)
+        wallet.set_password(password)
 
-        await settings.save()
+        settings.save()
 
         self.instance.reconfigure()
 
         AkonadiUtils.wait_for_status(self, 0)
 
-    async def call_capabilities(self) -> list[str]:
-        dbus_proxy = OrgKdeAkonadiImapResourceBaseInterface.new_proxy(
+    def call_capabilities(self) -> list[str]:
+        dbus_proxy = OrgKdeAkonadiImapResourceBaseInterface(
             self._dbus.agent_service_name(self._identifier), "/"
         )
-        capabilities = await dbus_proxy.server_capabilities()
+        capabilities = dbus_proxy.server_capabilities()
         return capabilities
 
     @override
-    async def remove(self) -> None:
-        await super().remove()
+    def remove(self) -> None:
+        super().remove()
 
-        async with KWalletClient("imap") as kwallet:
-            password_exists = await kwallet.get_password(self._kwallet_key) is not None
+        with KWalletClient("imap") as kwallet:
+            password_exists = kwallet.get_password(self._kwallet_key) is not None
             if password_exists:
-                await kwallet.remove_password(self._kwallet_key)
+                kwallet.remove_password(self._kwallet_key)
 
     @override
     def resolve_collection(self, collection_name: str) -> Akonadi.Collection:
diff --git a/src/akonadi/resource.py b/src/akonadi/resource.py
index 5ac2224..42c027b 100644
--- a/src/akonadi/resource.py
+++ b/src/akonadi/resource.py
@@ -53,15 +53,15 @@ class Resource(ABC):
     def instance(self) -> Akonadi.AgentInstance:
         return Akonadi.AgentManager.self().instance(self._identifier)
 
-    async def restart(self):
-        name_owner = await self._dbus.name_owner(self._dbus.resource_service_name(self._identifier))
-        await self._dbus.agent_manager_interface.restart_agent_instance(self._identifier)
-        await self._dbus.wait_name_owner_changed(
+    def restart(self):
+        name_owner = self._dbus.name_owner(self._dbus.resource_service_name(self._identifier))
+        self._dbus.agent_manager_interface.restart_agent_instance(self._identifier)
+        self._dbus.wait_name_owner_changed(
             name_owner, self._dbus.resource_service_name(self._identifier)
         )
         self.wait_resource_is_idle()
 
-    async def remove(self) -> None:
+    def remove(self) -> None:
         log.debug("Removing %s resource via Agent Manager", self.identifier)
 
         Akonadi.AgentManager.self().removeInstance(self.instance)
diff --git a/src/dav/dav_server.py b/src/dav/dav_server.py
index 1a6fc6c..e66e52a 100644
--- a/src/dav/dav_server.py
+++ b/src/dav/dav_server.py
@@ -3,7 +3,6 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 import abc
-import asyncio
 import uuid
 from abc import abstractmethod
 from enum import Enum
@@ -11,10 +10,12 @@ from functools import cached_property
 from logging import getLogger
 from typing import ClassVar
 
-import aiohttp
+import requests
 from caldav.davclient import get_davclient
 from testcontainers.core.container import DockerContainer  # type: ignore
 
+from src.test import wait_until
+
 log = getLogger(__name__)
 
 
@@ -33,7 +34,7 @@ class DAVServer(abc.ABC):
     def __init__(self):
         self.container = None
 
-    async def start(self) -> None:
+    def start(self) -> None:
         log.info(f"Starting {self.__class__.__name__} DAV container")
         # FIXME: This assumes image already exists!
         self.container = (
@@ -44,9 +45,9 @@ class DAVServer(abc.ABC):
         )
         self.container.start()
 
-        await self.wait_for_server(self.readiness_url)
+        self.wait_for_server(self.readiness_url)
 
-    async def stop(self) -> None:
+    def stop(self) -> None:
         log.info(f"Stopping {self.__class__.__name__} container")
         if self.container:
             self.container.stop()
@@ -75,30 +76,17 @@ class DAVServer(abc.ABC):
     def password(self) -> str:
         return self.PASSWORD
 
-    async def wait_for_server(self, url: str):
-        deadline = asyncio.get_event_loop().time() + 20
-
-        while True:
-            if asyncio.get_event_loop().time() > deadline:
-                raise TimeoutError(f"DAV server not responding at {url}")
-
+    def wait_for_server(self, url: str):
+        def server_is_ready():
             try:
-                async with (
-                    aiohttp.ClientSession(
-                        auth=aiohttp.BasicAuth(self.username, self.password)
-                    ) as session,
-                    session.request(
-                        "PROPFIND",
-                        url,
-                        headers={"Depth": "0"},
-                    ) as resp,
-                ):
-                    if resp.status == 207:
-                        return
+                resp = requests.request(
+                    "PROPFIND", url, auth=(self.username, self.password), headers={"Depth": "0"}
+                )
+                return resp.status_code == 207
             except Exception:
-                pass
+                return False
 
-            await asyncio.sleep(0.2)
+        wait_until(server_is_ready)
 
     def cleanup_test_environment(self):
         dav_client = get_davclient(
diff --git a/src/kwallet/client.py b/src/kwallet/client.py
index 8afa934..ef29f2e 100644
--- a/src/kwallet/client.py
+++ b/src/kwallet/client.py
@@ -17,64 +17,62 @@ class KWalletClient:
 
     def __init__(self, service_name: str = "Passwords") -> None:
         self.SERVICE_NAME = service_name
-        self._wallet = OrgKdeKWalletInterface.new_proxy(
+        self._wallet = OrgKdeKWalletInterface(
             self.KWALLET_SERVICE_NAME,
             self.KWALLET_SERVICE_OBJECT_PATH,
         )
         self._handle: int | None = None
 
-    async def open(self) -> None:
-        wallet_name = await self._wallet.network_wallet()
+    def open(self) -> None:
+        wallet_name = self._wallet.network_wallet()
         log.debug("Opening KWallet %s", wallet_name)
-        self._handle = await self._wallet.open(wallet_name, 0, self.SERVICE_NAME)
+        self._handle = self._wallet.open(wallet_name, 0, self.SERVICE_NAME)
 
-    async def close(self) -> None:
+    def close(self) -> None:
         if self._handle is None:
             return
         log.debug("Closing KWallet %s", self._handle)
-        await self._wallet.close_handle(self._handle, force=False, appid=self.SERVICE_NAME)
+        self._wallet.close_handle(self._handle, force=False, appid=self.SERVICE_NAME)
         self._handle = None
 
-    async def store_password(self, name: str, password: str) -> None:
+    def store_password(self, name: str, password: str) -> None:
         if self._handle is None:
             raise RuntimeError("Wallet not open")
 
         log.debug("Storing password '%s' in KWallet", name)
-        await self._wallet.write_password(
+        self._wallet.write_password(
             self._handle, self.SERVICE_NAME, name, password, self.SERVICE_NAME
         )
 
-    async def get_password(self, name: str) -> str | None:
+    def get_password(self, name: str) -> str | None:
         if self._handle is None:
             raise RuntimeError("Wallet not open")
 
         log.debug("Getting password '%s' from KWallet", name)
         try:
-            return await self._wallet.read_password(
+            return self._wallet.read_password(
                 self._handle, self.SERVICE_NAME, name, self.SERVICE_NAME
             )
         except Exception as e:
             log.warning("Password '%s' not found in KWallet: %s", name, e)
             return None
 
-    async def remove_password(self, name: str) -> None:
+    def remove_password(self, name: str) -> None:
         if self._handle is None:
             raise RuntimeError("Wallet not open")
 
         log.debug("Removing password '%s' from KWallet", name)
-        result = await self._wallet.remove_entry(
-            self._handle, self.SERVICE_NAME, name, self.SERVICE_NAME
-        )
+        result = self._wallet.remove_entry(self._handle, self.SERVICE_NAME, name, self.SERVICE_NAME)
         log.debug("Remove entry result: %s", result)
 
-    async def __aenter__(self) -> "KWalletClient":
-        await self.open()
+    def __enter__(self) -> "KWalletClient":
+        self.open()
         return self
 
-    async def __aexit__(
+    def __exit__(
         self,
         exc_type: type[BaseException] | None,
         exc_value: BaseException | None,
         traceback: TracebackType | None,
     ) -> None:
-        await self.close()
+        self.close()
diff --git a/src/kwallet/interfaces/org_kde_kwallet.py b/src/kwallet/interfaces/org_kde_kwallet.py
index c565b08..8574cd5 100644
--- a/src/kwallet/interfaces/org_kde_kwallet.py
+++ b/src/kwallet/interfaces/org_kde_kwallet.py
@@ -5,7 +5,7 @@
 
 # Generated using `sdbus` with some manual edits.
 # ```
-# python3 -m sdbus gen-from-connection org.kde.KWallet /modules/kwalletd6
+# python3 -m sdbus gen-from-connection --block org.kde.KWallet /modules/kwalletd6
 # ```
 
 from __future__ import annotations
@@ -14,34 +14,33 @@ from typing import Any
 
 from sdbus import (
     DbusDeprecatedFlag,
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     DbusUnprivilegedFlag,
-    dbus_method_async,
-    dbus_signal_async,
+    dbus_method,
 )
 
 
 class OrgKdeKWalletInterface(
-    DbusInterfaceCommonAsync,
+    DbusInterfaceCommon,
     interface_name="org.kde.KWallet",
 ):
-    @dbus_method_async(
+    @dbus_method(
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="isEnabled",
     )
-    async def is_enabled(
+    def is_enabled(
         self,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sxs",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="open",
     )
-    async def open(
+    def open(
         self,
         wallet: str,
         w_id: int,
@@ -49,13 +48,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sxs",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="openPath",
     )
-    async def open_path(
+    def open_path(
         self,
         path: str,
         w_id: int,
@@ -63,56 +62,26 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
-        input_signature="sxsb",
-        result_signature="i",
-        flags=DbusUnprivilegedFlag,
-        method_name="openAsync",
-    )
-    async def open_async(
-        self,
-        wallet: str,
-        w_id: int,
-        appid: str,
-        handle_session: bool,
-    ) -> int:
-        raise NotImplementedError
-
-    @dbus_method_async(
-        input_signature="sxsb",
-        result_signature="i",
-        flags=DbusUnprivilegedFlag,
-        method_name="openPathAsync",
-    )
-    async def open_path_async(
-        self,
-        path: str,
-        w_id: int,
-        appid: str,
-        handle_session: bool,
-    ) -> int:
-        raise NotImplementedError
-
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sb",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="close",
     )
-    async def close(
+    def close(
         self,
         wallet: str,
         force: bool,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="ibs",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="close",
     )
-    async def close_handle(
+    def close_handle(
         self,
         handle: int,
         force: bool,
@@ -120,74 +89,72 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="is",
         flags=DbusUnprivilegedFlag,
         method_name="sync",
-        result_args_names=(),
     )
-    async def sync(
+    def sync(
         self,
         handle: int,
         appid: str,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="deleteWallet",
     )
-    async def delete_wallet(
+    def delete_wallet(
         self,
         wallet: str,
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="isOpen",
     )
-    async def is_open(
+    def is_open(
         self,
         wallet: str,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="i",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="isOpen",
     )
-    async def is_handle_open(
+    def is_handle_open(
         self,
         handle: int,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="s",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="users",
     )
-    async def users(
+    def users(
         self,
         wallet: str,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sxs",
         flags=DbusUnprivilegedFlag,
         method_name="changePassword",
-        result_args_names=(),
     )
-    async def change_password(
+    def change_password(
         self,
         wallet: str,
         w_id: int,
@@ -195,36 +162,36 @@ class OrgKdeKWalletInterface(
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="wallets",
     )
-    async def wallets(
+    def wallets(
         self,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="is",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="folderList",
     )
-    async def folder_list(
+    def folder_list(
         self,
         handle: int,
         appid: str,
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="hasFolder",
     )
-    async def has_folder(
+    def has_folder(
         self,
         handle: int,
         folder: str,
@@ -232,13 +199,13 @@ class OrgKdeKWalletInterface(
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="createFolder",
     )
-    async def create_folder(
+    def create_folder(
         self,
         handle: int,
         folder: str,
@@ -246,13 +213,13 @@ class OrgKdeKWalletInterface(
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="removeFolder",
     )
-    async def remove_folder(
+    def remove_folder(
         self,
         handle: int,
         folder: str,
@@ -260,13 +227,13 @@ class OrgKdeKWalletInterface(
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="as",
         flags=DbusUnprivilegedFlag,
         method_name="entryList",
     )
-    async def entry_list(
+    def entry_list(
         self,
         handle: int,
         folder: str,
@@ -274,13 +241,13 @@ class OrgKdeKWalletInterface(
     ) -> list[str]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="ay",
         flags=DbusUnprivilegedFlag,
         method_name="readEntry",
     )
-    async def read_entry(
+    def read_entry(
         self,
         handle: int,
         folder: str,
@@ -289,13 +256,13 @@ class OrgKdeKWalletInterface(
     ) -> bytes:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="ay",
         flags=DbusUnprivilegedFlag,
         method_name="readMap",
     )
-    async def read_map(
+    def read_map(
         self,
         handle: int,
         folder: str,
@@ -304,13 +271,13 @@ class OrgKdeKWalletInterface(
     ) -> bytes:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="readPassword",
     )
-    async def read_password(
+    def read_password(
         self,
         handle: int,
         folder: str,
@@ -319,13 +286,13 @@ class OrgKdeKWalletInterface(
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="a{sv}",
         flags=DbusDeprecatedFlag | DbusUnprivilegedFlag,
         method_name="readEntryList",
     )
-    async def read_entry_list(
+    def read_entry_list(
         self,
         handle: int,
         folder: str,
@@ -334,13 +301,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="a{sv}",
         flags=DbusUnprivilegedFlag,
         method_name="entriesList",
     )
-    async def entries_list(
+    def entries_list(
         self,
         handle: int,
         folder: str,
@@ -348,13 +315,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="a{sv}",
         flags=DbusDeprecatedFlag | DbusUnprivilegedFlag,
         method_name="readMapList",
     )
-    async def read_map_list(
+    def read_map_list(
         self,
         handle: int,
         folder: str,
@@ -363,13 +330,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="a{sv}",
         flags=DbusUnprivilegedFlag,
         method_name="mapList",
     )
-    async def map_list(
+    def map_list(
         self,
         handle: int,
         folder: str,
@@ -377,13 +344,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="a{sv}",
         flags=DbusDeprecatedFlag | DbusUnprivilegedFlag,
         method_name="readPasswordList",
     )
-    async def read_password_list(
+    def read_password_list(
         self,
         handle: int,
         folder: str,
@@ -392,13 +359,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="iss",
         result_signature="a{sv}",
         flags=DbusUnprivilegedFlag,
         method_name="passwordList",
     )
-    async def password_list(
+    def password_list(
         self,
         handle: int,
         folder: str,
@@ -406,13 +373,13 @@ class OrgKdeKWalletInterface(
     ) -> dict[str, tuple[str, Any]]:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="issss",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="renameEntry",
     )
-    async def rename_entry(
+    def rename_entry(
         self,
         handle: int,
         folder: str,
@@ -422,13 +389,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="issayis",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="writeEntry",
     )
-    async def write_entry_with_type(
+    def write_entry_with_type(
         self,
         handle: int,
         folder: str,
@@ -439,13 +406,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="issays",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="writeEntry",
     )
-    async def write_entry(
+    def write_entry(
         self,
         handle: int,
         folder: str,
@@ -455,13 +422,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="issays",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="writeMap",
     )
-    async def write_map(
+    def write_map(
         self,
         handle: int,
         folder: str,
@@ -471,13 +438,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="issss",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="writePassword",
     )
-    async def write_password(
+    def write_password(
         self,
         handle: int,
         folder: str,
@@ -487,13 +454,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="hasEntry",
     )
-    async def has_entry(
+    def has_entry(
         self,
         handle: int,
         folder: str,
@@ -502,13 +469,13 @@ class OrgKdeKWalletInterface(
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="entryType",
     )
-    async def entry_type(
+    def entry_type(
         self,
         handle: int,
         folder: str,
@@ -517,13 +484,13 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="isss",
         result_signature="i",
         flags=DbusUnprivilegedFlag,
         method_name="removeEntry",
     )
-    async def remove_entry(
+    def remove_entry(
         self,
         handle: int,
         folder: str,
@@ -532,49 +499,48 @@ class OrgKdeKWalletInterface(
     ) -> int:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="ss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="disconnectApplication",
     )
-    async def disconnect_application(
+    def disconnect_application(
         self,
         wallet: str,
         application: str,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="reconfigure",
-        result_args_names=(),
     )
-    async def reconfigure(
+    def reconfigure(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="ss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="folderDoesNotExist",
     )
-    async def folder_does_not_exist(
+    def folder_does_not_exist(
         self,
         wallet: str,
         folder: str,
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sss",
         result_signature="b",
         flags=DbusUnprivilegedFlag,
         method_name="keyDoesNotExist",
     )
-    async def key_does_not_exist(
+    def key_does_not_exist(
         self,
         wallet: str,
         folder: str,
@@ -582,140 +548,44 @@ class OrgKdeKWalletInterface(
     ) -> bool:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         flags=DbusUnprivilegedFlag,
         method_name="closeAllWallets",
-        result_args_names=(),
     )
-    async def close_all_wallets(
+    def close_all_wallets(
         self,
     ) -> None:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="networkWallet",
     )
-    async def network_wallet(
+    def network_wallet(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         result_signature="s",
         flags=DbusUnprivilegedFlag,
         method_name="localWallet",
     )
-    async def local_wallet(
+    def local_wallet(
         self,
     ) -> str:
         raise NotImplementedError
 
-    @dbus_method_async(
+    @dbus_method(
         input_signature="sayi",
         flags=DbusUnprivilegedFlag,
         method_name="pamOpen",
-        result_args_names=(),
     )
-    async def pam_open(
+    def pam_open(
         self,
         wallet: str,
         password_hash: bytes,
         session_timeout: int,
     ) -> None:
         raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="walletListDirty",
-    )
-    def wallet_list_dirty(self) -> None:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("wallet",),
-        signal_name="walletCreated",
-    )
-    def wallet_created(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("wallet",),
-        signal_name="walletOpened",
-    )
-    def wallet_opened(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ii",
-        signal_args_names=("tId", "handle"),
-        signal_name="walletAsyncOpened",
-    )
-    def wallet_async_opened(self) -> tuple[int, int]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("wallet",),
-        signal_name="walletDeleted",
-    )
-    def wallet_deleted(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("wallet",),
-        signal_name="walletClosed",
-    )
-    def wallet_closed(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="i",
-        signal_args_names=("handle",),
-        flags=DbusDeprecatedFlag,
-        signal_name="walletClosedId",
-    )
-    def wallet_handle_closed(self) -> int:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="i",
-        signal_args_names=("handle",),
-        signal_name="walletClosedId",
-    )
-    def wallet_closed_id(self) -> int:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_args_names=(),
-        signal_name="allWalletsClosed",
-    )
-    def all_wallets_closed(self) -> None:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="s",
-        signal_args_names=("wallet",),
-        signal_name="folderListUpdated",
-    )
-    def folder_list_updated(self) -> str:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ss",
-        signal_name="folderUpdated",
-    )
-    def folder_updated(self) -> tuple[str, str]:
-        raise NotImplementedError
-
-    @dbus_signal_async(
-        signal_signature="ss",
-        signal_args_names=("wallet", "application"),
-        signal_name="applicationDisconnected",
-    )
-    def application_disconnected(self) -> tuple[str, str]:
-        raise NotImplementedError
diff --git a/tests/dav/test_recurring_event_change.py b/tests/dav/test_recurring_event_change.py
index fd55233..4af80f2 100644
--- a/tests/dav/test_recurring_event_change.py
+++ b/tests/dav/test_recurring_event_change.py
@@ -220,7 +220,7 @@ def test_deleting_event_with_exception_server_side(
     assert len(akonadi_items) == 0
 
 
-async def test_etag_cache_built_on_resource_init(
+def test_etag_cache_built_on_resource_init(
     dav_principal: Principal,
     groupware_resource: DAVResource,
 ):
@@ -235,7 +235,7 @@ async def test_etag_cache_built_on_resource_init(
     akonadi_items = groupware_resource.list_items(collection.id())
     assert len(akonadi_items) == 2
 
-    await groupware_resource.restart()
+    groupware_resource.restart()
 
     DavEventFactory.create(calendar=calendar.name)  # Ensure etag change for collection
     groupware_resource.synchronize()
diff --git a/tests/selftest/test_infra.py b/tests/selftest/test_infra.py
index 1734828..5413185 100644
--- a/tests/selftest/test_infra.py
+++ b/tests/selftest/test_infra.py
@@ -5,7 +5,6 @@
 
 from logging import getLogger
 
-import pytest
 from AkonadiCore import Akonadi  # type: ignore
 from imap_tools import MailBoxUnencrypted
 
@@ -19,24 +18,19 @@ from src.imap.imap_server import ImapServer
 log = getLogger(__name__)
 
 
[email protected]
-async def test_imap_ready(imap_server: ImapServer):
+def test_imap_ready(imap_server: ImapServer):
     client = MailBoxUnencrypted(imap_server.host_or_ip, imap_server.port)
     client.login("admin", "admin")
     client.logout()
 
 
[email protected]
-async def test_akonadi_server_starts(
-    akonadi_server: AkonadiServer, dbus_client: AkonadiDBus
-) -> None:
+def test_akonadi_server_starts(akonadi_server: AkonadiServer, dbus_client: AkonadiDBus) -> None:
     assert akonadi_server.is_running()
-    path = await dbus_client.server_interface.server_path()
+    path = dbus_client.server_interface.server_path()
     assert path.startswith("/tmp/akonadi-e2e-")
 
 
[email protected]
-async def test_akonadi_client_list_collections(akonadi_client: AkonadiClient) -> None:
+def test_akonadi_client_list_collections(akonadi_client: AkonadiClient) -> None:
     collections = akonadi_client.list_collections()
     assert len(collections) == 2
     assert collections[0].id() == 0  # root collection
@@ -44,8 +38,7 @@ async def test_akonadi_client_list_collections(akonadi_client: AkonadiClient) ->
     assert collections[1].name() == "Search"
 
 
[email protected]
-async def test_akonadi_client_list_agents(
+def test_akonadi_client_list_agents(
     akonadi_client: AkonadiClient, imap_resource: ImapResource
 ) -> None:
     assert imap_resource.identifier.startswith("akonadi_imap_resource_")
@@ -57,8 +50,7 @@ async def test_akonadi_client_list_agents(
     assert agents[0].type().identifier() == "akonadi_imap_resource"
 
 
[email protected]
-async def test_akonadi_imap_resource(imap_resource: ImapResource) -> None:
+def test_akonadi_imap_resource(imap_resource: ImapResource) -> None:
     assert imap_resource.identifier.startswith("akonadi_imap_resource_")
     collections = imap_resource.list_collections()
 
@@ -93,9 +85,8 @@ def test_akonadi_client_list_agents_dav(
     assert agents[0].type().identifier() == "akonadi_davgroupware_resource"
 
 
[email protected]
-async def test_capabilities(imap_resource: ImapResource) -> None:
-    capabilities = set(await imap_resource.call_capabilities())
+def test_capabilities(imap_resource: ImapResource) -> None:
+    capabilities = set(imap_resource.call_capabilities())
     if "IMAP4REV2" in capabilities:
         assert all(
             capability in capabilities
diff --git a/uv.lock b/uv.lock
index c224620..422a3a3 100644
--- a/uv.lock
+++ b/uv.lock
@@ -2,101 +2,11 @@ version = 1
 revision = 3
 requires-python = ">=3.13"
 
-[[package]]
-name = "aiohappyeyeballs"
-version = "2.6.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" },
-]
-
-[[package]]
-name = "aiohttp"
-version = "3.13.5"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "aiohappyeyeballs" },
-    { name = "aiosignal" },
-    { name = "attrs" },
-    { name = "frozenlist" },
-    { name = "multidict" },
-    { name = "propcache" },
-    { name = "yarl" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size = 742930, upload-time = "2026-03-31T21:58:13.155Z" },
-    { url = "https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size = 496927, upload-time = "2026-03-31T21:58:15.073Z" },
-    { url = "https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size = 497141, upload-time = "2026-03-31T21:58:17.009Z" },
-    { url = "https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size = 1732476, upload-time = "2026-03-31T21:58:18.925Z" },
-    { url = "https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size = 1706507, upload-time = "2026-03-31T21:58:21.094Z" },
-    { url = "https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size = 1773465, upload-time = "2026-03-31T21:58:23.159Z" },
-    { url = "https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size = 1873523, upload-time = "2026-03-31T21:58:25.59Z" },
-    { url = "https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size = 1754113, upload-time = "2026-03-31T21:58:27.624Z" },
-    { url = "https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size = 1562351, upload-time = "2026-03-31T21:58:29.918Z" },
-    { url = "https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size = 1693205, upload-time = "2026-03-31T21:58:32.214Z" },
-    { url = "https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size = 1730618, upload-time = "2026-03-31T21:58:34.728Z" },
-    { url = "https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size = 1745185, upload-time = "2026-03-31T21:58:36.909Z" },
-    { url = "https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size = 1557311, upload-time = "2026-03-31T21:58:39.38Z" },
-    { url = "https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size = 1773147, upload-time = "2026-03-31T21:58:41.476Z" },
-    { url = "https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size = 1730356, upload-time = "2026-03-31T21:58:44.049Z" },
-    { url = "https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size = 432637, upload-time = "2026-03-31T21:58:46.167Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size = 458896, upload-time = "2026-03-31T21:58:48.119Z" },
-    { url = "https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size = 745721, upload-time = "2026-03-31T21:58:50.229Z" },
-    { url = "https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size = 497663, upload-time = "2026-03-31T21:58:52.232Z" },
-    { url = "https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size = 499094, upload-time = "2026-03-31T21:58:54.566Z" },
-    { url = "https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size = 1726701, upload-time = "2026-03-31T21:58:56.864Z" },
-    { url = "https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size = 1683360, upload-time = "2026-03-31T21:58:59.072Z" },
-    { url = "https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size = 1773023, upload-time = "2026-03-31T21:59:01.776Z" },
-    { url = "https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size = 1853795, upload-time = "2026-03-31T21:59:04.568Z" },
-    { url = "https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size = 1730405, upload-time = "2026-03-31T21:59:07.221Z" },
-    { url = "https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size = 1558082, upload-time = "2026-03-31T21:59:09.484Z" },
-    { url = "https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size = 1692346, upload-time = "2026-03-31T21:59:12.068Z" },
-    { url = "https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size = 1698891, upload-time = "2026-03-31T21:59:14.552Z" },
-    { url = "https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size = 1742113, upload-time = "2026-03-31T21:59:17.068Z" },
-    { url = "https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size = 1553088, upload-time = "2026-03-31T21:59:19.541Z" },
-    { url = "https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size = 1757976, upload-time = "2026-03-31T21:59:22.311Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size = 1712444, upload-time = "2026-03-31T21:59:24.635Z" },
-    { url = "https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size = 438128, upload-time = "2026-03-31T21:59:27.291Z" },
-    { url = "https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size = 464029, upload-time = "2026-03-31T21:59:29.429Z" },
-    { url = "https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size = 778758, upload-time = "2026-03-31T21:59:31.547Z" },
-    { url = "https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size = 512883, upload-time = "2026-03-31T21:59:34.098Z" },
-    { url = "https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size = 516668, upload-time = "2026-03-31T21:59:36.497Z" },
-    { url = "https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size = 1883461, upload-time = "2026-03-31T21:59:38.723Z" },
-    { url = "https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size = 1747661, upload-time = "2026-03-31T21:59:41.187Z" },
-    { url = "https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size = 1863800, upload-time = "2026-03-31T21:59:43.84Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size = 1958382, upload-time = "2026-03-31T21:59:46.187Z" },
-    { url = "https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size = 1803724, upload-time = "2026-03-31T21:59:48.656Z" },
-    { url = "https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size = 1640027, upload-time = "2026-03-31T21:59:51.284Z" },
-    { url = "https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size = 1806644, upload-time = "2026-03-31T21:59:53.753Z" },
-    { url = "https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size = 1791630, upload-time = "2026-03-31T21:59:56.239Z" },
-    { url = "https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size = 1809403, upload-time = "2026-03-31T21:59:59.103Z" },
-    { url = "https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size = 1634924, upload-time = "2026-03-31T22:00:02.116Z" },
-    { url = "https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size = 1836119, upload-time = "2026-03-31T22:00:04.756Z" },
-    { url = "https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size = 1772072, upload-time = "2026-03-31T22:00:07.494Z" },
-    { url = "https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size = 471819, upload-time = "2026-03-31T22:00:10.277Z" },
-    { url = "https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size = 505441, upload-time = "2026-03-31T22:00:12.791Z" },
-]
-
-[[package]]
-name = "aiosignal"
-version = "1.4.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "frozenlist" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" },
-]
-
 [[package]]
 name = "akonadi-e2e-tests"
 version = "0.1.0"
 source = { virtual = "." }
 dependencies = [
-    { name = "aiohttp" },
     { name = "caldav" },
     { name = "camel-converter" },
     { name = "factory-boy" },
@@ -105,9 +15,9 @@ dependencies = [
     { name = "lxml" },
     { name = "psutil" },
     { name = "pytest" },
-    { name = "pytest-asyncio" },
     { name = "pytest-order" },
     { name = "pytest-xdist" },
+    { name = "requests" },
     { name = "sdbus" },
     { name = "testcontainers" },
     { name = "xdg-base-dirs" },
@@ -125,7 +35,6 @@ dev = [
 
 [package.metadata]
 requires-dist = [
-    { name = "aiohttp", specifier = ">=3.13.3" },
     { name = "caldav", specifier = ">=3.1.0" },
     { name = "camel-converter", specifier = ">=4.0.1" },
     { name = "factory-boy", specifier = ">=3.3.3" },
@@ -134,9 +43,9 @@ requires-dist = [
     { name = "lxml", specifier = ">=6.0.2" },
     { name = "psutil", specifier = ">=7.0.0" },
     { name = "pytest", specifier = ">=8.3.5" },
-    { name = "pytest-asyncio", specifier = ">=0.26.0" },
     { name = "pytest-order", specifier = ">=1.3.0" },
     { name = "pytest-xdist", specifier = ">=3.6.1" },
+    { name = "requests", specifier = ">=2.33.1" },
     { name = "sdbus", specifier = ">=0.14.0" },
     { name = "testcontainers", specifier = ">=4.10.0" },
     { name = "xdg-base-dirs", specifier = ">=6.0.2" },
@@ -152,15 +61,6 @@ dev = [
     { name = "types-psutil", specifier = ">=7.0.0.20250516" },
 ]
 
-[[package]]
-name = "attrs"
-version = "26.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
-]
-
 [[package]]
 name = "caldav"
 version = "3.1.0"
@@ -341,79 +241,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl", hash = "sha256:de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db", size = 39189, upload-time = "2026-04-14T22:54:32.037Z" },
 ]
 
-[[package]]
-name = "frozenlist"
-version = "1.8.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" },
-    { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" },
-    { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" },
-    { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" },
-    { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" },
-    { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" },
-    { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" },
-    { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" },
-    { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" },
-    { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" },
-    { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" },
-    { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" },
-    { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" },
-    { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" },
-    { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" },
-    { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" },
-    { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" },
-    { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" },
-    { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" },
-    { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" },
-    { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" },
-    { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" },
-    { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" },
-    { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" },
-    { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" },
-    { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" },
-    { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" },
-    { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" },
-    { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" },
-    { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" },
-    { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" },
-    { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" },
-    { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" },
-    { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" },
-    { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" },
-    { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" },
-    { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" },
-    { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" },
-    { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" },
-    { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" },
-    { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" },
-    { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" },
-    { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" },
-    { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" },
-    { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" },
-    { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" },
-    { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" },
-    { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" },
-    { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" },
-    { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" },
-    { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" },
-    { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" },
-    { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" },
-    { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" },
-    { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" },
-    { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" },
-    { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" },
-    { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" },
-]
-
 [[package]]
 name = "h11"
 version = "0.16.0"
@@ -703,87 +530,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
 ]
 
-[[package]]
-name = "multidict"
-version = "6.7.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" },
-    { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" },
-    { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" },
-    { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" },
-    { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" },
-    { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" },
-    { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" },
-    { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" },
-    { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" },
-    { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" },
-    { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" },
-    { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" },
-    { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" },
-    { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" },
-    { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" },
-    { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" },
-    { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" },
-    { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" },
-    { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" },
-    { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" },
-    { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" },
-    { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" },
-    { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" },
-    { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" },
-    { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" },
-    { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" },
-    { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" },
-    { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" },
-    { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" },
-    { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" },
-    { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" },
-    { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" },
-    { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" },
-    { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" },
-    { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" },
-    { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" },
-    { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" },
-    { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" },
-    { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" },
-    { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" },
-    { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" },
-    { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" },
-    { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" },
-    { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" },
-    { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" },
-    { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" },
-    { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" },
-    { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" },
-    { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" },
-    { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" },
-    { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" },
-    { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" },
-    { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" },
-    { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" },
-    { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" },
-    { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" },
-    { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" },
-    { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" },
-    { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" },
-    { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" },
-    { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" },
-    { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" },
-    { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" },
-    { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" },
-    { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" },
-    { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" },
-    { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" },
-    { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" },
-]
-
 [[package]]
 name = "mypy"
 version = "1.20.1"
@@ -870,75 +616,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
 ]
 
-[[package]]
-name = "propcache"
-version = "0.4.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" },
-    { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" },
-    { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" },
-    { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" },
-    { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" },
-    { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" },
-    { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" },
-    { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" },
-    { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" },
-    { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" },
-    { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" },
-    { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" },
-    { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" },
-    { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" },
-    { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" },
-    { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" },
-    { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" },
-    { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" },
-    { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" },
-    { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" },
-    { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" },
-    { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" },
-    { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" },
-    { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" },
-    { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" },
-    { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" },
-    { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" },
-    { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" },
-    { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" },
-    { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" },
-    { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" },
-    { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" },
-    { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" },
-    { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" },
-    { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" },
-    { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" },
-    { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" },
-    { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" },
-    { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" },
-    { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" },
-    { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" },
-    { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" },
-    { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" },
-    { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" },
-    { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" },
-    { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" },
-    { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" },
-    { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" },
-    { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" },
-    { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" },
-    { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" },
-    { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" },
-    { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" },
-    { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" },
-    { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" },
-    { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" },
-]
-
 [[package]]
 name = "psutil"
 version = "7.2.2"
@@ -992,18 +669,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" },
 ]
 
-[[package]]
-name = "pytest-asyncio"
-version = "1.3.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "pytest" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" },
-]
-
 [[package]]
 name = "pytest-mypy"
 version = "1.0.1"
@@ -1441,89 +1106,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/bf/d0/bbe05a15347538aaf
 wheels = [
     { url = "https://files.pythonhosted.org/packages/fc/03/030b47fd46b60fc87af548e57ff59c2ca84b2a1dadbe721bb0ce33896b2e/xdg_base_dirs-6.0.2-py3-none-any.whl", hash = "sha256:3c01d1b758ed4ace150ac960ac0bd13ce4542b9e2cdf01312dcda5012cfebabe", size = 4747, upload-time = "2024-10-19T14:35:05.931Z" },
 ]
-
-[[package]]
-name = "yarl"
-version = "1.23.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "idna" },
-    { name = "multidict" },
-    { name = "propcache" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" },
-    { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" },
-    { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" },
-    { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" },
-    { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" },
-    { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" },
-    { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" },
-    { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" },
-    { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" },
-    { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" },
-    { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" },
-    { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" },
-    { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" },
-    { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" },
-    { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" },
-    { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" },
-    { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" },
-    { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" },
-    { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" },
-    { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" },
-    { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" },
-    { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" },
-    { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" },
-    { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" },
-    { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" },
-    { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" },
-    { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" },
-    { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" },
-    { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" },
-    { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" },
-    { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" },
-    { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" },
-    { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" },
-    { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" },
-    { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" },
-    { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" },
-    { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" },
-    { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" },
-    { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" },
-    { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" },
-    { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" },
-    { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" },
-    { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" },
-    { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" },
-    { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" },
-    { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" },
-    { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" },
-    { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" },
-    { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" },
-    { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" },
-    { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" },
-    { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" },
-    { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" },
-    { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" },
-    { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" },
-    { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" },
-    { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" },
-    { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" },
-    { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" },
-    { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" },
-    { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" },
-    { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" },
-    { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" },
-    { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" },
-    { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" },
-    { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" },
-    { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" },
-    { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" },
-    { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" },
-]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.