[pypy-commit] pypy default: Merged in MarkusH/pypy/issue2062 (pull request #325)
arigo
noreply at buildbot.pypy.org
Mon Jun 8 20:41:52 CEST 2015
Author: Armin Rigo <armin.rigo at gmail.com>
Branch:
Changeset: r77966:8c313d798d12
Date: 2015-06-08 20:42 +0200
http://bitbucket.org/pypy/pypy/changeset/8c313d798d12/
Log: Merged in MarkusH/pypy/issue2062 (pull request #325)
Fixed #2062 -- Treated date/datetime/time/timedelta repr like on
CPython
diff --git a/lib_pypy/datetime.py b/lib_pypy/datetime.py
--- a/lib_pypy/datetime.py
+++ b/lib_pypy/datetime.py
@@ -536,16 +536,17 @@
return self
def __repr__(self):
+ module = "datetime." if self.__class__ is timedelta else ""
if self._microseconds:
- return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__,
+ return "%s(%d, %d, %d)" % (module + self.__class__.__name__,
self._days,
self._seconds,
self._microseconds)
if self._seconds:
- return "%s(%d, %d)" % ('datetime.' + self.__class__.__name__,
+ return "%s(%d, %d)" % (module + self.__class__.__name__,
self._days,
self._seconds)
- return "%s(%d)" % ('datetime.' + self.__class__.__name__, self._days)
+ return "%s(%d)" % (module + self.__class__.__name__, self._days)
def __str__(self):
mm, ss = divmod(self._seconds, 60)
@@ -798,7 +799,8 @@
>>> repr(dt)
'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)'
"""
- return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__,
+ module = "datetime." if self.__class__ is date else ""
+ return "%s(%d, %d, %d)" % (module + self.__class__.__name__,
self._year,
self._month,
self._day)
@@ -1286,7 +1288,8 @@
s = ", %d" % self._second
else:
s = ""
- s= "%s(%d, %d%s)" % ('datetime.' + self.__class__.__name__,
+ module = "datetime." if self.__class__ is time else ""
+ s= "%s(%d, %d%s)" % (module + self.__class__.__name__,
self._hour, self._minute, s)
if self._tzinfo is not None:
assert s[-1:] == ")"
@@ -1698,7 +1701,8 @@
if L[-1] == 0:
del L[-1]
s = ", ".join(map(str, L))
- s = "%s(%s)" % ('datetime.' + self.__class__.__name__, s)
+ module = "datetime." if self.__class__ is datetime else ""
+ s = "%s(%s)" % (module + self.__class__.__name__, s)
if self._tzinfo is not None:
assert s[-1:] == ")"
s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")"
diff --git a/pypy/module/test_lib_pypy/test_datetime.py b/pypy/module/test_lib_pypy/test_datetime.py
--- a/pypy/module/test_lib_pypy/test_datetime.py
+++ b/pypy/module/test_lib_pypy/test_datetime.py
@@ -6,9 +6,40 @@
class BaseTestDatetime:
def test_repr(self):
- print datetime
- expected = "datetime.datetime(1, 2, 3, 0, 0)"
- assert repr(datetime.datetime(1,2,3)) == expected
+ checks = (
+ (datetime.date(2015, 6, 8), "datetime.date(2015, 6, 8)"),
+ (datetime.datetime(2015, 6, 8, 12, 34, 56), "datetime.datetime(2015, 6, 8, 12, 34, 56)"),
+ (datetime.time(12, 34, 56), "datetime.time(12, 34, 56)"),
+ (datetime.timedelta(1), "datetime.timedelta(1)"),
+ (datetime.timedelta(1, 2), "datetime.timedelta(1, 2)"),
+ (datetime.timedelta(1, 2, 3), "datetime.timedelta(1, 2, 3)"),
+ )
+ for obj, expected in checks:
+ assert repr(obj) == expected
+
+ def test_repr_overridden(self):
+ class date_safe(datetime.date):
+ pass
+
+ class datetime_safe(datetime.datetime):
+ pass
+
+ class time_safe(datetime.time):
+ pass
+
+ class timedelta_safe(datetime.timedelta):
+ pass
+
+ checks = (
+ (date_safe(2015, 6, 8), "date_safe(2015, 6, 8)"),
+ (datetime_safe(2015, 6, 8, 12, 34, 56), "datetime_safe(2015, 6, 8, 12, 34, 56)"),
+ (time_safe(12, 34, 56), "time_safe(12, 34, 56)"),
+ (timedelta_safe(1), "timedelta_safe(1)"),
+ (timedelta_safe(1, 2), "timedelta_safe(1, 2)"),
+ (timedelta_safe(1, 2, 3), "timedelta_safe(1, 2, 3)"),
+ )
+ for obj, expected in checks:
+ assert repr(obj) == expected
def test_attributes(self):
for x in [datetime.date.today(),
More information about the pypy-commit
mailing list