Skip to content

Commit 4c4b1ce

Browse files
fix: Correct scalar validity for null timestamps and empty lists
1 parent 6d48d67 commit 4c4b1ce

4 files changed

Lines changed: 52 additions & 2 deletions

File tree

‎cloudquery/sdk/scalar/list.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def set(self, value: Any):
4242
scalar = self._type()
4343
scalar.set(item)
4444
self._value.append(scalar)
45-
self._valid = True
45+
self._valid = True
4646
return
4747

4848
raise ScalarInvalidTypeError(f"Invalid type {type(value)} for List")

‎cloudquery/sdk/scalar/timestamp.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def value(self):
1818

1919
def set(self, value: Any):
2020
if value is None:
21+
self._valid = False
2122
return
2223

2324
if isinstance(value, Timestamp):

‎tests/scalar/list.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from cloudquery.sdk.scalar import String, Bool, List
24

35

@@ -41,3 +43,23 @@ def test_list_eq_invalid():
4143
l2.set([String(False)])
4244

4345
assert l1 == l2
46+
47+
48+
@pytest.mark.parametrize("empty", [[], ()])
49+
@pytest.mark.parametrize("previous", [None, ["old value"]])
50+
def test_empty_list_is_valid_independent_of_previous_value(empty, previous):
51+
scalar = List(String)
52+
if previous is not None:
53+
scalar.set(previous)
54+
scalar.set(empty)
55+
assert scalar.is_valid
56+
assert len(scalar) == 0
57+
assert str(scalar) == "[]"
58+
59+
scalar.set(None)
60+
assert not scalar.is_valid
61+
assert str(scalar) == "null"
62+
63+
scalar.set(empty)
64+
assert scalar.is_valid
65+
assert str(scalar) == "[]"

‎tests/scalar/timestamp.py‎

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pytest
2-
from datetime import datetime
2+
from datetime import datetime, time
33
from cloudquery.sdk.scalar import Timestamp
44
import pandas as pd
55

@@ -56,3 +56,30 @@ def test_timestamp_set(input_value, expected_scalar):
5656
b = Timestamp()
5757
b.set(input_value)
5858
assert b == expected_scalar, f"{b} and {expected_scalar} are not equal"
59+
60+
61+
@pytest.mark.parametrize(
62+
"input_value",
63+
[
64+
"2026-10-21T10:00:00Z",
65+
datetime(2026, 10, 21, 10),
66+
pd.Timestamp("2026-10-21T10:00:00Z"),
67+
time(10, 30),
68+
],
69+
)
70+
def test_timestamp_set_none_invalidates_and_can_be_reused(input_value):
71+
scalar = Timestamp()
72+
assert not scalar.is_valid
73+
scalar.set(input_value)
74+
assert scalar.is_valid
75+
76+
scalar.set(None)
77+
assert not scalar.is_valid
78+
assert str(scalar) == "null"
79+
80+
scalar.set(None)
81+
assert not scalar.is_valid
82+
83+
scalar.set(input_value)
84+
assert scalar.is_valid
85+
assert scalar == Timestamp(True, input_value)

0 commit comments

Comments
 (0)