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

Remove optional state of ApplicationService.is_interested's store parameter #11911

Merged
merged 5 commits into from
Feb 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/11911.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Various refactors to the application service notifier code.
23 changes: 5 additions & 18 deletions synapse/appservice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,23 +165,16 @@ def _is_exclusive(self, namespace_key: str, test_string: str) -> bool:
return namespace.exclusive
return False

async def _matches_user(
self, event: Optional[EventBase], store: Optional["DataStore"] = None
) -> bool:
if not event:
return False

async def _matches_user(self, event: EventBase, store: "DataStore") -> bool:
if self.is_interested_in_user(event.sender):
return True

# also check m.room.member state key
if event.type == EventTypes.Member and self.is_interested_in_user(
event.state_key
):
return True

if not store:
return False

does_match = await self.matches_user_in_member_list(event.room_id, store)
return does_match

Expand Down Expand Up @@ -216,21 +209,15 @@ def _matches_room_id(self, event: EventBase) -> bool:
return self.is_interested_in_room(event.room_id)
return False

async def _matches_aliases(
self, event: EventBase, store: Optional["DataStore"] = None
) -> bool:
if not store or not event:
return False

async def _matches_aliases(self, event: EventBase, store: "DataStore") -> bool:
alias_list = await store.get_aliases_for_room(event.room_id)
for alias in alias_list:
if self.is_interested_in_alias(alias):
return True

return False

async def is_interested(
self, event: EventBase, store: Optional["DataStore"] = None
) -> bool:
async def is_interested(self, event: EventBase, store: "DataStore") -> bool:
"""Check if this service is interested in this event.

Args:
Expand Down
2 changes: 1 addition & 1 deletion synapse/handlers/appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -649,7 +649,7 @@ async def _get_services_for_event(
"""Retrieve a list of application services interested in this event.

Args:
event: The event to check. Can be None if alias_list is not.
event: The event to check.
Returns:
A list of services interested in this event based on the service regex.
"""
Expand Down
38 changes: 32 additions & 6 deletions tests/appservice/test_appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,31 @@ def setUp(self):
)

self.store = Mock()
self.store.get_aliases_for_room = simple_async_mock([])
self.store.get_users_in_room = simple_async_mock([])

@defer.inlineCallbacks
def test_regex_user_id_prefix_match(self):
self.service.namespaces[ApplicationService.NS_USERS].append(_regex("@irc_.*"))
self.event.sender = "@irc_foobar:matrix.org"
self.assertTrue(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
def test_regex_user_id_prefix_no_match(self):
self.service.namespaces[ApplicationService.NS_USERS].append(_regex("@irc_.*"))
self.event.sender = "@someone_else:matrix.org"
self.assertFalse(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
Expand All @@ -64,7 +74,11 @@ def test_regex_room_member_is_checked(self):
self.event.type = "m.room.member"
self.event.state_key = "@irc_foobar:matrix.org"
self.assertTrue(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
Expand All @@ -74,7 +88,11 @@ def test_regex_room_id_match(self):
)
self.event.room_id = "!some_prefixs0m3th1nGsome_suffix:matrix.org"
self.assertTrue(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
Expand All @@ -84,7 +102,11 @@ def test_regex_room_id_no_match(self):
)
self.event.room_id = "!XqBunHwQIXUiqCaoxq:matrix.org"
self.assertFalse(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
Expand Down Expand Up @@ -183,7 +205,11 @@ def test_interested_in_self(self):
self.event.content = {"membership": "invite"}
self.event.state_key = self.service.sender
self.assertTrue(
(yield defer.ensureDeferred(self.service.is_interested(self.event)))
(
yield defer.ensureDeferred(
self.service.is_interested(self.event, self.store)
)
)
)

@defer.inlineCallbacks
Expand Down