diff --git a/synapse/rest/client/knock.py b/synapse/rest/client/knock.py
index 0152a0c66a..ad025c8a45 100644
--- a/synapse/rest/client/knock.py
+++ b/synapse/rest/client/knock.py
@@ -15,8 +15,6 @@
import logging
from typing import TYPE_CHECKING, Awaitable, Dict, List, Optional, Tuple
-from twisted.web.server import Request
-
from synapse.api.constants import Membership
from synapse.api.errors import SynapseError
from synapse.http.server import HttpServer
@@ -97,7 +95,7 @@ class KnockRoomAliasServlet(RestServlet):
return 200, {"room_id": room_id}
def on_PUT(
- self, request: Request, room_identifier: str, txn_id: str
+ self, request: SynapseRequest, room_identifier: str, txn_id: str
) -> Awaitable[Tuple[int, JsonDict]]:
set_tag("txn_id", txn_id)
diff --git a/synapse/rest/client/transactions.py b/synapse/rest/client/transactions.py
index 914fb3acf5..61375651bc 100644
--- a/synapse/rest/client/transactions.py
+++ b/synapse/rest/client/transactions.py
@@ -15,7 +15,9 @@
"""This module contains logic for storing HTTP PUT transactions. This is used
to ensure idempotency when performing PUTs using the REST API."""
import logging
-from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, Tuple
+from typing import TYPE_CHECKING, Awaitable, Callable, Dict, Tuple
+
+from typing_extensions import ParamSpec
from twisted.python.failure import Failure
from twisted.web.server import Request
@@ -32,6 +34,9 @@ logger = logging.getLogger(__name__)
CLEANUP_PERIOD_MS = 1000 * 60 * 30 # 30 mins
+P = ParamSpec("P")
+
+
class HttpTransactionCache:
def __init__(self, hs: "HomeServer"):
self.hs = hs
@@ -65,9 +70,9 @@ class HttpTransactionCache:
def fetch_or_execute_request(
self,
request: Request,
- fn: Callable[..., Awaitable[Tuple[int, JsonDict]]],
- *args: Any,
- **kwargs: Any,
+ fn: Callable[P, Awaitable[Tuple[int, JsonDict]]],
+ *args: P.args,
+ **kwargs: P.kwargs,
) -> Awaitable[Tuple[int, JsonDict]]:
"""A helper function for fetch_or_execute which extracts
a transaction key from the given request.
@@ -82,9 +87,9 @@ class HttpTransactionCache:
def fetch_or_execute(
self,
txn_key: str,
- fn: Callable[..., Awaitable[Tuple[int, JsonDict]]],
- *args: Any,
- **kwargs: Any,
+ fn: Callable[P, Awaitable[Tuple[int, JsonDict]]],
+ *args: P.args,
+ **kwargs: P.kwargs,
) -> Awaitable[Tuple[int, JsonDict]]:
"""Fetches the response for this transaction, or executes the given function
to produce a response for this transaction.
|