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

Commit 2b82ec4

Browse files
authored
Add type hints for most HomeServer parameters (#11095)
1 parent b9ce53e commit 2b82ec4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+342
-143
lines changed

changelog.d/11095.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add type hints to most `HomeServer` parameters.

synapse/app/_base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def listen_ssl(
294294
return r
295295

296296

297-
def refresh_certificate(hs):
297+
def refresh_certificate(hs: "HomeServer"):
298298
"""
299299
Refresh the TLS certificates that Synapse is using by re-reading them from
300300
disk and updating the TLS context factories to use them.
@@ -419,11 +419,11 @@ def run_sighup(*args, **kwargs):
419419
atexit.register(gc.freeze)
420420

421421

422-
def setup_sentry(hs):
422+
def setup_sentry(hs: "HomeServer"):
423423
"""Enable sentry integration, if enabled in configuration
424424
425425
Args:
426-
hs (synapse.server.HomeServer)
426+
hs
427427
"""
428428

429429
if not hs.config.metrics.sentry_enabled:
@@ -449,7 +449,7 @@ def setup_sentry(hs):
449449
scope.set_tag("worker_name", name)
450450

451451

452-
def setup_sdnotify(hs):
452+
def setup_sdnotify(hs: "HomeServer"):
453453
"""Adds process state hooks to tell systemd what we are up to."""
454454

455455
# Tell systemd our state, if we're using it. This will silently fail if

synapse/app/admin_cmd.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ class AdminCmdServer(HomeServer):
6868
DATASTORE_CLASS = AdminCmdSlavedStore
6969

7070

71-
async def export_data_command(hs, args):
71+
async def export_data_command(hs: HomeServer, args):
7272
"""Export data for a user.
7373
7474
Args:
75-
hs (HomeServer)
75+
hs
7676
args (argparse.Namespace)
7777
"""
7878

synapse/app/generic_worker.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,10 @@ class KeyUploadServlet(RestServlet):
131131

132132
PATTERNS = client_patterns("/keys/upload(/(?P<device_id>[^/]+))?$")
133133

134-
def __init__(self, hs):
134+
def __init__(self, hs: HomeServer):
135135
"""
136136
Args:
137-
hs (synapse.server.HomeServer): server
137+
hs: server
138138
"""
139139
super().__init__()
140140
self.auth = hs.get_auth()

synapse/app/homeserver.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ def format_config_error(e: ConfigError) -> Iterator[str]:
412412
e = e.__cause__
413413

414414

415-
def run(hs):
415+
def run(hs: HomeServer):
416416
PROFILE_SYNAPSE = False
417417
if PROFILE_SYNAPSE:
418418

synapse/app/phone_stats_home.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515
import math
1616
import resource
1717
import sys
18+
from typing import TYPE_CHECKING
1819

1920
from prometheus_client import Gauge
2021

2122
from synapse.metrics.background_process_metrics import wrap_as_background_process
2223

24+
if TYPE_CHECKING:
25+
from synapse.server import HomeServer
26+
2327
logger = logging.getLogger("synapse.app.homeserver")
2428

2529
# Contains the list of processes we will be monitoring
@@ -41,7 +45,7 @@
4145

4246

4347
@wrap_as_background_process("phone_stats_home")
44-
async def phone_stats_home(hs, stats, stats_process=_stats_process):
48+
async def phone_stats_home(hs: "HomeServer", stats, stats_process=_stats_process):
4549
logger.info("Gathering stats for reporting")
4650
now = int(hs.get_clock().time())
4751
uptime = int(now - hs.start_time)
@@ -142,7 +146,7 @@ async def phone_stats_home(hs, stats, stats_process=_stats_process):
142146
logger.warning("Error reporting stats: %s", e)
143147

144148

145-
def start_phone_stats_home(hs):
149+
def start_phone_stats_home(hs: "HomeServer"):
146150
"""
147151
Start the background tasks which report phone home stats.
148152
"""

synapse/appservice/api.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
if TYPE_CHECKING:
2929
from synapse.appservice import ApplicationService
30+
from synapse.server import HomeServer
3031

3132
logger = logging.getLogger(__name__)
3233

@@ -84,7 +85,7 @@ class ApplicationServiceApi(SimpleHttpClient):
8485
pushing.
8586
"""
8687

87-
def __init__(self, hs):
88+
def __init__(self, hs: "HomeServer"):
8889
super().__init__(hs)
8990
self.clock = hs.get_clock()
9091

synapse/config/logger.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import sys
1919
import threading
2020
from string import Template
21+
from typing import TYPE_CHECKING
2122

2223
import yaml
2324
from zope.interface import implementer
@@ -38,6 +39,9 @@
3839

3940
from ._base import Config, ConfigError
4041

42+
if TYPE_CHECKING:
43+
from synapse.server import HomeServer
44+
4145
DEFAULT_LOG_CONFIG = Template(
4246
"""\
4347
# Log configuration for Synapse.
@@ -306,7 +310,10 @@ def _reload_logging_config(log_config_path):
306310

307311

308312
def setup_logging(
309-
hs, config, use_worker_options=False, logBeginner: LogBeginner = globalLogBeginner
313+
hs: "HomeServer",
314+
config,
315+
use_worker_options=False,
316+
logBeginner: LogBeginner = globalLogBeginner,
310317
) -> None:
311318
"""
312319
Set up the logging subsystem.

synapse/federation/federation_base.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# limitations under the License.
1515
import logging
1616
from collections import namedtuple
17+
from typing import TYPE_CHECKING
1718

1819
from synapse.api.constants import MAX_DEPTH, EventContentFields, EventTypes, Membership
1920
from synapse.api.errors import Codes, SynapseError
@@ -25,11 +26,15 @@
2526
from synapse.http.servlet import assert_params_in_dict
2627
from synapse.types import JsonDict, get_domain_from_id
2728

29+
if TYPE_CHECKING:
30+
from synapse.server import HomeServer
31+
32+
2833
logger = logging.getLogger(__name__)
2934

3035

3136
class FederationBase:
32-
def __init__(self, hs):
37+
def __init__(self, hs: "HomeServer"):
3338
self.hs = hs
3439

3540
self.server_name = hs.hostname

synapse/federation/federation_server.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ async def _process_edu(edu_dict: JsonDict) -> None:
467467

468468
async def on_room_state_request(
469469
self, origin: str, room_id: str, event_id: Optional[str]
470-
) -> Tuple[int, Dict[str, Any]]:
470+
) -> Tuple[int, JsonDict]:
471471
origin_host, _ = parse_server_name(origin)
472472
await self.check_server_matches_acl(origin_host, room_id)
473473

@@ -481,7 +481,7 @@ async def on_room_state_request(
481481
# - but that's non-trivial to get right, and anyway somewhat defeats
482482
# the point of the linearizer.
483483
with (await self._server_linearizer.queue((origin, room_id))):
484-
resp = dict(
484+
resp: JsonDict = dict(
485485
await self._state_resp_cache.wrap(
486486
(room_id, event_id),
487487
self._on_context_state_request_compute,
@@ -1061,11 +1061,12 @@ async def _process_incoming_pdus_in_room_inner(
10611061

10621062
origin, event = next
10631063

1064-
lock = await self.store.try_acquire_lock(
1064+
new_lock = await self.store.try_acquire_lock(
10651065
_INBOUND_EVENT_HANDLING_LOCK_NAME, room_id
10661066
)
1067-
if not lock:
1067+
if not new_lock:
10681068
return
1069+
lock = new_lock
10691070

10701071
def __str__(self) -> str:
10711072
return "<ReplicationLayer(%s)>" % self.server_name

synapse/http/matrixfederationclient.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import urllib.parse
2222
from io import BytesIO, StringIO
2323
from typing import (
24+
TYPE_CHECKING,
2425
Callable,
2526
Dict,
2627
Generic,
@@ -73,6 +74,9 @@
7374
from synapse.util.async_helpers import timeout_deferred
7475
from synapse.util.metrics import Measure
7576

77+
if TYPE_CHECKING:
78+
from synapse.server import HomeServer
79+
7680
logger = logging.getLogger(__name__)
7781

7882
outgoing_requests_counter = Counter(
@@ -319,7 +323,7 @@ class MatrixFederationHttpClient:
319323
requests.
320324
"""
321325

322-
def __init__(self, hs, tls_client_options_factory):
326+
def __init__(self, hs: "HomeServer", tls_client_options_factory):
323327
self.hs = hs
324328
self.signing_key = hs.signing_key
325329
self.server_name = hs.hostname
@@ -711,7 +715,7 @@ def build_auth_headers(
711715
Returns:
712716
A list of headers to be added as "Authorization:" headers
713717
"""
714-
request = {
718+
request: JsonDict = {
715719
"method": method.decode("ascii"),
716720
"uri": url_bytes.decode("ascii"),
717721
"origin": self.server_name,

synapse/http/server.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from http import HTTPStatus
2323
from inspect import isawaitable
2424
from typing import (
25+
TYPE_CHECKING,
2526
Any,
2627
Awaitable,
2728
Callable,
@@ -61,6 +62,9 @@
6162
from synapse.util.caches import intern_dict
6263
from synapse.util.iterutils import chunk_seq
6364

65+
if TYPE_CHECKING:
66+
from synapse.server import HomeServer
67+
6468
logger = logging.getLogger(__name__)
6569

6670
HTML_ERROR_TEMPLATE = """<!DOCTYPE html>
@@ -343,6 +347,11 @@ def _send_error_response(
343347
return_json_error(f, request)
344348

345349

350+
_PathEntry = collections.namedtuple(
351+
"_PathEntry", ["pattern", "callback", "servlet_classname"]
352+
)
353+
354+
346355
class JsonResource(DirectServeJsonResource):
347356
"""This implements the HttpServer interface and provides JSON support for
348357
Resources.
@@ -359,14 +368,10 @@ class JsonResource(DirectServeJsonResource):
359368

360369
isLeaf = True
361370

362-
_PathEntry = collections.namedtuple(
363-
"_PathEntry", ["pattern", "callback", "servlet_classname"]
364-
)
365-
366-
def __init__(self, hs, canonical_json=True, extract_context=False):
371+
def __init__(self, hs: "HomeServer", canonical_json=True, extract_context=False):
367372
super().__init__(canonical_json, extract_context)
368373
self.clock = hs.get_clock()
369-
self.path_regexs = {}
374+
self.path_regexs: Dict[bytes, List[_PathEntry]] = {}
370375
self.hs = hs
371376

372377
def register_paths(self, method, path_patterns, callback, servlet_classname):
@@ -391,7 +396,7 @@ def register_paths(self, method, path_patterns, callback, servlet_classname):
391396
for path_pattern in path_patterns:
392397
logger.debug("Registering for %s %s", method, path_pattern.pattern)
393398
self.path_regexs.setdefault(method, []).append(
394-
self._PathEntry(path_pattern, callback, servlet_classname)
399+
_PathEntry(path_pattern, callback, servlet_classname)
395400
)
396401

397402
def _get_handler_for_request(

synapse/replication/http/__init__.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
from typing import TYPE_CHECKING
16+
1517
from synapse.http.server import JsonResource
1618
from synapse.replication.http import (
1719
account_data,
@@ -26,16 +28,19 @@
2628
streams,
2729
)
2830

31+
if TYPE_CHECKING:
32+
from synapse.server import HomeServer
33+
2934
REPLICATION_PREFIX = "/_synapse/replication"
3035

3136

3237
class ReplicationRestResource(JsonResource):
33-
def __init__(self, hs):
38+
def __init__(self, hs: "HomeServer"):
3439
# We enable extracting jaeger contexts here as these are internal APIs.
3540
super().__init__(hs, canonical_json=False, extract_context=True)
3641
self.register_servlets(hs)
3742

38-
def register_servlets(self, hs):
43+
def register_servlets(self, hs: "HomeServer"):
3944
send_event.register_servlets(hs, self)
4045
federation.register_servlets(hs, self)
4146
presence.register_servlets(hs, self)

synapse/replication/http/_base.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import re
1818
import urllib
1919
from inspect import signature
20-
from typing import TYPE_CHECKING, Dict, List, Tuple
20+
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, List, Tuple
2121

2222
from prometheus_client import Counter, Gauge
2323

@@ -156,7 +156,7 @@ async def _handle_request(self, request, **kwargs):
156156
pass
157157

158158
@classmethod
159-
def make_client(cls, hs):
159+
def make_client(cls, hs: "HomeServer"):
160160
"""Create a client that makes requests.
161161
162162
Returns a callable that accepts the same parameters as
@@ -208,7 +208,9 @@ async def send_request(*, instance_name="master", **kwargs):
208208
url_args.append(txn_id)
209209

210210
if cls.METHOD == "POST":
211-
request_func = client.post_json_get_json
211+
request_func: Callable[
212+
..., Awaitable[Any]
213+
] = client.post_json_get_json
212214
elif cls.METHOD == "PUT":
213215
request_func = client.put_json
214216
elif cls.METHOD == "GET":

0 commit comments

Comments
 (0)