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

Commit b932590

Browse files
authored
Add missing type hints to non-client REST servlets. (#10817)
Including admin, consent, key, synapse, and media. All REST servlets (the synapse.rest module) now require typed method definitions.
1 parent 8c7a531 commit b932590

27 files changed

+169
-96
lines changed

changelog.d/10785.misc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Convert the internal `FileInfo` class to attrs and add type hints.
1+
Add missing type hints to REST servlets.

changelog.d/10817.misc

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

mypy.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ files =
9090
tests/util/test_itertools.py,
9191
tests/util/test_stream_change_cache.py
9292

93-
[mypy-synapse.rest.client.*]
93+
[mypy-synapse.rest.*]
9494
disallow_untyped_defs = True
9595

9696
[mypy-synapse.util.batching_queue]

synapse/rest/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
15-
from synapse.http.server import JsonResource
15+
from typing import TYPE_CHECKING
16+
17+
from synapse.http.server import HttpServer, JsonResource
1618
from synapse.rest import admin
1719
from synapse.rest.client import (
1820
account,
@@ -57,6 +59,9 @@
5759
voip,
5860
)
5961

62+
if TYPE_CHECKING:
63+
from synapse.server import HomeServer
64+
6065

6166
class ClientRestResource(JsonResource):
6267
"""Matrix Client API REST resource.
@@ -68,12 +73,12 @@ class ClientRestResource(JsonResource):
6873
* etc
6974
"""
7075

71-
def __init__(self, hs):
76+
def __init__(self, hs: "HomeServer"):
7277
JsonResource.__init__(self, hs, canonical_json=False)
7378
self.register_servlets(self, hs)
7479

7580
@staticmethod
76-
def register_servlets(client_resource, hs):
81+
def register_servlets(client_resource: HttpServer, hs: "HomeServer") -> None:
7782
versions.register_servlets(hs, client_resource)
7883

7984
# Deprecated in r0

synapse/rest/admin/devices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def __init__(self, hs: "HomeServer"):
4747
self.store = hs.get_datastore()
4848

4949
async def on_GET(
50-
self, request: SynapseRequest, user_id, device_id: str
50+
self, request: SynapseRequest, user_id: str, device_id: str
5151
) -> Tuple[int, JsonDict]:
5252
await assert_requester_is_admin(self.auth, request)
5353

synapse/rest/admin/server_notice_servlet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def __init__(self, hs: "HomeServer"):
5757
self.admin_handler = hs.get_admin_handler()
5858
self.txns = HttpTransactionCache(hs)
5959

60-
def register(self, json_resource: HttpServer):
60+
def register(self, json_resource: HttpServer) -> None:
6161
PATTERN = "/send_server_notice"
6262
json_resource.register_paths(
6363
"POST", admin_patterns(PATTERN + "$"), self.on_POST, self.__class__.__name__

synapse/rest/admin/users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ def __init__(self, hs: "HomeServer"):
419419
self.nonces: Dict[str, int] = {}
420420
self.hs = hs
421421

422-
def _clear_old_nonces(self):
422+
def _clear_old_nonces(self) -> None:
423423
"""
424424
Clear out old nonces that are older than NONCE_TIMEOUT.
425425
"""

synapse/rest/consent/consent_resource.py

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,22 @@
1717
from hashlib import sha256
1818
from http import HTTPStatus
1919
from os import path
20-
from typing import Dict, List
20+
from typing import TYPE_CHECKING, Any, Dict, List
2121

2222
import jinja2
2323
from jinja2 import TemplateNotFound
2424

25+
from twisted.web.server import Request
26+
2527
from synapse.api.errors import NotFoundError, StoreError, SynapseError
2628
from synapse.config import ConfigError
2729
from synapse.http.server import DirectServeHtmlResource, respond_with_html
2830
from synapse.http.servlet import parse_bytes_from_args, parse_string
2931
from synapse.types import UserID
3032

33+
if TYPE_CHECKING:
34+
from synapse.server import HomeServer
35+
3136
# language to use for the templates. TODO: figure this out from Accept-Language
3237
TEMPLATE_LANGUAGE = "en"
3338

@@ -69,11 +74,7 @@ class ConsentResource(DirectServeHtmlResource):
6974
against the user.
7075
"""
7176

72-
def __init__(self, hs):
73-
"""
74-
Args:
75-
hs (synapse.server.HomeServer): homeserver
76-
"""
77+
def __init__(self, hs: "HomeServer"):
7778
super().__init__()
7879

7980
self.hs = hs
@@ -106,18 +107,14 @@ def __init__(self, hs):
106107

107108
self._hmac_secret = hs.config.form_secret.encode("utf-8")
108109

109-
async def _async_render_GET(self, request):
110-
"""
111-
Args:
112-
request (twisted.web.http.Request):
113-
"""
110+
async def _async_render_GET(self, request: Request) -> None:
114111
version = parse_string(request, "v", default=self._default_consent_version)
115112
username = parse_string(request, "u", default="")
116113
userhmac = None
117114
has_consented = False
118115
public_version = username == ""
119116
if not public_version:
120-
args: Dict[bytes, List[bytes]] = request.args
117+
args: Dict[bytes, List[bytes]] = request.args # type: ignore
121118
userhmac_bytes = parse_bytes_from_args(args, "h", required=True)
122119

123120
self._check_hash(username, userhmac_bytes)
@@ -147,14 +144,10 @@ async def _async_render_GET(self, request):
147144
except TemplateNotFound:
148145
raise NotFoundError("Unknown policy version")
149146

150-
async def _async_render_POST(self, request):
151-
"""
152-
Args:
153-
request (twisted.web.http.Request):
154-
"""
147+
async def _async_render_POST(self, request: Request) -> None:
155148
version = parse_string(request, "v", required=True)
156149
username = parse_string(request, "u", required=True)
157-
args: Dict[bytes, List[bytes]] = request.args
150+
args: Dict[bytes, List[bytes]] = request.args # type: ignore
158151
userhmac = parse_bytes_from_args(args, "h", required=True)
159152

160153
self._check_hash(username, userhmac)
@@ -177,7 +170,9 @@ async def _async_render_POST(self, request):
177170
except TemplateNotFound:
178171
raise NotFoundError("success.html not found")
179172

180-
def _render_template(self, request, template_name, **template_args):
173+
def _render_template(
174+
self, request: Request, template_name: str, **template_args: Any
175+
) -> None:
181176
# get_template checks for ".." so we don't need to worry too much
182177
# about path traversal here.
183178
template_html = self._jinja_env.get_template(
@@ -186,11 +181,11 @@ def _render_template(self, request, template_name, **template_args):
186181
html = template_html.render(**template_args)
187182
respond_with_html(request, 200, html)
188183

189-
def _check_hash(self, userid, userhmac):
184+
def _check_hash(self, userid: str, userhmac: bytes) -> None:
190185
"""
191186
Args:
192-
userid (unicode):
193-
userhmac (bytes):
187+
userid:
188+
userhmac:
194189
195190
Raises:
196191
SynapseError if the hash doesn't match

synapse/rest/health.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
from twisted.web.resource import Resource
16+
from twisted.web.server import Request
1617

1718

1819
class HealthResource(Resource):
@@ -25,6 +26,6 @@ class HealthResource(Resource):
2526

2627
isLeaf = 1
2728

28-
def render_GET(self, request):
29+
def render_GET(self, request: Request) -> bytes:
2930
request.setHeader(b"Content-Type", b"text/plain")
3031
return b"OK"

synapse/rest/key/v2/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@
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 twisted.web.resource import Resource
1618

1719
from .local_key_resource import LocalKey
1820
from .remote_key_resource import RemoteKey
1921

22+
if TYPE_CHECKING:
23+
from synapse.server import HomeServer
24+
2025

2126
class KeyApiV2Resource(Resource):
22-
def __init__(self, hs):
27+
def __init__(self, hs: "HomeServer"):
2328
Resource.__init__(self)
2429
self.putChild(b"server", LocalKey(hs))
2530
self.putChild(b"query", RemoteKey(hs))

0 commit comments

Comments
 (0)