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

Commit d558292

Browse files
authored
Add missing type hints to the admin API servlets (#10105)
1 parent fa1db8f commit d558292

File tree

6 files changed

+48
-40
lines changed

6 files changed

+48
-40
lines changed

changelog.d/10105.misc

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

synapse/rest/admin/__init__.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717

1818
import logging
1919
import platform
20+
from typing import TYPE_CHECKING, Optional, Tuple
2021

2122
import synapse
2223
from synapse.api.errors import Codes, NotFoundError, SynapseError
23-
from synapse.http.server import JsonResource
24+
from synapse.http.server import HttpServer, JsonResource
2425
from synapse.http.servlet import RestServlet, parse_json_object_from_request
26+
from synapse.http.site import SynapseRequest
2527
from synapse.rest.admin._base import admin_patterns, assert_requester_is_admin
2628
from synapse.rest.admin.devices import (
2729
DeleteDevicesRestServlet,
@@ -66,22 +68,25 @@
6668
UserTokenRestServlet,
6769
WhoisRestServlet,
6870
)
69-
from synapse.types import RoomStreamToken
71+
from synapse.types import JsonDict, RoomStreamToken
7072
from synapse.util.versionstring import get_version_string
7173

74+
if TYPE_CHECKING:
75+
from synapse.server import HomeServer
76+
7277
logger = logging.getLogger(__name__)
7378

7479

7580
class VersionServlet(RestServlet):
7681
PATTERNS = admin_patterns("/server_version$")
7782

78-
def __init__(self, hs):
83+
def __init__(self, hs: "HomeServer"):
7984
self.res = {
8085
"server_version": get_version_string(synapse),
8186
"python_version": platform.python_version(),
8287
}
8388

84-
def on_GET(self, request):
89+
def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
8590
return 200, self.res
8691

8792

@@ -90,17 +95,14 @@ class PurgeHistoryRestServlet(RestServlet):
9095
"/purge_history/(?P<room_id>[^/]*)(/(?P<event_id>[^/]+))?"
9196
)
9297

93-
def __init__(self, hs):
94-
"""
95-
96-
Args:
97-
hs (synapse.server.HomeServer)
98-
"""
98+
def __init__(self, hs: "HomeServer"):
9999
self.pagination_handler = hs.get_pagination_handler()
100100
self.store = hs.get_datastore()
101101
self.auth = hs.get_auth()
102102

103-
async def on_POST(self, request, room_id, event_id):
103+
async def on_POST(
104+
self, request: SynapseRequest, room_id: str, event_id: Optional[str]
105+
) -> Tuple[int, JsonDict]:
104106
await assert_requester_is_admin(self.auth, request)
105107

106108
body = parse_json_object_from_request(request, allow_empty_body=True)
@@ -119,6 +121,8 @@ async def on_POST(self, request, room_id, event_id):
119121
if event.room_id != room_id:
120122
raise SynapseError(400, "Event is for wrong room.")
121123

124+
# RoomStreamToken expects [int] not Optional[int]
125+
assert event.internal_metadata.stream_ordering is not None
122126
room_token = RoomStreamToken(
123127
event.depth, event.internal_metadata.stream_ordering
124128
)
@@ -173,16 +177,13 @@ async def on_POST(self, request, room_id, event_id):
173177
class PurgeHistoryStatusRestServlet(RestServlet):
174178
PATTERNS = admin_patterns("/purge_history_status/(?P<purge_id>[^/]+)")
175179

176-
def __init__(self, hs):
177-
"""
178-
179-
Args:
180-
hs (synapse.server.HomeServer)
181-
"""
180+
def __init__(self, hs: "HomeServer"):
182181
self.pagination_handler = hs.get_pagination_handler()
183182
self.auth = hs.get_auth()
184183

185-
async def on_GET(self, request, purge_id):
184+
async def on_GET(
185+
self, request: SynapseRequest, purge_id: str
186+
) -> Tuple[int, JsonDict]:
186187
await assert_requester_is_admin(self.auth, request)
187188

188189
purge_status = self.pagination_handler.get_purge_status(purge_id)
@@ -203,12 +204,12 @@ async def on_GET(self, request, purge_id):
203204
class AdminRestResource(JsonResource):
204205
"""The REST resource which gets mounted at /_synapse/admin"""
205206

206-
def __init__(self, hs):
207+
def __init__(self, hs: "HomeServer"):
207208
JsonResource.__init__(self, hs, canonical_json=False)
208209
register_servlets(hs, self)
209210

210211

211-
def register_servlets(hs, http_server):
212+
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
212213
"""
213214
Register all the admin servlets.
214215
"""
@@ -242,7 +243,9 @@ def register_servlets(hs, http_server):
242243
RateLimitRestServlet(hs).register(http_server)
243244

244245

245-
def register_servlets_for_client_rest_resource(hs, http_server):
246+
def register_servlets_for_client_rest_resource(
247+
hs: "HomeServer", http_server: HttpServer
248+
) -> None:
246249
"""Register only the servlets which need to be exposed on /_matrix/client/xxx"""
247250
WhoisRestServlet(hs).register(http_server)
248251
PurgeHistoryStatusRestServlet(hs).register(http_server)

synapse/rest/admin/_base.py

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

1515
import re
16+
from typing import Iterable, Pattern
1617

1718
from synapse.api.auth import Auth
1819
from synapse.api.errors import AuthError
1920
from synapse.http.site import SynapseRequest
2021
from synapse.types import UserID
2122

2223

23-
def admin_patterns(path_regex: str, version: str = "v1"):
24+
def admin_patterns(path_regex: str, version: str = "v1") -> Iterable[Pattern]:
2425
"""Returns the list of patterns for an admin endpoint
2526
2627
Args:

synapse/rest/admin/groups.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,16 @@
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, Tuple
1516

1617
from synapse.api.errors import SynapseError
1718
from synapse.http.servlet import RestServlet
19+
from synapse.http.site import SynapseRequest
1820
from synapse.rest.admin._base import admin_patterns, assert_user_is_admin
21+
from synapse.types import JsonDict
22+
23+
if TYPE_CHECKING:
24+
from synapse.server import HomeServer
1925

2026
logger = logging.getLogger(__name__)
2127

@@ -25,12 +31,14 @@ class DeleteGroupAdminRestServlet(RestServlet):
2531

2632
PATTERNS = admin_patterns("/delete_group/(?P<group_id>[^/]*)")
2733

28-
def __init__(self, hs):
34+
def __init__(self, hs: "HomeServer"):
2935
self.group_server = hs.get_groups_server_handler()
3036
self.is_mine_id = hs.is_mine_id
3137
self.auth = hs.get_auth()
3238

33-
async def on_POST(self, request, group_id):
39+
async def on_POST(
40+
self, request: SynapseRequest, group_id: str
41+
) -> Tuple[int, JsonDict]:
3442
requester = await self.auth.get_user_by_req(request)
3543
await assert_user_is_admin(self.auth, requester.user)
3644

synapse/rest/admin/media.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from typing import TYPE_CHECKING, Tuple
1818

1919
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
20+
from synapse.http.server import HttpServer
2021
from synapse.http.servlet import RestServlet, parse_boolean, parse_integer
2122
from synapse.http.site import SynapseRequest
2223
from synapse.rest.admin._base import (
@@ -37,12 +38,11 @@ class QuarantineMediaInRoom(RestServlet):
3738
this server.
3839
"""
3940

40-
PATTERNS = (
41-
admin_patterns("/room/(?P<room_id>[^/]+)/media/quarantine")
42-
+
41+
PATTERNS = [
42+
*admin_patterns("/room/(?P<room_id>[^/]+)/media/quarantine"),
4343
# This path kept around for legacy reasons
44-
admin_patterns("/quarantine_media/(?P<room_id>[^/]+)")
45-
)
44+
*admin_patterns("/quarantine_media/(?P<room_id>[^/]+)"),
45+
]
4646

4747
def __init__(self, hs: "HomeServer"):
4848
self.store = hs.get_datastore()
@@ -312,7 +312,7 @@ async def on_POST(
312312
return 200, {"deleted_media": deleted_media, "total": total}
313313

314314

315-
def register_servlets_for_media_repo(hs: "HomeServer", http_server):
315+
def register_servlets_for_media_repo(hs: "HomeServer", http_server: HttpServer) -> None:
316316
"""
317317
Media repo specific APIs.
318318
"""

synapse/rest/admin/users.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -478,13 +478,12 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
478478

479479
class WhoisRestServlet(RestServlet):
480480
path_regex = "/whois/(?P<user_id>[^/]*)$"
481-
PATTERNS = (
482-
admin_patterns(path_regex)
483-
+
481+
PATTERNS = [
482+
*admin_patterns(path_regex),
484483
# URL for spec reason
485484
# https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-admin-whois-userid
486-
client_patterns("/admin" + path_regex, v1=True)
487-
)
485+
*client_patterns("/admin" + path_regex, v1=True),
486+
]
488487

489488
def __init__(self, hs: "HomeServer"):
490489
self.hs = hs
@@ -553,11 +552,7 @@ async def on_POST(
553552
class AccountValidityRenewServlet(RestServlet):
554553
PATTERNS = admin_patterns("/account_validity/validity$")
555554

556-
def __init__(self, hs):
557-
"""
558-
Args:
559-
hs (synapse.server.HomeServer): server
560-
"""
555+
def __init__(self, hs: "HomeServer"):
561556
self.hs = hs
562557
self.account_activity_handler = hs.get_account_validity_handler()
563558
self.auth = hs.get_auth()

0 commit comments

Comments
 (0)