diff --git a/python/pyarrow/scalar.pxi b/python/pyarrow/scalar.pxi index 0693f04fb73..73964d243a8 100644 --- a/python/pyarrow/scalar.pxi +++ b/python/pyarrow/scalar.pxi @@ -345,6 +345,11 @@ cdef class Date32Scalar(Scalar): Concrete class for date32 scalars. """ + @property + def value(self): + cdef CDate32Scalar* sp = self.wrapped.get() + return sp.value if sp.is_valid else None + def as_py(self): """ Return this value as a Python datetime.datetime instance. @@ -365,6 +370,11 @@ cdef class Date64Scalar(Scalar): Concrete class for date64 scalars. """ + @property + def value(self): + cdef CDate64Scalar* sp = self.wrapped.get() + return sp.value if sp.is_valid else None + def as_py(self): """ Return this value as a Python datetime.datetime instance. diff --git a/python/pyarrow/tests/test_scalars.py b/python/pyarrow/tests/test_scalars.py index 9fa9d008a74..f417d58c8c5 100644 --- a/python/pyarrow/tests/test_scalars.py +++ b/python/pyarrow/tests/test_scalars.py @@ -244,14 +244,32 @@ def test_time_from_datetime_time(): @pytest.mark.parametrize(['value', 'time_type'], [ (1, pa.time32("s")), (2**30, pa.time32("s")), + (None, pa.time32("s")), (1, pa.time32("ms")), (2**30, pa.time32("ms")), + (None, pa.time32("ms")), (1, pa.time64("us")), (2**62, pa.time64("us")), + (None, pa.time64("us")), (1, pa.time64("ns")), (2**62, pa.time64("ns")), + (None, pa.time64("ns")), + (1, pa.date32()), + (2**30, pa.date32()), + (None, pa.date32()), + (1, pa.date64()), + (2**62, pa.date64()), + (None, pa.date64()), + (1, pa.timestamp("ns")), + (2**62, pa.timestamp("ns")), + (None, pa.timestamp("ns")), + (1, pa.duration("ns")), + (2**62, pa.duration("ns")), + (None, pa.duration("ns")), + ((1, 2, -3), pa.month_day_nano_interval()), + (None, pa.month_day_nano_interval()), ]) -def test_time_values(value, time_type): +def test_temporal_values(value, time_type: pa.DataType): time_scalar = pa.scalar(value, type=time_type) assert time_scalar.value == value