Skip to content

Commit e1018e5

Browse files
authored
fix all falsey transforms (#280)
1 parent f44fc96 commit e1018e5

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

pyiceberg/transforms.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ def month_func(v: Any) -> int:
382382
else:
383383
raise ValueError(f"Cannot apply month transform for type: {source}")
384384

385-
return lambda v: month_func(v) if v else None
385+
return lambda v: month_func(v) if v is not None else None
386386

387387
def can_transform(self, source: IcebergType) -> bool:
388388
return isinstance(source, (DateType, TimestampType, TimestamptzType))
@@ -424,7 +424,7 @@ def day_func(v: Any) -> int:
424424
else:
425425
raise ValueError(f"Cannot apply day transform for type: {source}")
426426

427-
return lambda v: day_func(v) if v else None
427+
return lambda v: day_func(v) if v is not None else None
428428

429429
def can_transform(self, source: IcebergType) -> bool:
430430
return isinstance(source, (DateType, TimestampType, TimestamptzType))
@@ -464,7 +464,7 @@ def hour_func(v: Any) -> int:
464464
else:
465465
raise ValueError(f"Cannot apply hour transform for type: {source}")
466466

467-
return lambda v: hour_func(v) if v else None
467+
return lambda v: hour_func(v) if v is not None else None
468468

469469
def can_transform(self, source: IcebergType) -> bool:
470470
return isinstance(source, (TimestampType, TimestamptzType))

tests/test_transforms.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,19 @@ def test_negative_value_to_human_string(negative_value: int, time_transform: Tim
236236
assert time_transform.to_human_string(TimestampType(), negative_value) == expected
237237

238238

239+
@pytest.mark.parametrize(
240+
"zero_value,time_transform,expected",
241+
[
242+
(0, YearTransform(), "1970"),
243+
(0, MonthTransform(), "1970-01"),
244+
(0, DayTransform(), "1970-01-01"),
245+
(0, HourTransform(), "1970-01-01-00"),
246+
],
247+
)
248+
def test_zero_value_to_human_string(zero_value: int, time_transform: TimeTransform[Any], expected: str) -> None:
249+
assert time_transform.to_human_string(TimestampType(), zero_value) == expected
250+
251+
239252
@pytest.mark.parametrize(
240253
"type_var",
241254
[
@@ -274,6 +287,12 @@ def test_time_methods(type_var: PrimitiveType) -> None:
274287
(MonthTransform(), TimestamptzType(), -1, -1),
275288
(DayTransform(), TimestampType(), 1512151975038194, 17501),
276289
(DayTransform(), TimestampType(), -1, -1),
290+
(YearTransform(), DateType(), 0, 0),
291+
(MonthTransform(), DateType(), 0, 0),
292+
(DayTransform(), DateType(), 0, 0),
293+
(YearTransform(), TimestampType(), 0, 0),
294+
(MonthTransform(), TimestampType(), 0, 0),
295+
(DayTransform(), TimestampType(), 0, 0),
277296
],
278297
)
279298
def test_time_apply_method(transform: TimeTransform[Any], type_var: PrimitiveType, value: int, expected: int) -> None:
@@ -291,6 +310,7 @@ def test_hour_method(type_var: PrimitiveType) -> None:
291310
assert HourTransform().can_transform(type_var)
292311
assert HourTransform().result_type(type_var) == IntegerType()
293312
assert HourTransform().transform(type_var)(1512151975038194) == 420042 # type: ignore
313+
assert HourTransform().transform(type_var)(0) == 0 # type: ignore
294314
assert HourTransform().dedup_name == "time"
295315

296316

0 commit comments

Comments
 (0)