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

Commit 4054dfa

Browse files
authored
Add type hints for event streams. (#10856)
1 parent b25a494 commit 4054dfa

File tree

18 files changed

+169
-60
lines changed

18 files changed

+169
-60
lines changed

changelog.d/10856.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add missing type hints to handlers.

synapse/handlers/account_data.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
import random
16-
from typing import TYPE_CHECKING, Any, List, Tuple
16+
from typing import TYPE_CHECKING, Collection, List, Optional, Tuple
1717

1818
from synapse.replication.http.account_data import (
1919
ReplicationAddTagRestServlet,
2020
ReplicationRemoveTagRestServlet,
2121
ReplicationRoomAccountDataRestServlet,
2222
ReplicationUserAccountDataRestServlet,
2323
)
24+
from synapse.streams import EventSource
2425
from synapse.types import JsonDict, UserID
2526

2627
if TYPE_CHECKING:
@@ -163,15 +164,21 @@ async def remove_tag_from_room(self, user_id: str, room_id: str, tag: str) -> in
163164
return response["max_stream_id"]
164165

165166

166-
class AccountDataEventSource:
167+
class AccountDataEventSource(EventSource[int, JsonDict]):
167168
def __init__(self, hs: "HomeServer"):
168169
self.store = hs.get_datastore()
169170

170171
def get_current_key(self, direction: str = "f") -> int:
171172
return self.store.get_max_account_data_stream_id()
172173

173174
async def get_new_events(
174-
self, user: UserID, from_key: int, **kwargs: Any
175+
self,
176+
user: UserID,
177+
from_key: int,
178+
limit: Optional[int],
179+
room_ids: Collection[str],
180+
is_guest: bool,
181+
explicit_room_id: Optional[str] = None,
175182
) -> Tuple[List[JsonDict], int]:
176183
user_id = user.to_string()
177184
last_stream_id = from_key

synapse/handlers/appservice.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ async def _notify_interested_services_ephemeral(
254254
async def _handle_typing(
255255
self, service: ApplicationService, new_token: int
256256
) -> List[JsonDict]:
257-
typing_source = self.event_sources.sources["typing"]
257+
typing_source = self.event_sources.sources.typing
258258
# Get the typing events from just before current
259259
typing, _ = await typing_source.get_new_events_as(
260260
service=service,
@@ -269,7 +269,7 @@ async def _handle_receipts(self, service: ApplicationService) -> List[JsonDict]:
269269
from_key = await self.store.get_type_stream_id_for_appservice(
270270
service, "read_receipt"
271271
)
272-
receipts_source = self.event_sources.sources["receipt"]
272+
receipts_source = self.event_sources.sources.receipt
273273
receipts, _ = await receipts_source.get_new_events_as(
274274
service=service, from_key=from_key
275275
)
@@ -279,7 +279,7 @@ async def _handle_presence(
279279
self, service: ApplicationService, users: Collection[Union[str, UserID]]
280280
) -> List[JsonDict]:
281281
events: List[JsonDict] = []
282-
presence_source = self.event_sources.sources["presence"]
282+
presence_source = self.event_sources.sources.presence
283283
from_key = await self.store.get_type_stream_id_for_appservice(
284284
service, "presence"
285285
)

synapse/handlers/initial_sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ async def _snapshot_all_rooms(
125125

126126
now_token = self.hs.get_event_sources().get_current_token()
127127

128-
presence_stream = self.hs.get_event_sources().sources["presence"]
128+
presence_stream = self.hs.get_event_sources().sources.presence
129129
presence, _ = await presence_stream.get_new_events(
130130
user, from_key=None, include_offline=False
131131
)

synapse/handlers/presence.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
from synapse.replication.tcp.commands import ClearUserSyncsCommand
6666
from synapse.replication.tcp.streams import PresenceFederationStream, PresenceStream
6767
from synapse.storage.databases.main import DataStore
68+
from synapse.streams import EventSource
6869
from synapse.types import JsonDict, UserID, get_domain_from_id
6970
from synapse.util.async_helpers import Linearizer
7071
from synapse.util.caches.descriptors import _CacheContext, cached
@@ -1500,7 +1501,7 @@ def format_user_presence_state(
15001501
return content
15011502

15021503

1503-
class PresenceEventSource:
1504+
class PresenceEventSource(EventSource[int, UserPresenceState]):
15041505
def __init__(self, hs: "HomeServer"):
15051506
# We can't call get_presence_handler here because there's a cycle:
15061507
#
@@ -1519,10 +1520,11 @@ async def get_new_events(
15191520
self,
15201521
user: UserID,
15211522
from_key: Optional[int],
1523+
limit: Optional[int] = None,
15221524
room_ids: Optional[List[str]] = None,
1523-
include_offline: bool = True,
1525+
is_guest: bool = False,
15241526
explicit_room_id: Optional[str] = None,
1525-
**kwargs: Any,
1527+
include_offline: bool = True,
15261528
) -> Tuple[List[UserPresenceState], int]:
15271529
# The process for getting presence events are:
15281530
# 1. Get the rooms the user is in.

synapse/handlers/receipts.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
import logging
15-
from typing import TYPE_CHECKING, Any, List, Optional, Tuple
15+
from typing import TYPE_CHECKING, Iterable, List, Optional, Tuple
1616

1717
from synapse.api.constants import ReadReceiptEventFields
1818
from synapse.appservice import ApplicationService
1919
from synapse.handlers._base import BaseHandler
20+
from synapse.streams import EventSource
2021
from synapse.types import JsonDict, ReadReceipt, UserID, get_domain_from_id
2122

2223
if TYPE_CHECKING:
@@ -162,7 +163,7 @@ async def received_client_receipt(
162163
await self.federation_sender.send_read_receipt(receipt)
163164

164165

165-
class ReceiptEventSource:
166+
class ReceiptEventSource(EventSource[int, JsonDict]):
166167
def __init__(self, hs: "HomeServer"):
167168
self.store = hs.get_datastore()
168169
self.config = hs.config
@@ -216,7 +217,13 @@ def filter_out_hidden(events: List[JsonDict], user_id: str) -> List[JsonDict]:
216217
return visible_events
217218

218219
async def get_new_events(
219-
self, from_key: int, room_ids: List[str], user: UserID, **kwargs: Any
220+
self,
221+
user: UserID,
222+
from_key: int,
223+
limit: Optional[int],
224+
room_ids: Iterable[str],
225+
is_guest: bool,
226+
explicit_room_id: Optional[str] = None,
220227
) -> Tuple[List[JsonDict], int]:
221228
from_key = int(from_key)
222229
to_key = self.get_current_key()

synapse/handlers/room.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,16 @@
2020
import random
2121
import string
2222
from collections import OrderedDict
23-
from typing import TYPE_CHECKING, Any, Awaitable, Dict, List, Optional, Tuple
23+
from typing import (
24+
TYPE_CHECKING,
25+
Any,
26+
Awaitable,
27+
Collection,
28+
Dict,
29+
List,
30+
Optional,
31+
Tuple,
32+
)
2433

2534
from synapse.api.constants import (
2635
EventContentFields,
@@ -47,6 +56,7 @@
4756
from synapse.events.utils import copy_power_levels_contents
4857
from synapse.rest.admin._base import assert_user_is_admin
4958
from synapse.storage.state import StateFilter
59+
from synapse.streams import EventSource
5060
from synapse.types import (
5161
JsonDict,
5262
MutableStateMap,
@@ -1173,16 +1183,16 @@ async def filter_evts(events: List[EventBase]) -> List[EventBase]:
11731183
return results
11741184

11751185

1176-
class RoomEventSource:
1186+
class RoomEventSource(EventSource[RoomStreamToken, EventBase]):
11771187
def __init__(self, hs: "HomeServer"):
11781188
self.store = hs.get_datastore()
11791189

11801190
async def get_new_events(
11811191
self,
11821192
user: UserID,
11831193
from_key: RoomStreamToken,
1184-
limit: int,
1185-
room_ids: List[str],
1194+
limit: Optional[int],
1195+
room_ids: Collection[str],
11861196
is_guest: bool,
11871197
explicit_room_id: Optional[str] = None,
11881198
) -> Tuple[List[EventBase], RoomStreamToken]:

synapse/handlers/sync.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ async def ephemeral_by_room(
443443

444444
room_ids = sync_result_builder.joined_room_ids
445445

446-
typing_source = self.event_sources.sources["typing"]
446+
typing_source = self.event_sources.sources.typing
447447
typing, typing_key = await typing_source.get_new_events(
448448
user=sync_config.user,
449449
from_key=typing_key,
@@ -465,7 +465,7 @@ async def ephemeral_by_room(
465465

466466
receipt_key = since_token.receipt_key if since_token else 0
467467

468-
receipt_source = self.event_sources.sources["receipt"]
468+
receipt_source = self.event_sources.sources.receipt
469469
receipts, receipt_key = await receipt_source.get_new_events(
470470
user=sync_config.user,
471471
from_key=receipt_key,
@@ -1415,7 +1415,7 @@ async def _generate_sync_entry_for_presence(
14151415
sync_config = sync_result_builder.sync_config
14161416
user = sync_result_builder.sync_config.user
14171417

1418-
presence_source = self.event_sources.sources["presence"]
1418+
presence_source = self.event_sources.sources.presence
14191419

14201420
since_token = sync_result_builder.since_token
14211421
presence_key = None

synapse/handlers/typing.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import logging
1515
import random
1616
from collections import namedtuple
17-
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Set, Tuple
17+
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Set, Tuple
1818

1919
from synapse.api.errors import AuthError, ShadowBanError, SynapseError
2020
from synapse.appservice import ApplicationService
@@ -23,6 +23,7 @@
2323
wrap_as_background_process,
2424
)
2525
from synapse.replication.tcp.streams import TypingStream
26+
from synapse.streams import EventSource
2627
from synapse.types import JsonDict, Requester, UserID, get_domain_from_id
2728
from synapse.util.caches.stream_change_cache import StreamChangeCache
2829
from synapse.util.metrics import Measure
@@ -439,7 +440,7 @@ def process_replication_rows(
439440
raise Exception("Typing writer instance got typing info over replication")
440441

441442

442-
class TypingNotificationEventSource:
443+
class TypingNotificationEventSource(EventSource[int, JsonDict]):
443444
def __init__(self, hs: "HomeServer"):
444445
self.hs = hs
445446
self.clock = hs.get_clock()
@@ -485,7 +486,13 @@ async def get_new_events_as(
485486
return (events, handler._latest_room_serial)
486487

487488
async def get_new_events(
488-
self, from_key: int, room_ids: Iterable[str], **kwargs: Any
489+
self,
490+
user: UserID,
491+
from_key: int,
492+
limit: Optional[int],
493+
room_ids: Iterable[str],
494+
is_guest: bool,
495+
explicit_room_id: Optional[str] = None,
489496
) -> Tuple[List[JsonDict], int]:
490497
with Measure(self.clock, "typing.get_new_events"):
491498
from_key = int(from_key)

synapse/module_api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def __init__(self, hs: "HomeServer", auth_handler):
9191
self._auth = hs.get_auth()
9292
self._auth_handler = auth_handler
9393
self._server_name = hs.hostname
94-
self._presence_stream = hs.get_event_sources().sources["presence"]
94+
self._presence_stream = hs.get_event_sources().sources.presence
9595
self._state = hs.get_state_handler()
9696
self._clock: Clock = hs.get_clock()
9797
self._send_email_handler = hs.get_send_email_handler()

0 commit comments

Comments
 (0)