diff options
author | David Robertson <davidr@element.io> | 2022-10-02 00:35:06 +0100 |
---|---|---|
committer | David Robertson <davidr@element.io> | 2022-10-02 00:35:06 +0100 |
commit | 85febbd3aca80eb34affee0a48cf637f4552d6af (patch) | |
tree | d2c9bb830697d89422c2529217308f9f5f607faa | |
parent | Fix incorrect annotations (diff) | |
download | synapse-85febbd3aca80eb34affee0a48cf637f4552d6af.tar.xz |
Fix a surprisingly tricky mypy error
Previous commit makes `QueryList`'s values be Optional[str]` instead of str. Before the change - `device_id` is deduced to be an `Optional[str]` as it comes from iterating over `query_list`. - when we use `device_id` to mark deleted devices as holding `None` in `result`, mypy complaints that we are using an `Optional[str]` to lookup something in a Dict whose keys are `str`. Fix this in two steps. 1. Avoid name reuse. 2. Don't store `None` in the initial version of `deleted_devices`.
-rw-r--r-- | synapse/storage/databases/main/end_to_end_keys.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 8222eb96ca..f1cd97ba14 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -295,15 +295,19 @@ class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore, CacheInvalidationWorker include_deleted_devices = False if include_deleted_devices: - deleted_devices = set(query_list) + deleted_devices = { + (user_id, device_id) + for user_id, device_id in query_list + if device_id is not None + } - for (user_id, device_id) in query_list: + for (queried_user_id, queried_device_id) in query_list: query_clause = "user_id = ?" - query_params.append(user_id) + query_params.append(queried_user_id) - if device_id is not None: + if queried_device_id is not None: query_clause += " AND device_id = ?" - query_params.append(device_id) + query_params.append(queried_device_id) query_clauses.append(query_clause) @@ -322,10 +326,16 @@ class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore, CacheInvalidationWorker txn.execute(sql, query_params) result: Dict[str, Dict[str, Optional[DeviceKeyLookupResult]]] = {} - for (user_id, device_id, display_name, key_json) in txn: + fetched_user_id: str + fetched_device_id: str + display_name: Optional[str] + key_json: Optional[str] + for (fetched_user_id, fetched_device_id, display_name, key_json) in txn: if include_deleted_devices: - deleted_devices.remove((user_id, device_id)) - result.setdefault(user_id, {})[device_id] = DeviceKeyLookupResult( + deleted_devices.remove((fetched_user_id, fetched_device_id)) + result.setdefault(fetched_user_id, {})[ + fetched_device_id + ] = DeviceKeyLookupResult( display_name, db_to_json(key_json) if key_json else None ) |