From b5c6b02181a4b700419a4c16317eea2ee2fe607d Mon Sep 17 00:00:00 2001 From: JP Hwang Date: Wed, 10 Dec 2025 15:41:08 +0100 Subject: [PATCH 1/2] TTL parameter name proposals --- .../collections/classes/config_object_ttl.py | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/weaviate/collections/classes/config_object_ttl.py b/weaviate/collections/classes/config_object_ttl.py index 24ed9f843..654bfe274 100644 --- a/weaviate/collections/classes/config_object_ttl.py +++ b/weaviate/collections/classes/config_object_ttl.py @@ -17,60 +17,60 @@ class _ObjectTTL: @staticmethod def delete_by_update_time( time_to_live: int | datetime.timedelta, - post_search_filter: Optional[bool] = None, + filter_expired_objects: Optional[bool] = None, ) -> _ObjectTTLCreate: """Create an `ObjectTimeToLiveConfig` object to be used when defining the object time-to-live configuration of Weaviate. Args: - time_to_live: The time-to-live for objects in seconds. - post_search_filter: If enabled search results will be filtered to remove expired objects that have not yet been deleted. + time_to_live: The time-to-live for objects in relation to their last update time (seconds). Must be positive. + filter_expired_objects: If enabled, exclude expired but not deleted objects from search results. """ if isinstance(time_to_live, datetime.timedelta): time_to_live = int(time_to_live.total_seconds()) return _ObjectTTLCreate( deleteOn="_lastUpdateTimeUnix", - postSearchFilter=post_search_filter, + postSearchFilter=filter_expired_objects, defaultTtl=time_to_live, ) @staticmethod def delete_by_creation_time( time_to_live: int | datetime.timedelta, - post_search_filter: Optional[bool] = None, + filter_expired_objects: Optional[bool] = None, ) -> _ObjectTTLCreate: """Create an `ObjectTimeToLiveConfig` object to be used when defining the object time-to-live configuration of Weaviate. Args: - time_to_live: The time-to-live for objects in seconds. Must be a positive value. - post_search_filter: If enabled search results will be filtered to remove expired objects that have not yet been deleted. + time_to_live: The time-to-live for objects in relation to their creation time (seconds). Must be positive. + filter_expired_objects: If enabled, exclude expired but not deleted objects from search results. """ if isinstance(time_to_live, datetime.timedelta): time_to_live = int(time_to_live.total_seconds()) return _ObjectTTLCreate( deleteOn="_creationTimeUnix", - postSearchFilter=post_search_filter, + postSearchFilter=filter_expired_objects, defaultTtl=time_to_live, ) @staticmethod def delete_by_date_property( - date_property: str, - time_to_live_after_date: Optional[int | datetime.timedelta] = None, - post_search_filter: Optional[bool] = None, + property_name: str, + ttl_offset: Optional[int | datetime.timedelta] = None, + filter_expired_objects: Optional[bool] = None, ) -> _ObjectTTLCreate: """Create an Object ttl config for a custom date property. Args: - date_property: The name of the date property to use for object expiration. - time_to_live_after_date: The time-to-live for objects in seconds after the date property value. Can be negative - post_search_filter: If enabled search results will be filtered to remove expired objects that have not yet been deleted. + property_name: The name of the date property to use for object expiration. + ttl_offset: The time-to-live for objects relative to the date (seconds if integer). Can be negative for indicating that objects should expire before the date property value. + filter_expired_objects: If enabled, exclude expired but not deleted objects from search results. """ - if isinstance(time_to_live_after_date, datetime.timedelta): - time_to_live_after_date = int(time_to_live_after_date.total_seconds()) - if time_to_live_after_date is None: - time_to_live_after_date = 0 + if isinstance(ttl_offset, datetime.timedelta): + ttl_offset = int(ttl_offset.total_seconds()) + if ttl_offset is None: + ttl_offset = 0 return _ObjectTTLCreate( - deleteOn=date_property, - postSearchFilter=post_search_filter, - defaultTtl=time_to_live_after_date, + deleteOn=property_name, + postSearchFilter=filter_expired_objects, + defaultTtl=ttl_offset, ) From e2e0230e29c5c14a2fa362a4e28b4ff38e0e0dcb Mon Sep 17 00:00:00 2001 From: JP Hwang Date: Wed, 10 Dec 2025 17:20:04 +0100 Subject: [PATCH 2/2] Rename params to match server --- integration/test_collection_config.py | 10 +++++----- weaviate/collections/classes/config.py | 2 +- weaviate/collections/classes/config_methods.py | 2 +- weaviate/collections/classes/config_object_ttl.py | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/integration/test_collection_config.py b/integration/test_collection_config.py index 85f23c24a..f51675549 100644 --- a/integration/test_collection_config.py +++ b/integration/test_collection_config.py @@ -1842,7 +1842,7 @@ def test_object_ttl_creation(collection_factory: CollectionFactory) -> None: collection = collection_factory( object_ttl=Configure.ObjectTTL.delete_by_creation_time( time_to_live=datetime.timedelta(days=30), - post_search_filter=True, + filter_expired_objects=True, ), inverted_index_config=Configure.inverted_index(index_timestamps=True), ) @@ -1861,7 +1861,7 @@ def test_object_ttl_update(collection_factory: CollectionFactory) -> None: collection = collection_factory( object_ttl=Configure.ObjectTTL.delete_by_update_time( time_to_live=datetime.timedelta(days=30), - post_search_filter=True, + filter_expired_objects=True, ), inverted_index_config=Configure.inverted_index(index_timestamps=True), ) @@ -1869,7 +1869,7 @@ def test_object_ttl_update(collection_factory: CollectionFactory) -> None: config = collection.config.get() assert config.object_ttl_config is not None assert config.object_ttl_config.delete_on == "updateTime" - assert config.object_ttl_config.post_search_filter + assert config.object_ttl_config.filter_expired_objects assert config.object_ttl_config.time_to_live == datetime.timedelta(days=30) @@ -1881,7 +1881,7 @@ def test_object_ttl_custom(collection_factory: CollectionFactory) -> None: collection = collection_factory( properties=[wvc.config.Property(name="customDate", data_type=DataType.DATE)], object_ttl=Configure.ObjectTTL.delete_by_date_property( - date_property="customDate", post_search_filter=False, time_to_live_after_date=-1 + property_name="customDate", filter_expired_objects=False, ttl_offset=-1 ), inverted_index_config=Configure.inverted_index(index_timestamps=True), ) @@ -1890,4 +1890,4 @@ def test_object_ttl_custom(collection_factory: CollectionFactory) -> None: assert config.object_ttl_config is not None assert config.object_ttl_config.delete_on == "customDate" assert config.object_ttl_config.time_to_live == datetime.timedelta(seconds=-1) - assert not config.object_ttl_config.post_search_filter + assert not config.object_ttl_config.filter_expired_objects diff --git a/weaviate/collections/classes/config.py b/weaviate/collections/classes/config.py index 13b2309b3..48b32fda1 100644 --- a/weaviate/collections/classes/config.py +++ b/weaviate/collections/classes/config.py @@ -1712,7 +1712,7 @@ def to_dict(self) -> Dict: class _ObjectTTLConfig(_ConfigBase): enabled: bool time_to_live: Optional[datetime.timedelta] - post_search_filter: bool + filter_expired_objects: bool delete_on: Union[str, Literal["updateTime"], Literal["creationTime"]] diff --git a/weaviate/collections/classes/config_methods.py b/weaviate/collections/classes/config_methods.py index a47f24377..8d4f0c4ae 100644 --- a/weaviate/collections/classes/config_methods.py +++ b/weaviate/collections/classes/config_methods.py @@ -396,7 +396,7 @@ def _get_object_ttl_config(schema: Dict[str, Any]) -> Optional[_ObjectTTLConfig] return _ObjectTTLConfig( enabled=True, delete_on=delete_on, - post_search_filter=schema["objectTtlConfig"]["postSearchFilter"], + filter_expired_objects=schema["objectTtlConfig"]["filterExpiredObjects"], time_to_live=time_to_live, ) else: diff --git a/weaviate/collections/classes/config_object_ttl.py b/weaviate/collections/classes/config_object_ttl.py index 654bfe274..1742e44f1 100644 --- a/weaviate/collections/classes/config_object_ttl.py +++ b/weaviate/collections/classes/config_object_ttl.py @@ -6,7 +6,7 @@ class _ObjectTTLCreate(_ConfigCreateModel): enabled: bool = True - postSearchFilter: Optional[bool] + filterExpiredObjects: Optional[bool] deleteOn: Optional[str] defaultTtl: Optional[int] @@ -29,7 +29,7 @@ def delete_by_update_time( time_to_live = int(time_to_live.total_seconds()) return _ObjectTTLCreate( deleteOn="_lastUpdateTimeUnix", - postSearchFilter=filter_expired_objects, + filterExpiredObjects=filter_expired_objects, defaultTtl=time_to_live, ) @@ -48,7 +48,7 @@ def delete_by_creation_time( time_to_live = int(time_to_live.total_seconds()) return _ObjectTTLCreate( deleteOn="_creationTimeUnix", - postSearchFilter=filter_expired_objects, + filterExpiredObjects=filter_expired_objects, defaultTtl=time_to_live, ) @@ -71,6 +71,6 @@ def delete_by_date_property( ttl_offset = 0 return _ObjectTTLCreate( deleteOn=property_name, - postSearchFilter=filter_expired_objects, + filterExpiredObjects=filter_expired_objects, defaultTtl=ttl_offset, )