From 725619faf5be32479144ead01d6bfdd63008a172 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 25 Jun 2023 10:15:22 -0400 Subject: [PATCH] db: Improve filtering Tables I scheduled the filter query with first=True so it can run without a long delay during scanning. Additionally, I cancel any pending filter calls to discard stale arguments that otherwise would be processed. Signed-off-by: Anna Schumaker --- emmental/db/table.py | 3 ++- tests/db/test_table.py | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/emmental/db/table.py b/emmental/db/table.py index 61fa198..920d6ff 100644 --- a/emmental/db/table.py +++ b/emmental/db/table.py @@ -227,7 +227,8 @@ class Table(Gtk.FilterListModel): def filter(self, glob: str | None, *, now: bool = False) -> None: """Filter the displayed Rows.""" if glob is not None: - self.queue.push(self._filter_idle, glob, now=now) + self.queue.cancel_task(self._filter_idle) + self.queue.push(self._filter_idle, glob, now=now, first=True) else: self.get_filter().keys = None diff --git a/tests/db/test_table.py b/tests/db/test_table.py index 584397c..1ee2f88 100644 --- a/tests/db/test_table.py +++ b/tests/db/test_table.py @@ -368,9 +368,13 @@ class TestTableFunctions(tests.util.TestCase): """Test filtering Rows in the table.""" for n in [1, 121, 212, 333]: self.table.create(number=n) + self.table.queue.push(unittest.mock.Mock()) + + self.table.filter("*3*") + self.assertIsNone(self.table.get_filter().keys) + self.assertEqual(self.table.queue[0], (self.table._filter_idle, "*3*")) self.table.filter("*2*") - self.assertIsNone(self.table.get_filter().keys) self.assertEqual(self.table.queue[0], (self.table._filter_idle, "*2*")) self.table.queue.complete()