From 7b36804b6a00d8468a5ee8b18b5a0104e7ab42e8 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Thu, 7 Oct 2021 19:48:05 +0100 Subject: [PATCH 1/3] disallow-untyped-defs for synapse.push --- mypy.ini | 3 +++ synapse/push/__init__.py | 2 +- synapse/push/bulk_push_rule_evaluator.py | 20 ++++++++++++++++---- synapse/push/clientformat.py | 4 +++- synapse/push/httppusher.py | 4 ++-- synapse/storage/databases/main/push_rule.py | 4 ++-- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/mypy.ini b/mypy.ini index bc2b59ff5622..a7019e2bd498 100644 --- a/mypy.ini +++ b/mypy.ini @@ -96,6 +96,9 @@ files = [mypy-synapse.handlers.*] disallow_untyped_defs = True +[mypy-synapse.push.*] +disallow_untyped_defs = True + [mypy-synapse.rest.*] disallow_untyped_defs = True diff --git a/synapse/push/__init__.py b/synapse/push/__init__.py index 2c23afe8e3ab..820f6f3f7ec0 100644 --- a/synapse/push/__init__.py +++ b/synapse/push/__init__.py @@ -94,7 +94,7 @@ def on_new_notifications(self, max_token: RoomStreamToken) -> None: self._start_processing() @abc.abstractmethod - def _start_processing(self): + def _start_processing(self) -> None: """Start processing push notifications.""" raise NotImplementedError() diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py index c337e530d3cf..0622a37ae8fd 100644 --- a/synapse/push/bulk_push_rule_evaluator.py +++ b/synapse/push/bulk_push_rule_evaluator.py @@ -290,6 +290,12 @@ def _condition_checker( return True +MemberMap = Dict[str, Tuple[str, str]] +Rule = Dict[str, dict] +RulesByUser = Dict[str, List[Rule]] +StateGroup = Union[object, int] + + @attr.s(slots=True) class RulesForRoomData: """The data stored in the cache by `RulesForRoom`. @@ -299,16 +305,16 @@ class RulesForRoomData: """ # event_id -> (user_id, state) - member_map = attr.ib(type=Dict[str, Tuple[str, str]], factory=dict) + member_map = attr.ib(type=MemberMap, factory=dict) # user_id -> rules - rules_by_user = attr.ib(type=Dict[str, List[Dict[str, dict]]], factory=dict) + rules_by_user = attr.ib(type=RulesByUser, factory=dict) # The last state group we updated the caches for. If the state_group of # a new event comes along, we know that we can just return the cached # result. # On invalidation of the rules themselves (if the user changes them), # we invalidate everything and set state_group to `object()` - state_group = attr.ib(type=Union[object, int], factory=object) + state_group = attr.ib(type=StateGroup, factory=object) # A sequence number to keep track of when we're allowed to update the # cache. We bump the sequence number when we invalidate the cache. If @@ -532,7 +538,13 @@ async def _update_rules_with_member_event_ids( self.update_cache(sequence, members, ret_rules_by_user, state_group) - def update_cache(self, sequence, members, rules_by_user, state_group) -> None: + def update_cache( + self, + sequence: int, + members: MemberMap, + rules_by_user: RulesByUser, + state_group: StateGroup, + ) -> None: if sequence == self.data.sequence: self.data.member_map.update(members) self.data.rules_by_user = rules_by_user diff --git a/synapse/push/clientformat.py b/synapse/push/clientformat.py index 1fc9716a3422..c5708cd8885b 100644 --- a/synapse/push/clientformat.py +++ b/synapse/push/clientformat.py @@ -19,7 +19,9 @@ from synapse.types import UserID -def format_push_rules_for_user(user: UserID, ruleslist) -> Dict[str, Dict[str, list]]: +def format_push_rules_for_user( + user: UserID, ruleslist: List +) -> Dict[str, Dict[str, list]]: """Converts a list of rawrules and a enabled map into nested dictionaries to match the Matrix client-server format for push rules""" diff --git a/synapse/push/httppusher.py b/synapse/push/httppusher.py index eac65572b2d8..dbf4ad7f97ee 100644 --- a/synapse/push/httppusher.py +++ b/synapse/push/httppusher.py @@ -403,10 +403,10 @@ async def dispatch_push( rejected = resp["rejected"] return rejected - async def _send_badge(self, badge): + async def _send_badge(self, badge: int) -> None: """ Args: - badge (int): number of unread messages + badge: number of unread messages """ logger.debug("Sending updated badge count %d to %s", badge, self.name) d = { diff --git a/synapse/storage/databases/main/push_rule.py b/synapse/storage/databases/main/push_rule.py index b81e33964ac7..fc720f59478b 100644 --- a/synapse/storage/databases/main/push_rule.py +++ b/synapse/storage/databases/main/push_rule.py @@ -14,7 +14,7 @@ # limitations under the License. import abc import logging -from typing import List, Tuple, Union +from typing import Dict, List, Tuple, Union from synapse.api.errors import NotFoundError, StoreError from synapse.push.baserules import list_with_base_rules @@ -139,7 +139,7 @@ async def get_push_rules_for_user(self, user_id): return _load_rules(rows, enabled_map, use_new_defaults) @cached(max_entries=5000) - async def get_push_rules_enabled_for_user(self, user_id): + async def get_push_rules_enabled_for_user(self, user_id) -> Dict[str, bool]: results = await self.db_pool.simple_select_list( table="push_rules_enable", keyvalues={"user_name": user_id}, From ab34acaf152afd7b77a63da16b6a35003b205776 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Mon, 11 Oct 2021 11:29:15 +0100 Subject: [PATCH 2/3] Changelog --- changelog.d/11023.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/11023.misc diff --git a/changelog.d/11023.misc b/changelog.d/11023.misc new file mode 100644 index 000000000000..ecc0467529be --- /dev/null +++ b/changelog.d/11023.misc @@ -0,0 +1 @@ +Add additional type hints for `synapse.push`. \ No newline at end of file From f12d339053ed9f08d9f03932ebad083300cd6724 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Mon, 11 Oct 2021 12:02:09 +0100 Subject: [PATCH 3/3] Keep the linter Happy Not sure why this suddenly started showing up with my changes? --- scripts/synapse_port_db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/synapse_port_db b/scripts/synapse_port_db index a947d9e49e42..349866eb9a82 100755 --- a/scripts/synapse_port_db +++ b/scripts/synapse_port_db @@ -1069,7 +1069,7 @@ class CursesProgress(Progress): self.stdscr.addstr(0, 0, status, curses.A_BOLD) - max_len = max([len(t) for t in self.tables.keys()]) + max_len = max(len(t) for t in self.tables.keys()) left_margin = 5 middle_space = 1