mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-12-15 15:48:53 -05:00
Allow selecting "prejoin" events by state keys (#14642)
* Declare new config * Parse new config * Read new config * Don't use trial/our TestCase where it's not needed Before: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m2.277s user 0m2.186s sys 0m0.083s ``` After: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m0.566s user 0m0.508s sys 0m0.056s ``` * Helper to upsert to event fields without exceeding size limits. * Use helper when adding invite/knock state Now that we allow admins to include events in prejoin room state with arbitrary state keys, be a good Matrix citizen and ensure they don't accidentally create an oversized event. * Changelog * Move StateFilter tests should have done this in #14668 * Add extra methods to StateFilter * Use StateFilter * Ensure test file enforces typed defs; alphabetise * Workaround surprising get_current_state_ids * Whoops, fix mypy
This commit is contained in:
parent
3d87847ecc
commit
e2a1adbf5d
14 changed files with 982 additions and 694 deletions
|
|
@ -118,6 +118,15 @@ class StateFilter:
|
|||
)
|
||||
)
|
||||
|
||||
def to_types(self) -> Iterable[Tuple[str, Optional[str]]]:
|
||||
"""The inverse to `from_types`."""
|
||||
for (event_type, state_keys) in self.types.items():
|
||||
if state_keys is None:
|
||||
yield event_type, None
|
||||
else:
|
||||
for state_key in state_keys:
|
||||
yield event_type, state_key
|
||||
|
||||
@staticmethod
|
||||
def from_lazy_load_member_list(members: Iterable[str]) -> "StateFilter":
|
||||
"""Creates a filter that returns all non-member events, plus the member
|
||||
|
|
@ -343,6 +352,15 @@ class StateFilter:
|
|||
for s in state_keys
|
||||
]
|
||||
|
||||
def wildcard_types(self) -> List[str]:
|
||||
"""Returns a list of event types which require us to fetch all state keys.
|
||||
This will be empty unless `has_wildcards` returns True.
|
||||
|
||||
Returns:
|
||||
A list of event types.
|
||||
"""
|
||||
return [t for t, state_keys in self.types.items() if state_keys is None]
|
||||
|
||||
def get_member_split(self) -> Tuple["StateFilter", "StateFilter"]:
|
||||
"""Return the filter split into two: one which assumes it's exclusively
|
||||
matching against member state, and one which assumes it's matching
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue