[Python-checkins] r82616 - in sandbox/branches/py3k-datetime: datetime.py test_datetime.py

alexander.belopolsky python-checkins at python.org
Wed Jul 7 01:18:01 CEST 2010


Author: alexander.belopolsky
Date: Wed Jul  7 01:18:01 2010
New Revision: 82616

Log:
Issue #9000: datetime.timezone objects now have eval-friendly repr.

Modified:
   sandbox/branches/py3k-datetime/datetime.py
   sandbox/branches/py3k-datetime/test_datetime.py

Modified: sandbox/branches/py3k-datetime/datetime.py
==============================================================================
--- sandbox/branches/py3k-datetime/datetime.py	(original)
+++ sandbox/branches/py3k-datetime/datetime.py	Wed Jul  7 01:18:01 2010
@@ -705,7 +705,16 @@
     # Conversions to string
 
     def __repr__(self):
-        "Convert to formal string, for repr()."
+        """Convert to formal string, for repr().
+
+        >>> dt = datetime(2010, 1, 1)
+        >>> repr(dt)
+        'datetime.datetime(2010, 1, 1, 0, 0)'
+
+        >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc)
+        >>> repr(dt)
+        'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)'
+        """
         return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__,
                                    self._year,
                                    self._month,
@@ -1524,7 +1533,7 @@
         return s
 
     def __repr__(self):
-        "Convert to formal string, for repr()."
+        """Convert to formal string, for repr()."""
         L = [self._year, self._month, self._day, # These are never zero
              self._hour, self._minute, self._second, self._microsecond]
         if L[-1] == 0:
@@ -1813,6 +1822,24 @@
     def __hash__(self):
         return hash(self._offset)
     
+    def __repr__(self):
+        """Convert to formal string, for repr().
+
+        >>> tz = timezone.utc
+        >>> repr(tz)
+        'datetime.timezone.utc'
+        >>> tz = timezone(timedelta(hours=-5), 'EST')
+        >>> repr(tz)
+        "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')"
+        """
+        if self is self.utc:
+            return 'datetime.timezone.utc'
+        if self._name is None:
+            return "%s(%r)" % ('datetime.' + self.__class__.__name__,
+                               self._offset)
+        return "%s(%r, %r)" % ('datetime.' + self.__class__.__name__,
+                               self._offset, self._name)
+
     def __str__(self):
         return self.tzname(None)
 

Modified: sandbox/branches/py3k-datetime/test_datetime.py
==============================================================================
--- sandbox/branches/py3k-datetime/test_datetime.py	(original)
+++ sandbox/branches/py3k-datetime/test_datetime.py	Wed Jul  7 01:18:01 2010
@@ -153,6 +153,15 @@
                    timezone.min, timezone.max]:
             self.assertEqual(str(tz), tz.tzname(None))
 
+    def test_repr(self):
+        import datetime
+        for tz in [self.ACDT, self.EST, timezone.utc,
+                   timezone.min, timezone.max]:
+            # test round-trip
+            tzrep = repr(tz)
+            self.assertEqual(tz, eval(tzrep))
+
+
     def test_class_members(self):
         limit = timedelta(hours=23, minutes=59)
         self.assertEqual(timezone.utc.utcoffset(None), ZERO)


More information about the Python-checkins mailing list