diff options
author | Erik Johnston <erik@matrix.org> | 2015-10-21 10:09:26 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-10-21 10:09:26 +0100 |
commit | 5c41224a89a9ceedeb5db10f972c10344382faf2 (patch) | |
tree | 29a7fb8a4851d4b5434d2105d203e3b6cbd947cb /synapse/api | |
parent | Filter search results (diff) | |
download | synapse-5c41224a89a9ceedeb5db10f972c10344382faf2.tar.xz |
Filter room ids before hitting the database
Diffstat (limited to 'synapse/api')
-rw-r--r-- | synapse/api/filtering.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/synapse/api/filtering.py b/synapse/api/filtering.py index 60b6648e0d..ab14b47281 100644 --- a/synapse/api/filtering.py +++ b/synapse/api/filtering.py @@ -202,6 +202,26 @@ class Filter(object): return True + def filter_rooms(self, room_ids): + """Apply the 'rooms' filter to a given list of rooms. + + Args: + room_ids (list): A list of room_ids. + + Returns: + list: A list of room_ids that match the filter + """ + room_ids = set(room_ids) + + disallowed_rooms = set(self.filter_json.get("not_rooms", [])) + room_ids -= disallowed_rooms + + allowed_rooms = self.filter_json.get("rooms", None) + if allowed_rooms is not None: + room_ids &= set(allowed_rooms) + + return room_ids + def filter(self, events): return filter(self.check, events) |