Support filtering events represented as dicts.

This is useful because the emphemeral events such as presence and
typing are represented as dicts inside synapse.
This commit is contained in:
Mark Haines 2015-10-22 16:38:03 +01:00
parent b0ac0a9438
commit 9b6f3bc742
1 changed files with 22 additions and 3 deletions

View File

@ -183,10 +183,29 @@ class Filter(object):
Returns: Returns:
bool: True if the event matches bool: True if the event matches
""" """
if isinstance(event, dict):
return self.check_fields(
event.get("room_id", None),
event.get("sender", None),
event.get("type", None),
)
else:
return self.check_fields(
event.room_id,
event.sender,
event.type,
)
def check_fields(self, room_id, sender, event_type):
"""Checks whether the filter matches the given event fields.
Returns:
bool: True if the event fields match
"""
literal_keys = { literal_keys = {
"rooms": lambda v: event.room_id == v, "rooms": lambda v: room_id == v,
"senders": lambda v: event.sender == v, "senders": lambda v: sender == v,
"types": lambda v: _matches_wildcard(event.type, v) "types": lambda v: _matches_wildcard(event_type, v)
} }
for name, match_func in literal_keys.items(): for name, match_func in literal_keys.items():