summaryrefslogtreecommitdiffstats
path: root/Modules/_datetimemodule.c
diff options
context:
space:
mode:
authorPaul Ganssle <pganssle@users.noreply.github.com>2019-02-04 19:42:04 (GMT)
committerAlexander Belopolsky <abalkin@users.noreply.github.com>2019-02-04 19:42:04 (GMT)
commit89427cd0feae25bbc8693abdccfa6a8c81a2689c (patch)
treec08a1bb264e74eec38f488fa60c3889fae424f2c /Modules/_datetimemodule.c
parentca7d2933a388677cc3bbc621913b479452c0f25a (diff)
downloadcpython-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/_datetimemodule.c')
-rw-r--r--Modules/_datetimemodule.c10
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 *