From 1756f365a9e56efe9df215386c943b76677ff681 Mon Sep 17 00:00:00 2001 From: Maanik Garg Date: Tue, 7 Apr 2026 12:43:37 +0530 Subject: [PATCH] fix: throw specific exception on empty list filters for time filters The _FilterByTime class (used by by_creation_time and by_update_time) was missing the empty list validation that other filter classes already have. Calling contains_any([]) or contains_none([]) on a time filter would silently produce a malformed filter rather than raising a clear error. Added the same WeaviateInvalidInputError check used by _FilterByProperty and _FilterById, plus tests for both contains_any and contains_none on both creation_time and update_time filters. Fixes #933 --- test/collection/test_filter.py | 11 +++++++++++ weaviate/collections/classes/filters.py | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/test/collection/test_filter.py b/test/collection/test_filter.py index a2853cbdc..f2adff72b 100644 --- a/test/collection/test_filter.py +++ b/test/collection/test_filter.py @@ -21,6 +21,17 @@ def test_empty_input_contains_any() -> None: wvc.query.Filter.by_id().contains_any([]) with pytest.raises(weaviate.exceptions.WeaviateInvalidInputError): wvc.query.Filter.by_property("test").contains_any([]) + with pytest.raises(weaviate.exceptions.WeaviateInvalidInputError): + wvc.query.Filter.by_creation_time().contains_any([]) + with pytest.raises(weaviate.exceptions.WeaviateInvalidInputError): + wvc.query.Filter.by_update_time().contains_any([]) + + +def test_empty_input_contains_none_time() -> None: + with pytest.raises(weaviate.exceptions.WeaviateInvalidInputError): + wvc.query.Filter.by_creation_time().contains_none([]) + with pytest.raises(weaviate.exceptions.WeaviateInvalidInputError): + wvc.query.Filter.by_update_time().contains_none([]) def test_empty_input_contains_all() -> None: diff --git a/weaviate/collections/classes/filters.py b/weaviate/collections/classes/filters.py index a05d9eab2..215329d72 100644 --- a/weaviate/collections/classes/filters.py +++ b/weaviate/collections/classes/filters.py @@ -320,6 +320,8 @@ def contains_any(self, dates: List[datetime]) -> _Filters: Args: dates: List of dates to filter on. """ + if len(dates) == 0: + raise WeaviateInvalidInputError("Filter contains_any must have at least one value") return _FilterValue( target=self._target_path(), value=dates, @@ -332,6 +334,8 @@ def contains_none(self, dates: List[datetime]) -> _Filters: Args: dates: List of dates to filter on. """ + if len(dates) == 0: + raise WeaviateInvalidInputError("Filter contains_none must have at least one value") return _FilterValue( target=self._target_path(), value=dates,