diff --git a/test/test_util.py b/test/test_util.py index 417cb77ef..d893d4281 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -2,6 +2,7 @@ import uuid as uuid_lib from copy import deepcopy from datetime import datetime, timedelta, timezone +from typing import Optional from unittest.mock import Mock, patch import pytest @@ -458,9 +459,13 @@ def test_is_weaviate_too_old(version: str, too_old: bool): ), # Test handling year 0 (should return datetime.min) ("0000-01-15T14:30:45.123456Z", datetime.min), + # Test empty string (protobuf default for unset string field) -> None + ("", None), ], ) -def test_datetime_from_weaviate_str(input_str: str, expected: datetime) -> None: +def test_datetime_from_weaviate_str( + input_str: str, expected: Optional[datetime] +) -> None: assert _datetime_from_weaviate_str(input_str) == expected diff --git a/weaviate/util.py b/weaviate/util.py index 7ee9e5566..925643690 100644 --- a/weaviate/util.py +++ b/weaviate/util.py @@ -750,7 +750,9 @@ def _datetime_to_string(value: TIME) -> str: return value.isoformat(sep="T", timespec="microseconds") -def _datetime_from_weaviate_str(string: str) -> datetime.datetime: +def _datetime_from_weaviate_str(string: str) -> Optional[datetime.datetime]: + if not string: + return None if string[-1] != "Z": string = "".join(string.rsplit(":", 1))