diff options
author | Paul Ganssle <pganssle@users.noreply.github.com> | 2019-02-04 19:42:04 (GMT) |
---|---|---|
committer | Alexander Belopolsky <abalkin@users.noreply.github.com> | 2019-02-04 19:42:04 (GMT) |
commit | 89427cd0feae25bbc8693abdccfa6a8c81a2689c (patch) | |
tree | c08a1bb264e74eec38f488fa60c3889fae424f2c /Modules | |
parent | ca7d2933a388677cc3bbc621913b479452c0f25a (diff) | |
download | cpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.zip cpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.tar.gz cpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.tar.bz2 |
bpo-32417: Make timedelta arithmetic respect subclasses (#10902)
* Make timedelta return subclass types
Previously timedelta would always return the `date` and `datetime`
types, regardless of what it is added to. This makes it return
an object of the type it was added to.
* Add tests for timedelta arithmetic on subclasses
* Make pure python timedelta return subclass types
* Add test for fromtimestamp with tz argument
* Add tests for subclass behavior in now
* Add news entry.
Fixes:
bpo-32417
bpo-35364
* More descriptive variable names in tests
Addresses Victor's comments
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_datetimemodule.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 7997758..c1557b5 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3004,7 +3004,8 @@ add_date_timedelta(PyDateTime_Date *date, PyDateTime_Delta *delta, int negate) int day = GET_DAY(date) + (negate ? -deltadays : deltadays); if (normalize_date(&year, &month, &day) >= 0) - result = new_date(year, month, day); + result = new_date_subclass_ex(year, month, day, + (PyObject* )Py_TYPE(date)); return result; } @@ -5166,9 +5167,10 @@ add_datetime_timedelta(PyDateTime_DateTime *date, PyDateTime_Delta *delta, return NULL; } - return new_datetime(year, month, day, - hour, minute, second, microsecond, - HASTZINFO(date) ? date->tzinfo : Py_None, 0); + return new_datetime_subclass_ex(year, month, day, + hour, minute, second, microsecond, + HASTZINFO(date) ? date->tzinfo : Py_None, + (PyObject *)Py_TYPE(date)); } static PyObject * |