summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/time.rst2
-rw-r--r--Lib/datetime.py6
-rw-r--r--Lib/test/datetimetester.py6
-rw-r--r--Lib/test/test_capi.py40
-rw-r--r--Modules/_datetimemodule.c10
-rw-r--r--Tools/ssl/make_ssl_data.py11
6 files changed, 43 insertions, 32 deletions
diff --git a/Doc/library/time.rst b/Doc/library/time.rst
index 3faabf7..ac3fb5e 100644
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -545,7 +545,7 @@ The module defines the following functions and data items:
+-------+-------------------+---------------------------------+
| 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
index e4d7161..a15c6b0 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1510,13 +1510,13 @@ class datetime(date):
# 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
index 4181d4f..a417170 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -3278,16 +3278,18 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase):
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
index e24bd6f..2692b89d 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -222,36 +222,38 @@ class SkipitemTest(unittest.TestCase):
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.
-
- ** Okay, it actually skips some ASCII characters. Some characters
- have special funny semantics, and it would be difficult to
- accomodate them here.
+ 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.
+
+ ** 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
index 149f573..6df5c03 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -4717,12 +4717,8 @@ local_timezone(PyDateTime_DateTime *utc_time)
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 @@ local_timezone(PyDateTime_DateTime *utc_time)
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)
diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py
index 87b3ec2..10244d1 100644
--- a/Tools/ssl/make_ssl_data.py
+++ b/Tools/ssl/make_ssl_data.py
@@ -1,5 +1,16 @@
#! /usr/bin/env python3
+"""
+This script should be called *manually* when we want to upgrade SSLError
+`library` and `reason` mnemnonics to a more recent OpenSSL version.
+
+It takes two arguments:
+- the path to the OpenSSL include files' directory
+ (e.g. openssl-1.0.1-beta3/include/openssl/)
+- the path to the C file to be generated
+ (probably Modules/_ssl_data.h)
+"""
+
import datetime
import os
import re