From 1802b87a1244eb134ae87292564d6064ad3700d4 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:01:52 +0000 Subject: [PATCH 1/9] Revert "Remove Python 2.6 support." This reverts commit 31d37a395393d74047964c6111300a09a446e4de. --- .travis.yml | 1 + setup.py | 1 + tox.ini | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 46b14fe63..9f750e616 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ env: - GOPATH=/tmp/go - PATH=$GOPATH/bin:$PATH matrix: + - TOXENV=py26 BOULDER_INTEGRATION=1 - TOXENV=py27 BOULDER_INTEGRATION=1 - TOXENV=lint - TOXENV=cover diff --git a/setup.py b/setup.py index 016dc146e..9fb58752a 100644 --- a/setup.py +++ b/setup.py @@ -98,6 +98,7 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Security', diff --git a/tox.ini b/tox.ini index b10558077..83a3d07ec 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,7 @@ # acme and letsencrypt are not yet on pypi, so when Tox invokes # "install *.zip", it will not find deps skipsdist = true -envlist = py27,cover,lint +envlist = py26,py27,py33,py34,cover,lint [testenv] commands = @@ -40,6 +40,7 @@ commands = ./tox.cover.sh [testenv:lint] +# recent versions of pylint do not support Python 2.6 (#97, #187) basepython = python2.7 # separating into multiple invocations disables cross package # duplicate code checking; if one of the commands fails, others will From a1a6120abfa5e5690f9cee615b069186be5205ca Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:03:32 +0000 Subject: [PATCH 2/9] Add py3 trove classifiers for acme --- acme/setup.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/acme/setup.py b/acme/setup.py index 36a724f97..ee55d6b7b 100644 --- a/acme/setup.py +++ b/acme/setup.py @@ -53,6 +53,9 @@ setup( 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Security', ], From 3bc2b30e933ee758d8c3de35fe42f90998a33c53 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:17:08 +0000 Subject: [PATCH 3/9] StreamHandler py2.6 fix --- letsencrypt/colored_logging.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index 170da0b38..50d2146ac 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -17,7 +17,10 @@ class StreamHandler(logging.StreamHandler): """ def __init__(self, stream=None): - super(StreamHandler, self).__init__(stream) + if sys.version_info < (2, 7): + StreamHandler.__init__(self) # pragma: no cover + else: + super(StreamHandler, self).__init__(stream) self.colored = (sys.stderr.isatty() if stream is None else stream.isatty()) self.red_level = logging.WARNING From 6b53f2f3a76e8264088617ddbae6f614427af724 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:48:24 +0000 Subject: [PATCH 4/9] Drop recursive loop (logging.StreamHandler) --- letsencrypt/colored_logging.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index 50d2146ac..53234510d 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -18,7 +18,7 @@ class StreamHandler(logging.StreamHandler): def __init__(self, stream=None): if sys.version_info < (2, 7): - StreamHandler.__init__(self) # pragma: no cover + logging.StreamHandler.__init__(self) # pragma: no cover else: super(StreamHandler, self).__init__(stream) self.colored = (sys.stderr.isatty() if stream is None else From 9702495ff0d3497e3e31358dc8b686349bfdab8d Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:49:49 +0000 Subject: [PATCH 5/9] lint: locally disable non-parent-init-called --- letsencrypt/colored_logging.py | 1 + 1 file changed, 1 insertion(+) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index 53234510d..fd4a2b2fe 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -18,6 +18,7 @@ class StreamHandler(logging.StreamHandler): def __init__(self, stream=None): if sys.version_info < (2, 7): + # pylint: disable=non-parent-init-called logging.StreamHandler.__init__(self) # pragma: no cover else: super(StreamHandler, self).__init__(stream) From 9427c474ab7010fc7d8bd07a91ea208cddb8ffb1 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 16:55:59 +0000 Subject: [PATCH 6/9] More py2.6 love for StreamHandler. --- letsencrypt/colored_logging.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index fd4a2b2fe..c47ad2707 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -35,10 +35,9 @@ class StreamHandler(logging.StreamHandler): :rtype: str """ - output = super(StreamHandler, self).format(record) + out = (StreamHandler.format(self, record) if sys.version_info < (2, 7) + else super(StreamHandler, self).format(record)) if self.colored and record.levelno >= self.red_level: - return ''.join((le_util.ANSI_SGR_RED, - output, - le_util.ANSI_SGR_RESET)) + return ''.join((le_util.ANSI_SGR_RED, out, le_util.ANSI_SGR_RESET)) else: - return output + return out From 8788f956a7fe3a9266357c79e8ca89b90c43cef8 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 17:10:05 +0000 Subject: [PATCH 7/9] Again, drop recursive loop for StreamHandler py26 --- letsencrypt/colored_logging.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index c47ad2707..28d0bea3c 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -35,7 +35,8 @@ class StreamHandler(logging.StreamHandler): :rtype: str """ - out = (StreamHandler.format(self, record) if sys.version_info < (2, 7) + out = (logging.StreamHandler.format(self, record) + if sys.version_info < (2, 7) else super(StreamHandler, self).format(record)) if self.colored and record.levelno >= self.red_level: return ''.join((le_util.ANSI_SGR_RED, out, le_util.ANSI_SGR_RESET)) From 5ab54c5bd11c3fe5e174e66f29e2d4312d0839c9 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 17:18:04 +0000 Subject: [PATCH 8/9] Fix assertRaises for py2.6 --- letsencrypt/tests/crypto_util_test.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/letsencrypt/tests/crypto_util_test.py b/letsencrypt/tests/crypto_util_test.py index 2e04c748a..d1790349e 100644 --- a/letsencrypt/tests/crypto_util_test.py +++ b/letsencrypt/tests/crypto_util_test.py @@ -227,9 +227,8 @@ class CertLoaderTest(unittest.TestCase): def test_load_invalid_cert(self): from letsencrypt.crypto_util import pyopenssl_load_certificate bad_cert_data = CERT.replace("BEGIN CERTIFICATE", "ASDFASDFASDF!!!") - - with self.assertRaises(errors.Error): - pyopenssl_load_certificate(bad_cert_data) + self.assertRaises( + errors.Error, pyopenssl_load_certificate, bad_cert_data) if __name__ == '__main__': From 4c2d5dbdfc03e5ce2b8c2fd0ed77c4387cb6b60b Mon Sep 17 00:00:00 2001 From: Jakub Warmuz Date: Sun, 11 Oct 2015 17:23:23 +0000 Subject: [PATCH 9/9] Pass stream to StreamHandler.__init__ --- letsencrypt/colored_logging.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/letsencrypt/colored_logging.py b/letsencrypt/colored_logging.py index 28d0bea3c..443364ddd 100644 --- a/letsencrypt/colored_logging.py +++ b/letsencrypt/colored_logging.py @@ -18,8 +18,9 @@ class StreamHandler(logging.StreamHandler): def __init__(self, stream=None): if sys.version_info < (2, 7): + # pragma: no cover # pylint: disable=non-parent-init-called - logging.StreamHandler.__init__(self) # pragma: no cover + logging.StreamHandler.__init__(self, stream) else: super(StreamHandler, self).__init__(stream) self.colored = (sys.stderr.isatty() if stream is None else