15
15
16
16
import logging
17
17
import random
18
+ from typing import TYPE_CHECKING , Iterable , List , Optional
18
19
19
20
from synapse .api .constants import EventTypes , Membership
20
21
from synapse .api .errors import AuthError , SynapseError
21
22
from synapse .events import EventBase
22
23
from synapse .handlers .presence import format_user_presence_state
23
24
from synapse .logging .utils import log_function
24
- from synapse .types import UserID
25
+ from synapse .streams .config import PaginationConfig
26
+ from synapse .types import JsonDict , UserID
25
27
from synapse .visibility import filter_events_for_client
26
28
27
29
from ._base import BaseHandler
28
30
31
+ if TYPE_CHECKING :
32
+ from synapse .server import HomeServer
33
+
34
+
29
35
logger = logging .getLogger (__name__ )
30
36
31
37
32
38
class EventStreamHandler (BaseHandler ):
33
- def __init__ (self , hs ):
39
+ def __init__ (self , hs : "HomeServer" ):
34
40
super (EventStreamHandler , self ).__init__ (hs )
35
41
36
- # Count of active streams per user
37
- self ._streams_per_user = {}
38
- # Grace timers per user to delay the "stopped" signal
39
- self ._stop_timer_per_user = {}
40
-
41
42
self .distributor = hs .get_distributor ()
42
43
self .distributor .declare ("started_user_eventstream" )
43
44
self .distributor .declare ("stopped_user_eventstream" )
@@ -52,14 +53,14 @@ def __init__(self, hs):
52
53
@log_function
53
54
async def get_stream (
54
55
self ,
55
- auth_user_id ,
56
- pagin_config ,
57
- timeout = 0 ,
58
- as_client_event = True ,
59
- affect_presence = True ,
60
- room_id = None ,
61
- is_guest = False ,
62
- ):
56
+ auth_user_id : str ,
57
+ pagin_config : PaginationConfig ,
58
+ timeout : int = 0 ,
59
+ as_client_event : bool = True ,
60
+ affect_presence : bool = True ,
61
+ room_id : Optional [ str ] = None ,
62
+ is_guest : bool = False ,
63
+ ) -> JsonDict :
63
64
"""Fetches the events stream for a given user.
64
65
"""
65
66
@@ -98,7 +99,7 @@ async def get_stream(
98
99
99
100
# When the user joins a new room, or another user joins a currently
100
101
# joined room, we need to send down presence for those users.
101
- to_add = []
102
+ to_add = [] # type: List[JsonDict]
102
103
for event in events :
103
104
if not isinstance (event , EventBase ):
104
105
continue
@@ -110,7 +111,7 @@ async def get_stream(
110
111
# Send down presence for everyone in the room.
111
112
users = await self .state .get_current_users_in_room (
112
113
event .room_id
113
- )
114
+ ) # type: Iterable[str]
114
115
else :
115
116
users = [event .state_key ]
116
117
@@ -144,20 +145,22 @@ async def get_stream(
144
145
145
146
146
147
class EventHandler (BaseHandler ):
147
- def __init__ (self , hs ):
148
+ def __init__ (self , hs : "HomeServer" ):
148
149
super (EventHandler , self ).__init__ (hs )
149
150
self .storage = hs .get_storage ()
150
151
151
- async def get_event (self , user , room_id , event_id ):
152
+ async def get_event (
153
+ self , user : UserID , room_id : Optional [str ], event_id : str
154
+ ) -> Optional [EventBase ]:
152
155
"""Retrieve a single specified event.
153
156
154
157
Args:
155
- user (synapse.types.UserID) : The user requesting the event
156
- room_id (str|None) : The expected room id. We'll return None if the
158
+ user: The user requesting the event
159
+ room_id: The expected room id. We'll return None if the
157
160
event's room does not match.
158
- event_id (str) : The event ID to obtain.
161
+ event_id: The event ID to obtain.
159
162
Returns:
160
- dict: An event, or None if there is no event matching this ID.
163
+ An event, or None if there is no event matching this ID.
161
164
Raises:
162
165
SynapseError if there was a problem retrieving this event, or
163
166
AuthError if the user does not have the rights to inspect this
0 commit comments