Spaces:
Runtime error
Runtime error
| 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 | |