Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit d9cb658

Browse files
authored
Fix up type hints for Twisted 21.7 (#10490)
Mostly this involves decorating a few Deferred declarations with extra type hints. We wrap the types in quotes to avoid runtime errors when running against older versions of Twisted that don't have generics on Deferred.
1 parent 9643dfd commit d9cb658

File tree

6 files changed

+25
-15
lines changed

6 files changed

+25
-15
lines changed

changelog.d/10490.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix up type annotations to work with Twisted 21.7.

synapse/http/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ def connectionLost(self, reason: Failure = connectionDone) -> None:
847847

848848
def read_body_with_max_size(
849849
response: IResponse, stream: ByteWriteable, max_size: Optional[int]
850-
) -> defer.Deferred:
850+
) -> "defer.Deferred[int]":
851851
"""
852852
Read a HTTP response body to a file-object. Optionally enforcing a maximum file size.
853853
@@ -862,7 +862,7 @@ def read_body_with_max_size(
862862
Returns:
863863
A Deferred which resolves to the length of the read body.
864864
"""
865-
d = defer.Deferred()
865+
d: "defer.Deferred[int]" = defer.Deferred()
866866

867867
# If the Content-Length header gives a size larger than the maximum allowed
868868
# size, do not bother downloading the body.

synapse/replication/tcp/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ async def wait_for_stream_position(
285285

286286
# Create a new deferred that times out after N seconds, as we don't want
287287
# to wedge here forever.
288-
deferred = Deferred()
288+
deferred: "Deferred[None]" = Deferred()
289289
deferred = timeout_deferred(
290290
deferred, _WAIT_FOR_REPLICATION_TIMEOUT_SECONDS, self._reactor
291291
)

synapse/util/async_helpers.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949

5050
logger = logging.getLogger(__name__)
5151

52+
_T = TypeVar("_T")
53+
5254

5355
class ObservableDeferred:
5456
"""Wraps a deferred object so that we can add observer deferreds. These
@@ -121,7 +123,7 @@ def observe(self) -> defer.Deferred:
121123
effect the underlying deferred.
122124
"""
123125
if not self._result:
124-
d = defer.Deferred()
126+
d: "defer.Deferred[Any]" = defer.Deferred()
125127

126128
def remove(r):
127129
self._observers.discard(d)
@@ -415,7 +417,7 @@ def __init__(self):
415417
self.key_to_current_writer: Dict[str, defer.Deferred] = {}
416418

417419
async def read(self, key: str) -> ContextManager:
418-
new_defer = defer.Deferred()
420+
new_defer: "defer.Deferred[None]" = defer.Deferred()
419421

420422
curr_readers = self.key_to_current_readers.setdefault(key, set())
421423
curr_writer = self.key_to_current_writer.get(key, None)
@@ -438,7 +440,7 @@ def _ctx_manager():
438440
return _ctx_manager()
439441

440442
async def write(self, key: str) -> ContextManager:
441-
new_defer = defer.Deferred()
443+
new_defer: "defer.Deferred[None]" = defer.Deferred()
442444

443445
curr_readers = self.key_to_current_readers.get(key, set())
444446
curr_writer = self.key_to_current_writer.get(key, None)
@@ -471,10 +473,8 @@ def _ctx_manager():
471473

472474

473475
def timeout_deferred(
474-
deferred: defer.Deferred,
475-
timeout: float,
476-
reactor: IReactorTime,
477-
) -> defer.Deferred:
476+
deferred: "defer.Deferred[_T]", timeout: float, reactor: IReactorTime
477+
) -> "defer.Deferred[_T]":
478478
"""The in built twisted `Deferred.addTimeout` fails to time out deferreds
479479
that have a canceller that throws exceptions. This method creates a new
480480
deferred that wraps and times out the given deferred, correctly handling
@@ -497,7 +497,7 @@ def timeout_deferred(
497497
Returns:
498498
A new Deferred, which will errback with defer.TimeoutError on timeout.
499499
"""
500-
new_d = defer.Deferred()
500+
new_d: "defer.Deferred[_T]" = defer.Deferred()
501501

502502
timed_out = [False]
503503

synapse/util/caches/deferred_cache.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,16 @@
1616

1717
import enum
1818
import threading
19-
from typing import Callable, Generic, Iterable, MutableMapping, Optional, TypeVar, Union
19+
from typing import (
20+
Callable,
21+
Generic,
22+
Iterable,
23+
MutableMapping,
24+
Optional,
25+
TypeVar,
26+
Union,
27+
cast,
28+
)
2029

2130
from prometheus_client import Gauge
2231

@@ -166,7 +175,7 @@ def get_immediate(
166175
def set(
167176
self,
168177
key: KT,
169-
value: defer.Deferred,
178+
value: "defer.Deferred[VT]",
170179
callback: Optional[Callable[[], None]] = None,
171180
) -> defer.Deferred:
172181
"""Adds a new entry to the cache (or updates an existing one).
@@ -214,7 +223,7 @@ def set(
214223
if value.called:
215224
result = value.result
216225
if not isinstance(result, failure.Failure):
217-
self.cache.set(key, result, callbacks)
226+
self.cache.set(key, cast(VT, result), callbacks)
218227
return value
219228

220229
# otherwise, we'll add an entry to the _pending_deferred_cache for now,

synapse/util/caches/descriptors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ def arg_to_cache_key(arg):
413413
# relevant result for that key.
414414
deferreds_map = {}
415415
for arg in missing:
416-
deferred = defer.Deferred()
416+
deferred: "defer.Deferred[Any]" = defer.Deferred()
417417
deferreds_map[arg] = deferred
418418
key = arg_to_cache_key(arg)
419419
cache.set(key, deferred, callback=invalidate_callback)

0 commit comments

Comments
 (0)