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

Commit 5db1186

Browse files
authored
Add a return type to parse_string. (#10438)
And set the required attribute in a few places which will error if a parameter is not provided.
1 parent 2d89c66 commit 5db1186

File tree

13 files changed

+86
-45
lines changed

13 files changed

+86
-45
lines changed

changelog.d/10438.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Improve servlet type hints.

synapse/http/servlet.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,50 @@ def parse_bytes_from_args(
172172
return default
173173

174174

175+
@overload
176+
def parse_string(
177+
request: Request,
178+
name: str,
179+
default: str,
180+
*,
181+
allowed_values: Optional[Iterable[str]] = None,
182+
encoding: str = "ascii",
183+
) -> str:
184+
...
185+
186+
187+
@overload
188+
def parse_string(
189+
request: Request,
190+
name: str,
191+
*,
192+
required: Literal[True],
193+
allowed_values: Optional[Iterable[str]] = None,
194+
encoding: str = "ascii",
195+
) -> str:
196+
...
197+
198+
199+
@overload
200+
def parse_string(
201+
request: Request,
202+
name: str,
203+
*,
204+
required: bool = False,
205+
allowed_values: Optional[Iterable[str]] = None,
206+
encoding: str = "ascii",
207+
) -> Optional[str]:
208+
...
209+
210+
175211
def parse_string(
176212
request: Request,
177213
name: str,
178214
default: Optional[str] = None,
179215
required: bool = False,
180216
allowed_values: Optional[Iterable[str]] = None,
181217
encoding: str = "ascii",
182-
):
218+
) -> Optional[str]:
183219
"""
184220
Parse a string parameter from the request query string.
185221

synapse/rest/admin/users.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
9090
errcode=Codes.INVALID_PARAM,
9191
)
9292

93-
user_id = parse_string(request, "user_id", default=None)
94-
name = parse_string(request, "name", default=None)
93+
user_id = parse_string(request, "user_id")
94+
name = parse_string(request, "name")
9595
guests = parse_boolean(request, "guests", default=True)
9696
deactivated = parse_boolean(request, "deactivated", default=False)
9797

synapse/rest/client/v1/room.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ async def on_POST(self, request, room_id):
413413
assert_params_in_dict(body, ["state_events_at_start", "events"])
414414

415415
prev_events_from_query = parse_strings_from_args(request.args, "prev_event")
416-
chunk_id_from_query = parse_string(request, "chunk_id", default=None)
416+
chunk_id_from_query = parse_string(request, "chunk_id")
417417

418418
if prev_events_from_query is None:
419419
raise SynapseError(
@@ -735,7 +735,7 @@ def __init__(self, hs):
735735
self.auth = hs.get_auth()
736736

737737
async def on_GET(self, request):
738-
server = parse_string(request, "server", default=None)
738+
server = parse_string(request, "server")
739739

740740
try:
741741
await self.auth.get_user_by_req(request, allow_guest=True)
@@ -755,7 +755,7 @@ async def on_GET(self, request):
755755
raise e
756756

757757
limit = parse_integer(request, "limit", 0)
758-
since_token = parse_string(request, "since", None)
758+
since_token = parse_string(request, "since")
759759

760760
if limit == 0:
761761
# zero is a special value which corresponds to no limit.
@@ -789,7 +789,7 @@ async def on_GET(self, request):
789789
async def on_POST(self, request):
790790
await self.auth.get_user_by_req(request, allow_guest=True)
791791

792-
server = parse_string(request, "server", default=None)
792+
server = parse_string(request, "server")
793793
content = parse_json_object_from_request(request)
794794

795795
limit: Optional[int] = int(content.get("limit", 100))

synapse/rest/client/v2_alpha/keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ def __init__(self, hs):
194194
async def on_GET(self, request):
195195
requester = await self.auth.get_user_by_req(request, allow_guest=True)
196196

197-
from_token_string = parse_string(request, "from")
197+
from_token_string = parse_string(request, "from", required=True)
198198
set_tag("from", from_token_string)
199199

200200
# We want to enforce they do pass us one, but we ignore it and return

synapse/rest/client/v2_alpha/relations.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -158,19 +158,21 @@ async def on_GET(
158158
event = await self.event_handler.get_event(requester.user, room_id, parent_id)
159159

160160
limit = parse_integer(request, "limit", default=5)
161-
from_token = parse_string(request, "from")
162-
to_token = parse_string(request, "to")
161+
from_token_str = parse_string(request, "from")
162+
to_token_str = parse_string(request, "to")
163163

164164
if event.internal_metadata.is_redacted():
165165
# If the event is redacted, return an empty list of relations
166166
pagination_chunk = PaginationChunk(chunk=[])
167167
else:
168168
# Return the relations
169-
if from_token:
170-
from_token = RelationPaginationToken.from_string(from_token)
169+
from_token = None
170+
if from_token_str:
171+
from_token = RelationPaginationToken.from_string(from_token_str)
171172

172-
if to_token:
173-
to_token = RelationPaginationToken.from_string(to_token)
173+
to_token = None
174+
if to_token_str:
175+
to_token = RelationPaginationToken.from_string(to_token_str)
174176

175177
pagination_chunk = await self.store.get_relations_for_event(
176178
event_id=parent_id,
@@ -256,19 +258,21 @@ async def on_GET(
256258
raise SynapseError(400, "Relation type must be 'annotation'")
257259

258260
limit = parse_integer(request, "limit", default=5)
259-
from_token = parse_string(request, "from")
260-
to_token = parse_string(request, "to")
261+
from_token_str = parse_string(request, "from")
262+
to_token_str = parse_string(request, "to")
261263

262264
if event.internal_metadata.is_redacted():
263265
# If the event is redacted, return an empty list of relations
264266
pagination_chunk = PaginationChunk(chunk=[])
265267
else:
266268
# Return the relations
267-
if from_token:
268-
from_token = AggregationPaginationToken.from_string(from_token)
269+
from_token = None
270+
if from_token_str:
271+
from_token = AggregationPaginationToken.from_string(from_token_str)
269272

270-
if to_token:
271-
to_token = AggregationPaginationToken.from_string(to_token)
273+
to_token = None
274+
if to_token_str:
275+
to_token = AggregationPaginationToken.from_string(to_token_str)
272276

273277
pagination_chunk = await self.store.get_aggregation_groups_for_event(
274278
event_id=parent_id,
@@ -336,14 +340,16 @@ async def on_GET(self, request, room_id, parent_id, relation_type, event_type, k
336340
raise SynapseError(400, "Relation type must be 'annotation'")
337341

338342
limit = parse_integer(request, "limit", default=5)
339-
from_token = parse_string(request, "from")
340-
to_token = parse_string(request, "to")
343+
from_token_str = parse_string(request, "from")
344+
to_token_str = parse_string(request, "to")
341345

342-
if from_token:
343-
from_token = RelationPaginationToken.from_string(from_token)
346+
from_token = None
347+
if from_token_str:
348+
from_token = RelationPaginationToken.from_string(from_token_str)
344349

345-
if to_token:
346-
to_token = RelationPaginationToken.from_string(to_token)
350+
to_token = None
351+
if to_token_str:
352+
to_token = RelationPaginationToken.from_string(to_token_str)
347353

348354
result = await self.store.get_relations_for_event(
349355
event_id=parent_id,

synapse/rest/client/v2_alpha/sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
112112
default="online",
113113
allowed_values=self.ALLOWED_PRESENCE,
114114
)
115-
filter_id = parse_string(request, "filter", default=None)
115+
filter_id = parse_string(request, "filter")
116116
full_state = parse_boolean(request, "full_state", default=False)
117117

118118
logger.debug(

synapse/rest/consent/consent_resource.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ async def _async_render_GET(self, request):
112112
request (twisted.web.http.Request):
113113
"""
114114
version = parse_string(request, "v", default=self._default_consent_version)
115-
username = parse_string(request, "u", required=False, default="")
115+
username = parse_string(request, "u", default="")
116116
userhmac = None
117117
has_consented = False
118118
public_version = username == ""

synapse/rest/media/v1/preview_url_resource.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,15 +186,11 @@ async def _async_render_OPTIONS(self, request: Request) -> None:
186186
respond_with_json(request, 200, {}, send_cors=True)
187187

188188
async def _async_render_GET(self, request: SynapseRequest) -> None:
189-
# This will always be set by the time Twisted calls us.
190-
assert request.args is not None
191-
192189
# XXX: if get_user_by_req fails, what should we do in an async render?
193190
requester = await self.auth.get_user_by_req(request)
194-
url = parse_string(request, "url")
195-
if b"ts" in request.args:
196-
ts = parse_integer(request, "ts")
197-
else:
191+
url = parse_string(request, "url", required=True)
192+
ts = parse_integer(request, "ts")
193+
if ts is None:
198194
ts = self.clock.time_msec()
199195

200196
# XXX: we could move this into _do_preview if we wanted.

synapse/storage/databases/main/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ async def get_users_paginate(
249249
name: Optional[str] = None,
250250
guests: bool = True,
251251
deactivated: bool = False,
252-
order_by: UserSortOrder = UserSortOrder.USER_ID.value,
252+
order_by: str = UserSortOrder.USER_ID.value,
253253
direction: str = "f",
254254
) -> Tuple[List[JsonDict], int]:
255255
"""Function to retrieve a paginated list of users from

0 commit comments

Comments
 (0)