[Python-checkins] r82073 - in python/branches/py3k: Lib/_strptime.py Lib/test/test_datetime.py Modules/datetimemodule.c
alexander.belopolsky
python-checkins at python.org
Fri Jun 18 20:44:37 CEST 2010
Author: alexander.belopolsky
Date: Fri Jun 18 20:44:37 2010
New Revision: 82073
Log:
Issue #6641: Original commit for this issue, r82053, introduced a
regression making datetime subclass' strptime return datetime rather
than subclass instances. Fixed this bug and a few typos.
Modified:
python/branches/py3k/Lib/_strptime.py
python/branches/py3k/Lib/test/test_datetime.py
python/branches/py3k/Modules/datetimemodule.c
Modified: python/branches/py3k/Lib/_strptime.py
==============================================================================
--- python/branches/py3k/Lib/_strptime.py (original)
+++ python/branches/py3k/Lib/_strptime.py Fri Jun 18 20:44:37 2010
@@ -17,7 +17,6 @@
from re import IGNORECASE, ASCII
from re import escape as re_escape
from datetime import (date as datetime_date,
- datetime as datetime_datetime,
timedelta as datetime_timedelta,
timezone as datetime_timezone)
try:
@@ -297,7 +296,7 @@
def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
- """Return a 2-tuple consisting of a time struct and an int containg
+ """Return a 2-tuple consisting of a time struct and an int containing
the number of microseconds based on the input string and the
format string."""
@@ -483,8 +482,8 @@
tt = _strptime(data_string, format)[0]
return time.struct_time(tt[:9])
-def _strptime_datetime(data_string, format="%a %b %d %H:%M:%S %Y"):
- """Return a datetime instace based on the input string and the
+def _strptime_datetime(class_, data_string, format="%a %b %d %H:%M:%S %Y"):
+ """Return a class_ instance based on the input string and the
format string."""
tt, fraction = _strptime(data_string, format)
gmtoff, tzname = tt[-2:]
@@ -497,4 +496,4 @@
tz = datetime_timezone(tzdelta)
args += (tz,)
- return datetime_datetime(*args)
+ return class_(*args)
Modified: python/branches/py3k/Lib/test/test_datetime.py
==============================================================================
--- python/branches/py3k/Lib/test/test_datetime.py (original)
+++ python/branches/py3k/Lib/test/test_datetime.py Fri Jun 18 20:44:37 2010
@@ -1100,8 +1100,13 @@
self.assertEqual(b.__format__(fmt), 'B')
def test_resolution_info(self):
- self.assertIsInstance(self.theclass.min, self.theclass)
- self.assertIsInstance(self.theclass.max, self.theclass)
+ # XXX: Should min and max respect subclassing?
+ if issubclass(self.theclass, datetime):
+ expected_class = datetime
+ else:
+ expected_class = date
+ self.assertIsInstance(self.theclass.min, expected_class)
+ self.assertIsInstance(self.theclass.max, expected_class)
self.assertIsInstance(self.theclass.resolution, timedelta)
self.assertTrue(self.theclass.max > self.theclass.min)
@@ -1732,9 +1737,11 @@
string = '2004-12-01 13:02:47.197'
format = '%Y-%m-%d %H:%M:%S.%f'
- expected = _strptime._strptime_datetime(string, format)
+ expected = _strptime._strptime_datetime(self.theclass, string, format)
got = self.theclass.strptime(string, format)
self.assertEqual(expected, got)
+ self.assertIs(type(expected), self.theclass)
+ self.assertIs(type(got), self.theclass)
strptime = self.theclass.strptime
self.assertEqual(strptime("+0002", "%z").utcoffset(), 2 * MINUTE)
@@ -1896,6 +1903,12 @@
self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month +
dt1.second - 7)
+class TestSubclassDateTime(TestDateTime):
+ theclass = SubclassDatetime
+ # Override tests not designed for subclass
+ def test_roundtrip(self):
+ pass
+
class SubclassTime(time):
sub_var = 1
Modified: python/branches/py3k/Modules/datetimemodule.c
==============================================================================
--- python/branches/py3k/Modules/datetimemodule.c (original)
+++ python/branches/py3k/Modules/datetimemodule.c Fri Jun 18 20:44:37 2010
@@ -4377,8 +4377,8 @@
if(module == NULL)
return NULL;
}
- return PyObject_CallMethod(module, "_strptime_datetime", "uu",
- string, format);
+ return PyObject_CallMethod(module, "_strptime_datetime", "Ouu",
+ cls, string, format);
}
/* Return new datetime from date/datetime and time arguments. */
More information about the Python-checkins
mailing list