-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Add an approximate difference method to StateFilters #10825
Changes from 3 commits
7dad902
1fe75e6
a05692c
10a7071
d0e14d5
a5fdd46
0e0085c
9d50f05
ace3316
c72c436
bacd394
cd1de9b
6bedcba
42617db
0c8e930
b6274d6
f6b4dc5
0d1c3d8
18714d7
770afea
e119af9
70f646a
c9bb226
093f670
a187c24
4bbe3d1
20bc299
27c3a7a
54d77c9
538f99e
bf202bc
9169d38
1f3008b
3552bc1
4eaf980
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Add an 'approximate difference' method to `StateFilter`. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -105,7 +105,6 @@ def test_get_state_groups(self): | |
| self.assertEqual({ev.event_id for ev in state_list}, {e1.event_id, e2.event_id}) | ||
|
|
||
| def test_get_state_for_event(self): | ||
|
|
||
| # this defaults to a linear DAG as each new injection defaults to whatever | ||
| # forward extremities are currently in the DB for this room. | ||
| e1 = self.inject_state_event(self.room, self.u_alice, EventTypes.Create, "", {}) | ||
|
|
@@ -483,3 +482,88 @@ def test_get_state_for_event(self): | |
|
|
||
| self.assertEqual(is_all, True) | ||
| self.assertDictEqual({(e5.type, e5.state_key): e5.event_id}, state_dict) | ||
|
|
||
| def test_state_filter_difference(self): | ||
| def assert_difference( | ||
| minuend: StateFilter, subtrahend: StateFilter, expected: StateFilter | ||
| ): | ||
| self.assertEqual( | ||
| minuend.approx_difference(subtrahend), | ||
| expected, | ||
| f"StateFilter difference not correct:\n\n\t{minuend!r}\nminus\n\t{subtrahend!r}\nwas\n\t{minuend.approx_difference(subtrahend)}\nexpected\n\t{expected}", | ||
| ) | ||
|
|
||
| # it's not possible to subtract individual state keys from | ||
| # a wildcard | ||
| assert_difference( | ||
| StateFilter.all(), | ||
| StateFilter.from_types( | ||
| ((EventTypes.Member, "@wombat:hs1"), (EventTypes.Member, "@spqr:hs1")) | ||
| ), | ||
| StateFilter.all(), | ||
| ) | ||
| self.assertEqual( | ||
| StateFilter.all().approx_difference( | ||
| StateFilter.from_types( | ||
| ( | ||
| (EventTypes.Member, "@wombat:hs1"), | ||
| (EventTypes.Member, "@spqr:hs1"), | ||
| ) | ||
| ) | ||
| ), | ||
| StateFilter.all(), | ||
| ) | ||
reivilibre marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| # we can subtract wildcards from wildcards | ||
| assert_difference(StateFilter.all(), StateFilter.all(), StateFilter.none()) | ||
| assert_difference( | ||
| StateFilter( | ||
| types=frozendict( | ||
| { | ||
| EventTypes.Member: frozenset(), | ||
| EventTypes.CanonicalAlias: None, | ||
|
||
| } | ||
| ), | ||
| include_others=True, | ||
| ), | ||
| StateFilter( | ||
| types=frozendict({EventTypes.JoinRules: None}), include_others=False | ||
| ), | ||
| StateFilter( | ||
| types=frozendict( | ||
| {EventTypes.Member: frozenset(), EventTypes.JoinRules: frozenset()} | ||
| ), | ||
| include_others=True, | ||
| ), | ||
| ) | ||
|
|
||
| # we can subtract individual state keys, except from wildcards | ||
| assert_difference( | ||
| StateFilter( | ||
| types=frozendict( | ||
| { | ||
| EventTypes.Member: frozenset({"@wombat:hs1", "@kristina:hs2"}), | ||
| EventTypes.CanonicalAlias: None, | ||
| } | ||
| ), | ||
| include_others=False, | ||
| ), | ||
| StateFilter( | ||
| types=frozendict( | ||
| { | ||
| EventTypes.Member: frozenset({"@kristina:hs2"}), | ||
| EventTypes.CanonicalAlias: frozenset({""}), | ||
| } | ||
| ), | ||
| include_others=False, | ||
| ), | ||
| StateFilter( | ||
| types=frozendict( | ||
| { | ||
| EventTypes.Member: frozenset({"@wombat:hs1"}), | ||
| EventTypes.CanonicalAlias: None, | ||
| } | ||
| ), | ||
| include_others=False, | ||
| ), | ||
| ) | ||
Uh oh!
There was an error while loading. Please reload this page.