mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
bpo-36025: Fix PyDate_FromTimestamp API (GH-11922)
In the process of converting the date.fromtimestamp function to use argument clinic in GH-8535, the C API for PyDate_FromTimestamp was inadvertently changed to expect a timestamp object rather than an argument tuple. This PR fixes this backwards-incompatible change by adding a new wrapper function for the C API function that unwraps the argument tuple and passes it to the underlying function. This PR also adds tests for both PyDate_FromTimestamp and PyDateTime_FromTimestamp to prevent any further regressions.
This commit is contained in:
parent
5c403b2035
commit
4d8c8c0ad6
4 changed files with 126 additions and 2 deletions
|
@ -2921,6 +2921,23 @@ datetime_date_fromtimestamp(PyTypeObject *type, PyObject *timestamp)
|
|||
return date_fromtimestamp((PyObject *) type, timestamp);
|
||||
}
|
||||
|
||||
/* bpo-36025: This is a wrapper for API compatibility with the public C API,
|
||||
* which expects a function that takes an *args tuple, whereas the argument
|
||||
* clinic generates code that takes METH_O.
|
||||
*/
|
||||
static PyObject *
|
||||
datetime_date_fromtimestamp_capi(PyObject *cls, PyObject *args)
|
||||
{
|
||||
PyObject *timestamp;
|
||||
PyObject *result = NULL;
|
||||
|
||||
if (PyArg_UnpackTuple(args, "fromtimestamp", 1, 1, ×tamp)) {
|
||||
result = date_fromtimestamp(cls, timestamp);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Return new date from proleptic Gregorian ordinal. Raises ValueError if
|
||||
* the ordinal is out of range.
|
||||
*/
|
||||
|
@ -6275,7 +6292,7 @@ static PyDateTime_CAPI CAPI = {
|
|||
new_delta_ex,
|
||||
new_timezone,
|
||||
datetime_fromtimestamp,
|
||||
date_fromtimestamp,
|
||||
datetime_date_fromtimestamp_capi,
|
||||
new_datetime_ex2,
|
||||
new_time_ex2
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue