[Python-checkins] cpython (merge default -> default): Merge

antoine.pitrou python-checkins at python.org
Fri Jun 22 22:10:58 CEST 2012


http://hg.python.org/cpython/rev/483d7dd6851f
changeset:   77585:483d7dd6851f
parent:      77584:ad9f6e294d09
parent:      77583:74ee787306b9
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Fri Jun 22 22:07:24 2012 +0200
summary:
  Merge

files:
  Doc/library/time.rst       |   2 +-
  Lib/datetime.py            |   6 ++--
  Lib/test/datetimetester.py |   6 ++-
  Lib/test/test_capi.py      |  38 +++++++++++++------------
  Modules/_datetimemodule.c  |  10 ++----
  5 files changed, 31 insertions(+), 31 deletions(-)


diff --git a/Doc/library/time.rst b/Doc/library/time.rst
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -545,7 +545,7 @@
    +-------+-------------------+---------------------------------+
    | N/A   | :attr:`tm_zone`   | abbreviation of timezone name   |
    +-------+-------------------+---------------------------------+
-   | N/A   | :attr:`tm_gmtoff` | offset from UTC in seconds      |
+   | N/A   | :attr:`tm_gmtoff` | offset east of UTC in seconds   |
    +-------+-------------------+---------------------------------+
 
    Note that unlike the C structure, the month value is a range of [1, 12], not
diff --git a/Lib/datetime.py b/Lib/datetime.py
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1510,13 +1510,13 @@
                 # implied by tm_isdst.
                 delta = local - datetime(*_time.gmtime(ts)[:6])
                 dst = _time.daylight and localtm.tm_isdst > 0
-                gmtoff = _time.altzone if dst else _time.timezone
-                if delta == timedelta(seconds=-gmtoff):
+                gmtoff = -(_time.altzone if dst else _time.timezone)
+                if delta == timedelta(seconds=gmtoff):
                     tz = timezone(delta, _time.tzname[dst])
                 else:
                     tz = timezone(delta)
             else:
-                tz = timezone(timedelta(seconds=-gmtoff), zone)
+                tz = timezone(timedelta(seconds=gmtoff), zone)
 
         elif not isinstance(tz, tzinfo):
             raise TypeError("tz argument must be an instance of tzinfo")
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -3278,16 +3278,18 @@
         self.assertEqual(dt.astimezone(None), dt)
         self.assertEqual(dt.astimezone(), dt)
 
+    # Note that offset in TZ variable has the opposite sign to that
+    # produced by %z directive.
     @support.run_with_tz('EST+05EDT,M3.2.0,M11.1.0')
     def test_astimezone_default_eastern(self):
         dt = self.theclass(2012, 11, 4, 6, 30, tzinfo=timezone.utc)
         local = dt.astimezone()
         self.assertEqual(dt, local)
-        self.assertEqual(local.strftime("%z %Z"), "+0500 EST")
+        self.assertEqual(local.strftime("%z %Z"), "-0500 EST")
         dt = self.theclass(2012, 11, 4, 5, 30, tzinfo=timezone.utc)
         local = dt.astimezone()
         self.assertEqual(dt, local)
-        self.assertEqual(local.strftime("%z %Z"), "+0400 EDT")
+        self.assertEqual(local.strftime("%z %Z"), "-0400 EDT")
 
     def test_aware_subtract(self):
         cls = self.theclass
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -222,36 +222,38 @@
         in Python/getargs.c, but neglected to update our poor friend
         skipitem() in the same file.  (If so, shame on you!)
 
-        This function brute-force tests all** ASCII characters (1 to 127
-        inclusive) as format units, checking to see that
-        PyArg_ParseTupleAndKeywords() return consistent errors both when
-        the unit is attempted to be used and when it is skipped.  If the
-        format unit doesn't exist, we'll get one of two specific error
-        messages (one for used, one for skipped); if it does exist we
-        *won't* get that error--we'll get either no error or some other
-        error.  If we get the "does not exist" error for one test and
-        not for the other, there's a mismatch, and the test fails.
+        With a few exceptions**, this function brute-force tests all
+        printable ASCII*** characters (32 to 126 inclusive) as format units,
+        checking to see that PyArg_ParseTupleAndKeywords() return consistent
+        errors both when the unit is attempted to be used and when it is
+        skipped.  If the format unit doesn't exist, we'll get one of two
+        specific error messages (one for used, one for skipped); if it does
+        exist we *won't* get that error--we'll get either no error or some
+        other error.  If we get the specific "does not exist" error for one
+        test and not for the other, there's a mismatch, and the test fails.
 
-          ** Okay, it actually skips some ASCII characters.  Some characters
-             have special funny semantics, and it would be difficult to
-             accomodate them here.
+           ** Some format units have special funny semantics and it would
+              be difficult to accomodate them here.  Since these are all
+              well-established and properly skipped in skipitem() we can
+              get away with not testing them--this test is really intended
+              to catch *new* format units.
+
+          *** Python C source files must be ASCII.  Therefore it's impossible
+              to have non-ASCII format units.
+
         """
         empty_tuple = ()
         tuple_1 = (0,)
         dict_b = {'b':1}
         keywords = ["a", "b"]
 
-        # Python C source files must be ASCII,
-        # therefore we'll never have a format unit > 127
-        for i in range(1, 128):
+        for i in range(32, 127):
             c = chr(i)
 
-            # skip non-printable characters, no one is insane enough to define
-            #    one as a format unit
             # skip parentheses, the error reporting is inconsistent about them
             # skip 'e', it's always a two-character code
             # skip '|' and '$', they don't represent arguments anyway
-            if (not c.isprintable()) or (c in '()e|$'):
+            if c in '()e|$':
                 continue
 
             # test the format unit when not skipped
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -4717,12 +4717,8 @@
         return NULL;
     timep = localtime(&timestamp);
 #ifdef HAVE_STRUCT_TM_TM_ZONE
-    {
-        long offset;
-        offset = timep->tm_gmtoff;
-        zone = timep->tm_zone;
-        delta = new_delta(0, -offset, 0, 0);
-    }
+    zone = timep->tm_zone;
+    delta = new_delta(0, timep->tm_gmtoff, 0, 1);
 #else /* HAVE_STRUCT_TM_TM_ZONE */
     {
         PyObject *local_time;
@@ -4732,7 +4728,7 @@
                                   utc_time->tzinfo);
         if (local_time == NULL)
             goto error;
-        delta = datetime_subtract((PyObject*)utc_time, local_time);
+        delta = datetime_subtract(local_time, (PyObject*)utc_time);
         /* XXX: before relying on tzname, we should compare delta
            to the offset implied by timezone/altzone */
         if (daylight && timep->tm_isdst >= 0)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list