Skip to content
Snippets Groups Projects
Commit b9b4466d authored by Mark Haines's avatar Mark Haines Committed by review.rocks
Browse files

Add top level filters for filtering by room id

Documented by matrix-org/matrix-doc#246
parent 2e2eeb43
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,6 @@ export PYTHONDONTWRITEBYTECODE=yep ...@@ -6,7 +6,6 @@ export PYTHONDONTWRITEBYTECODE=yep
export TRIAL_FLAGS="--reporter=subunit" export TRIAL_FLAGS="--reporter=subunit"
export TOXSUFFIX="| subunit-1to2 | subunit2junitxml --no-passthrough --output-to=results.xml" export TOXSUFFIX="| subunit-1to2 | subunit2junitxml --no-passthrough --output-to=results.xml"
# Write coverage reports to a separate file for each process # Write coverage reports to a separate file for each process
# Include branch coverage
export COVERAGE_OPTS="-p" export COVERAGE_OPTS="-p"
export DUMP_COVERAGE_COMMAND="coverage help" export DUMP_COVERAGE_COMMAND="coverage help"
......
...@@ -62,10 +62,29 @@ class Filtering(object): ...@@ -62,10 +62,29 @@ class Filtering(object):
self._check_definition(user_filter_json[key]) self._check_definition(user_filter_json[key])
if "room" in user_filter_json: if "room" in user_filter_json:
self._check_definition_room_lists(user_filter_json["room"])
for key in room_level_definitions: for key in room_level_definitions:
if key in user_filter_json["room"]: if key in user_filter_json["room"]:
self._check_definition(user_filter_json["room"][key]) self._check_definition(user_filter_json["room"][key])
def _check_definition_room_lists(self, definition):
"""Check that "rooms" and "not_rooms" are lists of room ids if they
are present
Args:
definition(dict): The filter definition
Raises:
SynapseError: If there was a problem with this definition.
"""
# check rooms are valid room IDs
room_id_keys = ["rooms", "not_rooms"]
for key in room_id_keys:
if key in definition:
if type(definition[key]) != list:
raise SynapseError(400, "Expected %s to be a list." % key)
for room_id in definition[key]:
RoomID.from_string(room_id)
def _check_definition(self, definition): def _check_definition(self, definition):
"""Check if the provided definition is valid. """Check if the provided definition is valid.
...@@ -85,14 +104,7 @@ class Filtering(object): ...@@ -85,14 +104,7 @@ class Filtering(object):
400, "Expected JSON object, not %s" % (definition,) 400, "Expected JSON object, not %s" % (definition,)
) )
# check rooms are valid room IDs self._check_definition_room_lists(definition)
room_id_keys = ["rooms", "not_rooms"]
for key in room_id_keys:
if key in definition:
if type(definition[key]) != list:
raise SynapseError(400, "Expected %s to be a list." % key)
for room_id in definition[key]:
RoomID.from_string(room_id)
# check senders are valid user IDs # check senders are valid user IDs
user_id_keys = ["senders", "not_senders"] user_id_keys = ["senders", "not_senders"]
...@@ -119,29 +131,19 @@ class FilterCollection(object): ...@@ -119,29 +131,19 @@ class FilterCollection(object):
def __init__(self, filter_json): def __init__(self, filter_json):
self.filter_json = filter_json self.filter_json = filter_json
self.room_timeline_filter = Filter( room_filter_json = self.filter_json.get("room", {})
self.filter_json.get("room", {}).get("timeline", {})
)
self.room_state_filter = Filter(
self.filter_json.get("room", {}).get("state", {})
)
self.room_ephemeral_filter = Filter(
self.filter_json.get("room", {}).get("ephemeral", {})
)
self.room_account_data = Filter(
self.filter_json.get("room", {}).get("account_data", {})
)
self.presence_filter = Filter( self.room_filter = Filter({
self.filter_json.get("presence", {}) k: v for k, v in room_filter_json.items()
) if k in ("rooms", "not_rooms")
})
self.account_data = Filter( self.room_timeline_filter = Filter(room_filter_json.get("timeline", {}))
self.filter_json.get("account_data", {}) self.room_state_filter = Filter(room_filter_json.get("state", {}))
) self.room_ephemeral_filter = Filter(room_filter_json.get("ephemeral", {}))
self.room_account_data = Filter(room_filter_json.get("account_data", {}))
self.presence_filter = Filter(self.filter_json.get("presence", {}))
self.account_data = Filter(self.filter_json.get("account_data", {}))
self.include_leave = self.filter_json.get("room", {}).get( self.include_leave = self.filter_json.get("room", {}).get(
"include_leave", False "include_leave", False
...@@ -163,16 +165,16 @@ class FilterCollection(object): ...@@ -163,16 +165,16 @@ class FilterCollection(object):
return self.account_data.filter(events) return self.account_data.filter(events)
def filter_room_state(self, events): def filter_room_state(self, events):
return self.room_state_filter.filter(events) return self.room_state_filter.filter(self.room_filter.filter(events))
def filter_room_timeline(self, events): def filter_room_timeline(self, events):
return self.room_timeline_filter.filter(events) return self.room_timeline_filter.filter(self.room_filter.filter(events))
def filter_room_ephemeral(self, events): def filter_room_ephemeral(self, events):
return self.room_ephemeral_filter.filter(events) return self.room_ephemeral_filter.filter(self.room_filter.filter(events))
def filter_room_account_data(self, events): def filter_room_account_data(self, events):
return self.room_account_data.filter(events) return self.room_account_data.filter(self.room_filter.filter(events))
class Filter(object): class Filter(object):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment