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

Commit

Permalink
Remove optional state of ApplicationService.is_interested's store
Browse files Browse the repository at this point in the history
… parameter (#11911)
  • Loading branch information
anoadragon453 authored Feb 7, 2022
1 parent 314ca4c commit cf06783
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 25 deletions.
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

0 comments on commit cf06783

Please sign in to comment.