Skip to content

Commit 3bdeca3

Browse files
authored
Merge pull request #1926 from weaviate/jose/object-ttl-to-dict
Convert from datetime.timedelta to int in objectTTL properties.
2 parents 522e1ff + 2a1f6c3 commit 3bdeca3

2 files changed

Lines changed: 90 additions & 0 deletions

File tree

test/collection/test_config.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import timedelta
12
from typing import List, Union
23

34
import pytest
@@ -11,6 +12,7 @@
1112
Vectorizers,
1213
_CollectionConfigCreate,
1314
_GenerativeProvider,
15+
_ObjectTTLConfig,
1416
_RerankerProvider,
1517
_VectorizerConfigCreate,
1618
)
@@ -2519,3 +2521,87 @@ def test_config_with_vectors(vector_config: List[_VectorConfigCreate], expected:
25192521
"class": "Test",
25202522
"vectorConfig": expected,
25212523
}
2524+
2525+
2526+
TEST_OBJECT_TTL_CONFIG_TO_DICT_PARAMETERS = [
2527+
# delete_by_creation_time
2528+
(
2529+
_ObjectTTLConfig(
2530+
enabled=True,
2531+
time_to_live=timedelta(hours=24),
2532+
filter_expired_objects=True,
2533+
delete_on="creationTime",
2534+
),
2535+
{
2536+
"enabled": True,
2537+
"timeToLive": 86400,
2538+
"filterExpiredObjects": True,
2539+
"deleteOn": "creationTime",
2540+
},
2541+
),
2542+
# delete_by_update_time
2543+
(
2544+
_ObjectTTLConfig(
2545+
enabled=True,
2546+
time_to_live=timedelta(days=7),
2547+
filter_expired_objects=False,
2548+
delete_on="updateTime",
2549+
),
2550+
{
2551+
"enabled": True,
2552+
"timeToLive": 604800,
2553+
"filterExpiredObjects": False,
2554+
"deleteOn": "updateTime",
2555+
},
2556+
),
2557+
# delete_by_date_property
2558+
(
2559+
_ObjectTTLConfig(
2560+
enabled=True,
2561+
time_to_live=timedelta(hours=1, minutes=30),
2562+
filter_expired_objects=True,
2563+
delete_on="releaseDate",
2564+
),
2565+
{
2566+
"enabled": True,
2567+
"timeToLive": 5400,
2568+
"filterExpiredObjects": True,
2569+
"deleteOn": "releaseDate",
2570+
},
2571+
),
2572+
# None time_to_live
2573+
(
2574+
_ObjectTTLConfig(
2575+
enabled=True,
2576+
time_to_live=None,
2577+
filter_expired_objects=False,
2578+
delete_on="creationTime",
2579+
),
2580+
{
2581+
"enabled": True,
2582+
"filterExpiredObjects": False,
2583+
"deleteOn": "creationTime",
2584+
},
2585+
),
2586+
# negative offset (delete_by_date_property with offset before date)
2587+
(
2588+
_ObjectTTLConfig(
2589+
enabled=True,
2590+
time_to_live=timedelta(seconds=-3600),
2591+
filter_expired_objects=True,
2592+
delete_on="eventDate",
2593+
),
2594+
{
2595+
"enabled": True,
2596+
"timeToLive": -3600,
2597+
"filterExpiredObjects": True,
2598+
"deleteOn": "eventDate",
2599+
},
2600+
),
2601+
]
2602+
2603+
2604+
@pytest.mark.parametrize("ttl_config,expected", TEST_OBJECT_TTL_CONFIG_TO_DICT_PARAMETERS)
2605+
def test_object_ttl_config_to_dict(ttl_config: _ObjectTTLConfig, expected: dict) -> None:
2606+
"""Test that _ObjectTTLConfig.to_dict() properly converts timedelta to seconds."""
2607+
assert ttl_config.to_dict() == expected

weaviate/collections/classes/config_base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from abc import abstractmethod
22
from dataclasses import dataclass
3+
from datetime import timedelta
34
from enum import Enum
45
from typing import Any, Dict, cast
56

@@ -59,6 +60,9 @@ def to_dict(self) -> dict:
5960
if isinstance(v, Enum):
6061
out[key] = v.value
6162
continue
63+
if isinstance(v, timedelta):
64+
out[key] = int(v.total_seconds())
65+
continue
6266
if isinstance(v, dict):
6367
out[key] = {
6468
k: v.to_dict() if isinstance(v, _ConfigBase) else v for k, v in v.items()

0 commit comments

Comments
 (0)