forked from MirrorHub/synapse
Add top level filters for filtering by room id
Documented by matrix-org/matrix-doc#246
This commit is contained in:
parent
2e2eeb43a6
commit
b9b4466d0d
2 changed files with 35 additions and 34 deletions
|
@ -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):
|
||||||
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):
|
||||||
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):
|
||||||
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.room_filter = Filter({
|
||||||
self.filter_json.get("room", {}).get("state", {})
|
k: v for k, v in room_filter_json.items()
|
||||||
)
|
if k in ("rooms", "not_rooms")
|
||||||
|
})
|
||||||
|
|
||||||
self.room_ephemeral_filter = Filter(
|
self.room_timeline_filter = Filter(room_filter_json.get("timeline", {}))
|
||||||
self.filter_json.get("room", {}).get("ephemeral", {})
|
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.room_account_data = Filter(
|
self.presence_filter = Filter(self.filter_json.get("presence", {}))
|
||||||
self.filter_json.get("room", {}).get("account_data", {})
|
self.account_data = Filter(self.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):
|
||||||
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):
|
||||||
|
|
Loading…
Reference in a new issue