aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Includes/cpython/datetime.pxd
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
committeralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /contrib/tools/cython/Cython/Includes/cpython/datetime.pxd
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
downloadydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz
add ymake export to ydb
Diffstat (limited to 'contrib/tools/cython/Cython/Includes/cpython/datetime.pxd')
-rw-r--r--contrib/tools/cython/Cython/Includes/cpython/datetime.pxd212
1 files changed, 212 insertions, 0 deletions
diff --git a/contrib/tools/cython/Cython/Includes/cpython/datetime.pxd b/contrib/tools/cython/Cython/Includes/cpython/datetime.pxd
new file mode 100644
index 0000000000..cd0f90719b
--- /dev/null
+++ b/contrib/tools/cython/Cython/Includes/cpython/datetime.pxd
@@ -0,0 +1,212 @@
+from cpython.object cimport PyObject
+
+cdef extern from "Python.h":
+ ctypedef struct PyTypeObject:
+ pass
+
+cdef extern from "datetime.h":
+
+ ctypedef extern class datetime.date[object PyDateTime_Date]:
+ pass
+
+ ctypedef extern class datetime.time[object PyDateTime_Time]:
+ pass
+
+ ctypedef extern class datetime.datetime[object PyDateTime_DateTime]:
+ pass
+
+ ctypedef extern class datetime.timedelta[object PyDateTime_Delta]:
+ pass
+
+ ctypedef extern class datetime.tzinfo[object PyDateTime_TZInfo]:
+ pass
+
+ ctypedef struct PyDateTime_Date:
+ pass
+
+ ctypedef struct PyDateTime_Time:
+ char hastzinfo
+ PyObject *tzinfo
+
+ ctypedef struct PyDateTime_DateTime:
+ char hastzinfo
+ PyObject *tzinfo
+
+ ctypedef struct PyDateTime_Delta:
+ int days
+ int seconds
+ int microseconds
+
+ # Define structure for C API.
+ ctypedef struct PyDateTime_CAPI:
+ # type objects
+ PyTypeObject *DateType
+ PyTypeObject *DateTimeType
+ PyTypeObject *TimeType
+ PyTypeObject *DeltaType
+ PyTypeObject *TZInfoType
+
+ # constructors
+ object (*Date_FromDate)(int, int, int, PyTypeObject*)
+ object (*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, object, PyTypeObject*)
+ object (*Time_FromTime)(int, int, int, int, object, PyTypeObject*)
+ object (*Delta_FromDelta)(int, int, int, int, PyTypeObject*)
+
+ # constructors for the DB API
+ object (*DateTime_FromTimestamp)(object, object, object)
+ object (*Date_FromTimestamp)(object, object)
+
+ # Check type of the object.
+ bint PyDate_Check(object op)
+ bint PyDate_CheckExact(object op)
+
+ bint PyDateTime_Check(object op)
+ bint PyDateTime_CheckExact(object op)
+
+ bint PyTime_Check(object op)
+ bint PyTime_CheckExact(object op)
+
+ bint PyDelta_Check(object op)
+ bint PyDelta_CheckExact(object op)
+
+ bint PyTZInfo_Check(object op)
+ bint PyTZInfo_CheckExact(object op)
+
+ # Getters for date and datetime (C macros).
+ int PyDateTime_GET_YEAR(object o)
+ int PyDateTime_GET_MONTH(object o)
+ int PyDateTime_GET_DAY(object o)
+
+ # Getters for datetime (C macros).
+ int PyDateTime_DATE_GET_HOUR(object o)
+ int PyDateTime_DATE_GET_MINUTE(object o)
+ int PyDateTime_DATE_GET_SECOND(object o)
+ int PyDateTime_DATE_GET_MICROSECOND(object o)
+
+ # Getters for time (C macros).
+ int PyDateTime_TIME_GET_HOUR(object o)
+ int PyDateTime_TIME_GET_MINUTE(object o)
+ int PyDateTime_TIME_GET_SECOND(object o)
+ int PyDateTime_TIME_GET_MICROSECOND(object o)
+
+ # Getters for timedelta (C macros).
+ int PyDateTime_DELTA_GET_DAYS(object o)
+ int PyDateTime_DELTA_GET_SECONDS(object o)
+ int PyDateTime_DELTA_GET_MICROSECONDS(object o)
+
+ # PyDateTime CAPI object.
+ PyDateTime_CAPI *PyDateTimeAPI
+
+ void PyDateTime_IMPORT()
+
+# Datetime C API initialization function.
+# You have to call it before any usage of DateTime CAPI functions.
+cdef inline void import_datetime():
+ PyDateTime_IMPORT
+
+# Create date object using DateTime CAPI factory function.
+# Note, there are no range checks for any of the arguments.
+cdef inline object date_new(int year, int month, int day):
+ return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)
+
+# Create time object using DateTime CAPI factory function
+# Note, there are no range checks for any of the arguments.
+cdef inline object time_new(int hour, int minute, int second, int microsecond, object tz):
+ return PyDateTimeAPI.Time_FromTime(hour, minute, second, microsecond, tz, PyDateTimeAPI.TimeType)
+
+# Create datetime object using DateTime CAPI factory function.
+# Note, there are no range checks for any of the arguments.
+cdef inline object datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz):
+ return PyDateTimeAPI.DateTime_FromDateAndTime(year, month, day, hour, minute, second, microsecond, tz, PyDateTimeAPI.DateTimeType)
+
+# Create timedelta object using DateTime CAPI factory function.
+# Note, there are no range checks for any of the arguments.
+cdef inline object timedelta_new(int days, int seconds, int useconds):
+ return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)
+
+# More recognizable getters for date/time/datetime/timedelta.
+# There are no setters because datetime.h hasn't them.
+# This is because of immutable nature of these objects by design.
+# If you would change time/date/datetime/timedelta object you need to recreate.
+
+# Get tzinfo of time
+cdef inline object time_tzinfo(object o):
+ if (<PyDateTime_Time*>o).hastzinfo:
+ return <object>(<PyDateTime_Time*>o).tzinfo
+ else:
+ return None
+
+# Get tzinfo of datetime
+cdef inline object datetime_tzinfo(object o):
+ if (<PyDateTime_DateTime*>o).hastzinfo:
+ return <object>(<PyDateTime_DateTime*>o).tzinfo
+ else:
+ return None
+
+# Get year of date
+cdef inline int date_year(object o):
+ return PyDateTime_GET_YEAR(o)
+
+# Get month of date
+cdef inline int date_month(object o):
+ return PyDateTime_GET_MONTH(o)
+
+# Get day of date
+cdef inline int date_day(object o):
+ return PyDateTime_GET_DAY(o)
+
+# Get year of datetime
+cdef inline int datetime_year(object o):
+ return PyDateTime_GET_YEAR(o)
+
+# Get month of datetime
+cdef inline int datetime_month(object o):
+ return PyDateTime_GET_MONTH(o)
+
+# Get day of datetime
+cdef inline int datetime_day(object o):
+ return PyDateTime_GET_DAY(o)
+
+# Get hour of time
+cdef inline int time_hour(object o):
+ return PyDateTime_TIME_GET_HOUR(o)
+
+# Get minute of time
+cdef inline int time_minute(object o):
+ return PyDateTime_TIME_GET_MINUTE(o)
+
+# Get second of time
+cdef inline int time_second(object o):
+ return PyDateTime_TIME_GET_SECOND(o)
+
+# Get microsecond of time
+cdef inline int time_microsecond(object o):
+ return PyDateTime_TIME_GET_MICROSECOND(o)
+
+# Get hour of datetime
+cdef inline int datetime_hour(object o):
+ return PyDateTime_DATE_GET_HOUR(o)
+
+# Get minute of datetime
+cdef inline int datetime_minute(object o):
+ return PyDateTime_DATE_GET_MINUTE(o)
+
+# Get second of datetime
+cdef inline int datetime_second(object o):
+ return PyDateTime_DATE_GET_SECOND(o)
+
+# Get microsecond of datetime
+cdef inline int datetime_microsecond(object o):
+ return PyDateTime_DATE_GET_MICROSECOND(o)
+
+# Get days of timedelta
+cdef inline int timedelta_days(object o):
+ return (<PyDateTime_Delta*>o).days
+
+# Get seconds of timedelta
+cdef inline int timedelta_seconds(object o):
+ return (<PyDateTime_Delta*>o).seconds
+
+# Get microseconds of timedelta
+cdef inline int timedelta_microseconds(object o):
+ return (<PyDateTime_Delta*>o).microseconds