Skip to content

Commit da2d10e

Browse files
authored
Add on_clear handlers to (Global)Table and ChangeloggedSet (#645)
* #601 - Adding on_clear handlers to Table and ChangeloggedSet * Fix formatting * Fix formatting
1 parent f5cc1a1 commit da2d10e

4 files changed

Lines changed: 32 additions & 1 deletion

File tree

faust/tables/sets.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ def on_discard(self, value: VT) -> None:
8484
def on_change(self, added: Set[VT], removed: Set[VT]) -> None:
8585
self.manager.send_changelog_event(self.key, OPERATION_UPDATE, [added, removed])
8686

87+
def on_clear(self) -> None:
88+
self.manager.send_changelog_event(
89+
self.key, OPERATION_UPDATE, [set(), set(self.data)]
90+
)
91+
8792
def sync_from_storage(self, value: Any) -> None:
8893
self.data = set(value)
8994

faust/tables/table.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ def on_key_del(self, key: KT) -> None:
9393
self._maybe_del_key_ttl(key, partition)
9494
self._sensor_on_del(self, key)
9595

96+
def on_clear(self) -> None:
97+
"""Call when the table is cleared."""
98+
for key in self:
99+
self.on_key_del(key)
100+
96101
def as_ansitable(self, title: str = "{table.name}", **kwargs: Any) -> str:
97-
"""Draw table as a a terminal ANSI table."""
102+
"""Draw table as a terminal ANSI table."""
98103
return dict_as_ansitable(self, title=title.format(table=self), **kwargs)

tests/unit/tables/test_sets.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@ def test_on_discard(self, *, cset, manager, key):
105105
"value",
106106
)
107107

108+
def test_on_clear(self, *, cset, manager, key):
109+
cset.data.add("value")
110+
cset.clear()
111+
manager.send_changelog_event.assert_called_once_with(
112+
key,
113+
OPERATION_UPDATE,
114+
[set(), {"value"}],
115+
)
116+
108117
def test_on_change__diff(self, *, cset, manager, key):
109118
cset.data.update({1, 2, 3, 4})
110119
cset.difference_update({2, 3, 4, 5, 6})

tests/unit/tables/test_table.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,18 @@ def test_del_key(self, *, table):
139139
table.send_changelog.asssert_called_once_with(partition, "foo", None)
140140
assert "foo" not in table.data
141141

142+
def test_clear(self, *, table):
143+
with patch("faust.tables.base.current_event") as current_event:
144+
event = current_event.return_value
145+
partition = event.message.partition
146+
table.send_changelog = Mock(name="send_changelog")
147+
table.data["foo"] = 3
148+
table.data["bar"] = 4
149+
table.clear()
150+
table.send_changelog.asssert_called_once_with(partition, "foo", None)
151+
table.send_changelog.asssert_called_once_with(partition, "bar", None)
152+
assert not table.data
153+
142154
def test_as_ansitable(self, *, table):
143155
table.data["foo"] = "bar"
144156
table.data["bar"] = "baz"

0 commit comments

Comments
 (0)