Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cloudquery/sdk/scalar/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def set(self, value: Any):
scalar = self._type()
scalar.set(item)
self._value.append(scalar)
self._valid = True
self._valid = True
return

raise ScalarInvalidTypeError(f"Invalid type {type(value)} for List")
Expand Down
1 change: 1 addition & 0 deletions cloudquery/sdk/scalar/timestamp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def value(self):

def set(self, value: Any):
if value is None:
self._valid = False
return

if isinstance(value, Timestamp):
Expand Down
22 changes: 22 additions & 0 deletions tests/scalar/list.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import pytest

from cloudquery.sdk.scalar import String, Bool, List


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

assert l1 == l2


@pytest.mark.parametrize("empty", [[], ()])
@pytest.mark.parametrize("previous", [None, ["old value"]])
def test_empty_list_is_valid_independent_of_previous_value(empty, previous):
scalar = List(String)
if previous is not None:
scalar.set(previous)
scalar.set(empty)
assert scalar.is_valid
assert len(scalar) == 0
assert str(scalar) == "[]"

scalar.set(None)
assert not scalar.is_valid
assert str(scalar) == "null"

scalar.set(empty)
assert scalar.is_valid
assert str(scalar) == "[]"
29 changes: 28 additions & 1 deletion tests/scalar/timestamp.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from datetime import datetime
from datetime import datetime, time
from cloudquery.sdk.scalar import Timestamp
import pandas as pd

Expand Down Expand Up @@ -56,3 +56,30 @@ def test_timestamp_set(input_value, expected_scalar):
b = Timestamp()
b.set(input_value)
assert b == expected_scalar, f"{b} and {expected_scalar} are not equal"


@pytest.mark.parametrize(
"input_value",
[
"2026-10-21T10:00:00Z",
datetime(2026, 10, 21, 10),
pd.Timestamp("2026-10-21T10:00:00Z"),
time(10, 30),
],
)
def test_timestamp_set_none_invalidates_and_can_be_reused(input_value):
scalar = Timestamp()
assert not scalar.is_valid
scalar.set(input_value)
assert scalar.is_valid

scalar.set(None)
assert not scalar.is_valid
assert str(scalar) == "null"

scalar.set(None)
assert not scalar.is_valid

scalar.set(input_value)
assert scalar.is_valid
assert scalar == Timestamp(True, input_value)