Index: third_party/cython/src/Cython/Includes/cpython/datetime.pxd |
diff --git a/third_party/cython/src/Cython/Includes/cpython/datetime.pxd b/third_party/cython/src/Cython/Includes/cpython/datetime.pxd |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3c6f8a7f3969251e83ba3f303b84e4c124eae008 |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Includes/cpython/datetime.pxd |
@@ -0,0 +1,212 @@ |
+from cpython.ref 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 |