Skip to content

Commit ab3f1b3

Browse files
authored
Convert simple_select_one_txn and simple_select_one to return tuples. (#16612)
1 parent ff716b4 commit ab3f1b3

33 files changed

+283
-279
lines changed

changelog.d/16612.misc

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

synapse/_scripts/synapse_port_db.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,7 @@ async def setup_table(self, table: str) -> Tuple[str, int, int, int, int]:
348348
backward_chunk = 0
349349
already_ported = 0
350350
else:
351-
forward_chunk = row["forward_rowid"]
352-
backward_chunk = row["backward_rowid"]
351+
forward_chunk, backward_chunk = row
353352

354353
if total_to_port is None:
355354
already_ported, total_to_port = await self._get_total_count_to_port(

synapse/handlers/room.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ async def _upgrade_room(
269269
self,
270270
requester: Requester,
271271
old_room_id: str,
272-
old_room: Dict[str, Any],
272+
old_room: Tuple[bool, str, bool],
273273
new_room_id: str,
274274
new_version: RoomVersion,
275275
tombstone_event: EventBase,
@@ -279,7 +279,7 @@ async def _upgrade_room(
279279
Args:
280280
requester: the user requesting the upgrade
281281
old_room_id: the id of the room to be replaced
282-
old_room: a dict containing room information for the room to be replaced,
282+
old_room: a tuple containing room information for the room to be replaced,
283283
as returned by `RoomWorkerStore.get_room`.
284284
new_room_id: the id of the replacement room
285285
new_version: the version to upgrade the room to
@@ -299,7 +299,7 @@ async def _upgrade_room(
299299
await self.store.store_room(
300300
room_id=new_room_id,
301301
room_creator_user_id=user_id,
302-
is_public=old_room["is_public"],
302+
is_public=old_room[0],
303303
room_version=new_version,
304304
)
305305

synapse/handlers/room_member.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,8 @@ async def transfer_room_state_on_room_upgrade(
12601260
# Add new room to the room directory if the old room was there
12611261
# Remove old room from the room directory
12621262
old_room = await self.store.get_room(old_room_id)
1263-
if old_room is not None and old_room["is_public"]:
1263+
# If the old room exists and is public.
1264+
if old_room is not None and old_room[0]:
12641265
await self.store.set_room_is_public(old_room_id, False)
12651266
await self.store.set_room_is_public(room_id, True)
12661267

synapse/module_api/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1860,7 +1860,8 @@ async def room_is_in_public_room_list(self, room_id: str) -> bool:
18601860
if not room:
18611861
return False
18621862

1863-
return room.get("is_public", False)
1863+
# The first item is whether the room is public.
1864+
return room[0]
18641865

18651866
async def add_room_to_public_room_list(self, room_id: str) -> None:
18661867
"""Publishes a room to the public room list.

synapse/rest/admin/rooms.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,8 @@ async def on_GET(
413413
) -> Tuple[int, JsonDict]:
414414
await assert_requester_is_admin(self.auth, request)
415415

416-
ret = await self.store.get_room(room_id)
417-
if not ret:
416+
room = await self.store.get_room(room_id)
417+
if not room:
418418
raise NotFoundError("Room not found")
419419

420420
members = await self.store.get_users_in_room(room_id)
@@ -442,8 +442,8 @@ async def on_GET(
442442
) -> Tuple[int, JsonDict]:
443443
await assert_requester_is_admin(self.auth, request)
444444

445-
ret = await self.store.get_room(room_id)
446-
if not ret:
445+
room = await self.store.get_room(room_id)
446+
if not room:
447447
raise NotFoundError("Room not found")
448448

449449
event_ids = await self._storage_controllers.state.get_current_state_ids(room_id)

synapse/rest/client/directory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ async def on_GET(self, request: Request, room_id: str) -> Tuple[int, JsonDict]:
147147
if room is None:
148148
raise NotFoundError("Unknown room")
149149

150-
return 200, {"visibility": "public" if room["is_public"] else "private"}
150+
return 200, {"visibility": "public" if room[0] else "private"}
151151

152152
class PutBody(RequestBodyModel):
153153
visibility: Literal["public", "private"] = "public"

synapse/storage/database.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,7 +1597,7 @@ async def simple_select_one(
15971597
retcols: Collection[str],
15981598
allow_none: Literal[False] = False,
15991599
desc: str = "simple_select_one",
1600-
) -> Dict[str, Any]:
1600+
) -> Tuple[Any, ...]:
16011601
...
16021602

16031603
@overload
@@ -1608,7 +1608,7 @@ async def simple_select_one(
16081608
retcols: Collection[str],
16091609
allow_none: Literal[True] = True,
16101610
desc: str = "simple_select_one",
1611-
) -> Optional[Dict[str, Any]]:
1611+
) -> Optional[Tuple[Any, ...]]:
16121612
...
16131613

16141614
async def simple_select_one(
@@ -1618,7 +1618,7 @@ async def simple_select_one(
16181618
retcols: Collection[str],
16191619
allow_none: bool = False,
16201620
desc: str = "simple_select_one",
1621-
) -> Optional[Dict[str, Any]]:
1621+
) -> Optional[Tuple[Any, ...]]:
16221622
"""Executes a SELECT query on the named table, which is expected to
16231623
return a single row, returning multiple columns from it.
16241624
@@ -2127,7 +2127,7 @@ def simple_select_one_txn(
21272127
keyvalues: Dict[str, Any],
21282128
retcols: Collection[str],
21292129
allow_none: bool = False,
2130-
) -> Optional[Dict[str, Any]]:
2130+
) -> Optional[Tuple[Any, ...]]:
21312131
select_sql = "SELECT %s FROM %s" % (", ".join(retcols), table)
21322132

21332133
if keyvalues:
@@ -2145,7 +2145,7 @@ def simple_select_one_txn(
21452145
if txn.rowcount > 1:
21462146
raise StoreError(500, "More than one row matched (%s)" % (table,))
21472147

2148-
return dict(zip(retcols, row))
2148+
return row
21492149

21502150
async def simple_delete_one(
21512151
self, table: str, keyvalues: Dict[str, Any], desc: str = "simple_delete_one"

synapse/storage/databases/main/devices.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -255,33 +255,16 @@ async def get_device(
255255
A dict containing the device information, or `None` if the device does not
256256
exist.
257257
"""
258-
return await self.db_pool.simple_select_one(
259-
table="devices",
260-
keyvalues={"user_id": user_id, "device_id": device_id, "hidden": False},
261-
retcols=("user_id", "device_id", "display_name"),
262-
desc="get_device",
263-
allow_none=True,
264-
)
265-
266-
async def get_device_opt(
267-
self, user_id: str, device_id: str
268-
) -> Optional[Dict[str, Any]]:
269-
"""Retrieve a device. Only returns devices that are not marked as
270-
hidden.
271-
272-
Args:
273-
user_id: The ID of the user which owns the device
274-
device_id: The ID of the device to retrieve
275-
Returns:
276-
A dict containing the device information, or None if the device does not exist.
277-
"""
278-
return await self.db_pool.simple_select_one(
258+
row = await self.db_pool.simple_select_one(
279259
table="devices",
280260
keyvalues={"user_id": user_id, "device_id": device_id, "hidden": False},
281261
retcols=("user_id", "device_id", "display_name"),
282262
desc="get_device",
283263
allow_none=True,
284264
)
265+
if row is None:
266+
return None
267+
return {"user_id": row[0], "device_id": row[1], "display_name": row[2]}
285268

286269
async def get_devices_by_user(
287270
self, user_id: str
@@ -1221,9 +1204,7 @@ async def get_dehydrated_device(
12211204
retcols=["device_id", "device_data"],
12221205
allow_none=True,
12231206
)
1224-
return (
1225-
(row["device_id"], json_decoder.decode(row["device_data"])) if row else None
1226-
)
1207+
return (row[0], json_decoder.decode(row[1])) if row else None
12271208

12281209
def _store_dehydrated_device_txn(
12291210
self,
@@ -2326,13 +2307,15 @@ async def get_device_change_last_converted_pos(self) -> Tuple[int, str]:
23262307
`FALSE` have not been converted.
23272308
"""
23282309

2329-
row = await self.db_pool.simple_select_one(
2330-
table="device_lists_changes_converted_stream_position",
2331-
keyvalues={},
2332-
retcols=["stream_id", "room_id"],
2333-
desc="get_device_change_last_converted_pos",
2310+
return cast(
2311+
Tuple[int, str],
2312+
await self.db_pool.simple_select_one(
2313+
table="device_lists_changes_converted_stream_position",
2314+
keyvalues={},
2315+
retcols=["stream_id", "room_id"],
2316+
desc="get_device_change_last_converted_pos",
2317+
),
23342318
)
2335-
return row["stream_id"], row["room_id"]
23362319

23372320
async def set_device_change_last_converted_pos(
23382321
self,

synapse/storage/databases/main/e2e_room_keys.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -506,19 +506,26 @@ def _get_e2e_room_keys_version_info_txn(txn: LoggingTransaction) -> JsonDict:
506506
# it isn't there.
507507
raise StoreError(404, "No backup with that version exists")
508508

509-
result = self.db_pool.simple_select_one_txn(
510-
txn,
511-
table="e2e_room_keys_versions",
512-
keyvalues={"user_id": user_id, "version": this_version, "deleted": 0},
513-
retcols=("version", "algorithm", "auth_data", "etag"),
514-
allow_none=False,
509+
row = cast(
510+
Tuple[int, str, str, Optional[int]],
511+
self.db_pool.simple_select_one_txn(
512+
txn,
513+
table="e2e_room_keys_versions",
514+
keyvalues={
515+
"user_id": user_id,
516+
"version": this_version,
517+
"deleted": 0,
518+
},
519+
retcols=("version", "algorithm", "auth_data", "etag"),
520+
allow_none=False,
521+
),
515522
)
516-
assert result is not None # see comment on `simple_select_one_txn`
517-
result["auth_data"] = db_to_json(result["auth_data"])
518-
result["version"] = str(result["version"])
519-
if result["etag"] is None:
520-
result["etag"] = 0
521-
return result
523+
return {
524+
"auth_data": db_to_json(row[2]),
525+
"version": str(row[0]),
526+
"algorithm": row[1],
527+
"etag": 0 if row[3] is None else row[3],
528+
}
522529

523530
return await self.db_pool.runInteraction(
524531
"get_e2e_room_keys_version_info", _get_e2e_room_keys_version_info_txn

0 commit comments

Comments
 (0)