Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e2a6fdc

Browse files
committedJul 21, 2021
Generics for ObservableDeferred
1 parent a413836 commit e2a6fdc

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed
 

‎synapse/notifier.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,9 @@ def __init__(
111111
self.last_notified_token = current_token
112112
self.last_notified_ms = time_now_ms
113113

114-
with PreserveLoggingContext():
115-
self.notify_deferred = ObservableDeferred(defer.Deferred())
114+
self.notify_deferred: ObservableDeferred[StreamToken] = ObservableDeferred(
115+
defer.Deferred()
116+
)
116117

117118
def notify(
118119
self,

‎synapse/storage/persist_events.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,9 @@ async def add_to_queue(
170170
end_item = queue[-1]
171171
else:
172172
# need to make a new queue item
173-
deferred = ObservableDeferred(defer.Deferred(), consumeErrors=True)
173+
deferred: ObservableDeferred[_PersistResult] = ObservableDeferred(
174+
defer.Deferred(), consumeErrors=True
175+
)
174176

175177
end_item = _EventPersistQueueItem(
176178
events_and_contexts=[],

‎synapse/util/async_helpers.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
Awaitable,
2424
Callable,
2525
Dict,
26+
Generic,
2627
Hashable,
2728
Iterable,
2829
List,
@@ -52,7 +53,7 @@
5253
_T = TypeVar("_T")
5354

5455

55-
class ObservableDeferred:
56+
class ObservableDeferred(Generic[_T]):
5657
"""Wraps a deferred object so that we can add observer deferreds. These
5758
observer deferreds do not affect the callback chain of the original
5859
deferred.
@@ -70,7 +71,7 @@ class ObservableDeferred:
7071

7172
__slots__ = ["_deferred", "_observers", "_result"]
7273

73-
def __init__(self, deferred: defer.Deferred, consumeErrors: bool = False):
74+
def __init__(self, deferred: defer.Deferred[_T], consumeErrors: bool = False):
7475
object.__setattr__(self, "_deferred", deferred)
7576
object.__setattr__(self, "_result", None)
7677
object.__setattr__(self, "_observers", set())
@@ -115,15 +116,15 @@ def errback(f):
115116

116117
deferred.addCallbacks(callback, errback)
117118

118-
def observe(self) -> defer.Deferred:
119+
def observe(self) -> defer.Deferred[_T]:
119120
"""Observe the underlying deferred.
120121
121122
This returns a brand new deferred that is resolved when the underlying
122123
deferred is resolved. Interacting with the returned deferred does not
123124
effect the underlying deferred.
124125
"""
125126
if not self._result:
126-
d: defer.Deferred[Any] = defer.Deferred()
127+
d: defer.Deferred[_T] = defer.Deferred()
127128

128129
def remove(r):
129130
self._observers.discard(d)
@@ -137,7 +138,7 @@ def remove(r):
137138
success, res = self._result
138139
return defer.succeed(res) if success else defer.fail(res)
139140

140-
def observers(self) -> List[defer.Deferred]:
141+
def observers(self) -> List[defer.Deferred[_T]]:
141142
return self._observers
142143

143144
def has_called(self) -> bool:
@@ -146,7 +147,7 @@ def has_called(self) -> bool:
146147
def has_succeeded(self) -> bool:
147148
return self._result is not None and self._result[0] is True
148149

149-
def get_result(self) -> Any:
150+
def get_result(self) -> _T:
150151
return self._result[1]
151152

152153
def __getattr__(self, name: str) -> Any:

0 commit comments

Comments
 (0)
This repository has been archived.