mirror of
https://github.com/certbot/certbot.git
synced 2025-08-09 15:02:48 +03:00
Drop support for EOL Python 2.6 and 3.3
* Drop support for EOL Python 2.6 * Use more helpful assertIn/NotIn instead of assertTrue/False * Drop support for EOL Python 3.3 * Remove redundant Python 3.3 code * Restore code for RHEL 6 and virtualenv for Py2.7 * Revert pipstrap.py to upstream * Merge py26_packages and non_py26_packages into all_packages * Revert changes to *-auto in root * Update by calling letsencrypt-auto-source/build.py * Revert permissions for pipstrap.py
This commit is contained in:
@@ -25,18 +25,10 @@ matrix:
|
|||||||
addons:
|
addons:
|
||||||
- python: "2.7"
|
- python: "2.7"
|
||||||
env: TOXENV=lint
|
env: TOXENV=lint
|
||||||
- python: "2.6"
|
|
||||||
env: TOXENV=py26
|
|
||||||
sudo: required
|
|
||||||
services: docker
|
|
||||||
- python: "2.7"
|
- python: "2.7"
|
||||||
env: TOXENV=py27-oldest
|
env: TOXENV=py27-oldest
|
||||||
sudo: required
|
sudo: required
|
||||||
services: docker
|
services: docker
|
||||||
- python: "3.3"
|
|
||||||
env: TOXENV=py33
|
|
||||||
sudo: required
|
|
||||||
services: docker
|
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: TOXENV=py36
|
env: TOXENV=py36
|
||||||
sudo: required
|
sudo: required
|
||||||
|
@@ -10,13 +10,3 @@ supported version: `draft-ietf-acme-01`_.
|
|||||||
https://github.com/ietf-wg-acme/acme/tree/draft-ietf-acme-acme-01
|
https://github.com/ietf-wg-acme/acme/tree/draft-ietf-acme-acme-01
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import sys
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
for (major, minor) in [(2, 6), (3, 3)]:
|
|
||||||
if sys.version_info[:2] == (major, minor):
|
|
||||||
warnings.warn(
|
|
||||||
"Python {0}.{1} support will be dropped in the next release of "
|
|
||||||
"acme. Please upgrade your Python version.".format(major, minor),
|
|
||||||
DeprecationWarning,
|
|
||||||
) #pragma: no cover
|
|
||||||
|
@@ -5,7 +5,6 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import socket
|
import socket
|
||||||
import sys
|
|
||||||
|
|
||||||
import OpenSSL
|
import OpenSSL
|
||||||
|
|
||||||
@@ -130,8 +129,7 @@ def probe_sni(name, host, port=443, timeout=300,
|
|||||||
context = OpenSSL.SSL.Context(method)
|
context = OpenSSL.SSL.Context(method)
|
||||||
context.set_timeout(timeout)
|
context.set_timeout(timeout)
|
||||||
|
|
||||||
socket_kwargs = {} if sys.version_info < (2, 7) else {
|
socket_kwargs = {'source_address': source_address}
|
||||||
'source_address': source_address}
|
|
||||||
|
|
||||||
host_protocol_agnostic = None if host == '::' or host == '0' else host
|
host_protocol_agnostic = None if host == '::' or host == '0' else host
|
||||||
|
|
||||||
|
@@ -170,9 +170,9 @@ class MakeCSRTest(unittest.TestCase):
|
|||||||
self.assertTrue(b'--END CERTIFICATE REQUEST--' in csr_pem)
|
self.assertTrue(b'--END CERTIFICATE REQUEST--' in csr_pem)
|
||||||
csr = OpenSSL.crypto.load_certificate_request(
|
csr = OpenSSL.crypto.load_certificate_request(
|
||||||
OpenSSL.crypto.FILETYPE_PEM, csr_pem)
|
OpenSSL.crypto.FILETYPE_PEM, csr_pem)
|
||||||
# In pyopenssl 0.13 (used with TOXENV=py26-oldest and py27-oldest), csr
|
# In pyopenssl 0.13 (used with TOXENV=py27-oldest), csr objects don't
|
||||||
# objects don't have a get_extensions() method, so we skip this test if
|
# have a get_extensions() method, so we skip this test if the method
|
||||||
# the method isn't available.
|
# isn't available.
|
||||||
if hasattr(csr, 'get_extensions'):
|
if hasattr(csr, 'get_extensions'):
|
||||||
self.assertEquals(len(csr.get_extensions()), 1)
|
self.assertEquals(len(csr.get_extensions()), 1)
|
||||||
self.assertEquals(csr.get_extensions()[0].get_data(),
|
self.assertEquals(csr.get_extensions()[0].get_data(),
|
||||||
@@ -188,9 +188,9 @@ class MakeCSRTest(unittest.TestCase):
|
|||||||
csr = OpenSSL.crypto.load_certificate_request(
|
csr = OpenSSL.crypto.load_certificate_request(
|
||||||
OpenSSL.crypto.FILETYPE_PEM, csr_pem)
|
OpenSSL.crypto.FILETYPE_PEM, csr_pem)
|
||||||
|
|
||||||
# In pyopenssl 0.13 (used with TOXENV=py26-oldest and py27-oldest), csr
|
# In pyopenssl 0.13 (used with TOXENV=py27-oldest), csr objects don't
|
||||||
# objects don't have a get_extensions() method, so we skip this test if
|
# have a get_extensions() method, so we skip this test if the method
|
||||||
# the method isn't available.
|
# isn't available.
|
||||||
if hasattr(csr, 'get_extensions'):
|
if hasattr(csr, 'get_extensions'):
|
||||||
self.assertEquals(len(csr.get_extensions()), 2)
|
self.assertEquals(len(csr.get_extensions()), 2)
|
||||||
# NOTE: Ideally we would filter by the TLS Feature OID, but
|
# NOTE: Ideally we would filter by the TLS Feature OID, but
|
||||||
|
@@ -25,13 +25,6 @@ install_requires = [
|
|||||||
'six>=1.9.0', # needed for python_2_unicode_compatible
|
'six>=1.9.0', # needed for python_2_unicode_compatible
|
||||||
]
|
]
|
||||||
|
|
||||||
# env markers cause problems with older pip and setuptools
|
|
||||||
if sys.version_info < (2, 7):
|
|
||||||
install_requires.extend([
|
|
||||||
'argparse',
|
|
||||||
'ordereddict',
|
|
||||||
])
|
|
||||||
|
|
||||||
dev_extras = [
|
dev_extras = [
|
||||||
'pytest',
|
'pytest',
|
||||||
'pytest-xdist',
|
'pytest-xdist',
|
||||||
@@ -58,10 +51,8 @@ setup(
|
|||||||
'License :: OSI Approved :: Apache Software License',
|
'License :: OSI Approved :: Apache Software License',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -40,10 +40,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -40,10 +40,8 @@ setup(
|
|||||||
'License :: OSI Approved :: Apache Software License',
|
'License :: OSI Approved :: Apache Software License',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -39,10 +39,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -41,7 +41,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -40,10 +40,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -41,7 +41,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -41,7 +41,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -44,10 +44,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -41,7 +41,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -41,7 +41,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -39,10 +39,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -32,10 +32,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -40,10 +40,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -165,12 +165,7 @@ class ColoredStreamHandler(logging.StreamHandler):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, stream=None):
|
def __init__(self, stream=None):
|
||||||
# logging handlers use old style classes in Python 2.6 so
|
super(ColoredStreamHandler, self).__init__(stream)
|
||||||
# super() cannot be used
|
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
|
||||||
logging.StreamHandler.__init__(self, stream)
|
|
||||||
else:
|
|
||||||
super(ColoredStreamHandler, self).__init__(stream)
|
|
||||||
self.colored = (sys.stderr.isatty() if stream is None else
|
self.colored = (sys.stderr.isatty() if stream is None else
|
||||||
stream.isatty())
|
stream.isatty())
|
||||||
self.red_level = logging.WARNING
|
self.red_level = logging.WARNING
|
||||||
@@ -184,9 +179,7 @@ class ColoredStreamHandler(logging.StreamHandler):
|
|||||||
:rtype: str
|
:rtype: str
|
||||||
|
|
||||||
"""
|
"""
|
||||||
out = (logging.StreamHandler.format(self, record)
|
out = super(ColoredStreamHandler, self).format(record)
|
||||||
if sys.version_info < (2, 7)
|
|
||||||
else super(ColoredStreamHandler, self).format(record))
|
|
||||||
if self.colored and record.levelno >= self.red_level:
|
if self.colored and record.levelno >= self.red_level:
|
||||||
return ''.join((util.ANSI_SGR_RED, out, util.ANSI_SGR_RESET))
|
return ''.join((util.ANSI_SGR_RED, out, util.ANSI_SGR_RESET))
|
||||||
else:
|
else:
|
||||||
@@ -203,23 +196,14 @@ class MemoryHandler(logging.handlers.MemoryHandler):
|
|||||||
def __init__(self, target=None):
|
def __init__(self, target=None):
|
||||||
# capacity doesn't matter because should_flush() is overridden
|
# capacity doesn't matter because should_flush() is overridden
|
||||||
capacity = float('inf')
|
capacity = float('inf')
|
||||||
# logging handlers use old style classes in Python 2.6 so
|
super(MemoryHandler, self).__init__(capacity, target=target)
|
||||||
# super() cannot be used
|
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
|
||||||
logging.handlers.MemoryHandler.__init__(
|
|
||||||
self, capacity, target=target)
|
|
||||||
else:
|
|
||||||
super(MemoryHandler, self).__init__(capacity, target=target)
|
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""Close the memory handler, but don't set the target to None."""
|
"""Close the memory handler, but don't set the target to None."""
|
||||||
# This allows the logging module which may only have a weak
|
# This allows the logging module which may only have a weak
|
||||||
# reference to the target handler to properly flush and close it.
|
# reference to the target handler to properly flush and close it.
|
||||||
target = self.target
|
target = self.target
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
super(MemoryHandler, self).close()
|
||||||
logging.handlers.MemoryHandler.close(self)
|
|
||||||
else:
|
|
||||||
super(MemoryHandler, self).close()
|
|
||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
def flush(self, force=False): # pylint: disable=arguments-differ
|
def flush(self, force=False): # pylint: disable=arguments-differ
|
||||||
@@ -233,10 +217,7 @@ class MemoryHandler(logging.handlers.MemoryHandler):
|
|||||||
# This method allows flush() calls in logging.shutdown to be a
|
# This method allows flush() calls in logging.shutdown to be a
|
||||||
# noop so we can control when this handler is flushed.
|
# noop so we can control when this handler is flushed.
|
||||||
if force:
|
if force:
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
super(MemoryHandler, self).flush()
|
||||||
logging.handlers.MemoryHandler.flush(self)
|
|
||||||
else:
|
|
||||||
super(MemoryHandler, self).flush()
|
|
||||||
|
|
||||||
def shouldFlush(self, record):
|
def shouldFlush(self, record):
|
||||||
"""Should the buffer be automatically flushed?
|
"""Should the buffer be automatically flushed?
|
||||||
@@ -262,12 +243,7 @@ class TempHandler(logging.StreamHandler):
|
|||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
stream = tempfile.NamedTemporaryFile('w', delete=False)
|
stream = tempfile.NamedTemporaryFile('w', delete=False)
|
||||||
# logging handlers use old style classes in Python 2.6 so
|
super(TempHandler, self).__init__(stream)
|
||||||
# super() cannot be used
|
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
|
||||||
logging.StreamHandler.__init__(self, stream)
|
|
||||||
else:
|
|
||||||
super(TempHandler, self).__init__(stream)
|
|
||||||
self.path = stream.name
|
self.path = stream.name
|
||||||
self._delete = True
|
self._delete = True
|
||||||
|
|
||||||
@@ -278,12 +254,7 @@ class TempHandler(logging.StreamHandler):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self._delete = False
|
self._delete = False
|
||||||
# logging handlers use old style classes in Python 2.6 so
|
super(TempHandler, self).emit(record)
|
||||||
# super() cannot be used
|
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
|
||||||
logging.StreamHandler.emit(self, record)
|
|
||||||
else:
|
|
||||||
super(TempHandler, self).emit(record)
|
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""Close the handler and the temporary log file.
|
"""Close the handler and the temporary log file.
|
||||||
@@ -299,10 +270,7 @@ class TempHandler(logging.StreamHandler):
|
|||||||
if self._delete:
|
if self._delete:
|
||||||
os.remove(self.path)
|
os.remove(self.path)
|
||||||
self._delete = False
|
self._delete = False
|
||||||
if sys.version_info < (2, 7): # pragma: no cover
|
super(TempHandler, self).close()
|
||||||
logging.StreamHandler.close(self)
|
|
||||||
else:
|
|
||||||
super(TempHandler, self).close()
|
|
||||||
finally:
|
finally:
|
||||||
self.release()
|
self.release()
|
||||||
|
|
||||||
|
@@ -4,7 +4,6 @@ import functools
|
|||||||
import logging.handlers
|
import logging.handlers
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
|
||||||
|
|
||||||
import configobj
|
import configobj
|
||||||
import josepy as jose
|
import josepy as jose
|
||||||
@@ -1218,17 +1217,6 @@ def main(cli_args=sys.argv[1:]):
|
|||||||
# Let plugins_cmd be run as un-privileged user.
|
# Let plugins_cmd be run as un-privileged user.
|
||||||
if config.func != plugins_cmd:
|
if config.func != plugins_cmd:
|
||||||
raise
|
raise
|
||||||
deprecation_fmt = (
|
|
||||||
"Python %s.%s support will be dropped in the next "
|
|
||||||
"release of Certbot - please upgrade your Python version.")
|
|
||||||
# We use the warnings system for Python 2.6 and logging for Python 3
|
|
||||||
# because DeprecationWarnings are only reported by default in Python <= 2.6
|
|
||||||
# and warnings can be disabled by the user.
|
|
||||||
if sys.version_info[:2] == (2, 6):
|
|
||||||
warning = deprecation_fmt % sys.version_info[:2]
|
|
||||||
warnings.warn(warning, DeprecationWarning)
|
|
||||||
elif sys.version_info[:2] == (3, 3):
|
|
||||||
logger.warning(deprecation_fmt, *sys.version_info[:2])
|
|
||||||
|
|
||||||
set_displayer(config)
|
set_displayer(config)
|
||||||
|
|
||||||
|
@@ -422,7 +422,7 @@ OS-level dependencies can be installed like so:
|
|||||||
In general...
|
In general...
|
||||||
|
|
||||||
* ``sudo`` is required as a suggested way of running privileged process
|
* ``sudo`` is required as a suggested way of running privileged process
|
||||||
* `Python`_ 2.6/2.7 is required
|
* `Python`_ 2.7 is required
|
||||||
* `Augeas`_ is required for the Python bindings
|
* `Augeas`_ is required for the Python bindings
|
||||||
* ``virtualenv`` and ``pip`` are used for managing other python library
|
* ``virtualenv`` and ``pip`` are used for managing other python library
|
||||||
dependencies
|
dependencies
|
||||||
|
@@ -22,7 +22,7 @@ your system.
|
|||||||
System Requirements
|
System Requirements
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Certbot currently requires Python 2.6, 2.7, or 3.3+. By default, it requires
|
Certbot currently requires Python 2.7, or 3.4+. By default, it requires
|
||||||
root access in order to write to ``/etc/letsencrypt``,
|
root access in order to write to ``/etc/letsencrypt``,
|
||||||
``/var/log/letsencrypt``, ``/var/lib/letsencrypt``; to bind to ports 80 and 443
|
``/var/log/letsencrypt``, ``/var/lib/letsencrypt``; to bind to ports 80 and 443
|
||||||
(if you use the ``standalone`` plugin) and to read and modify webserver
|
(if you use the ``standalone`` plugin) and to read and modify webserver
|
||||||
|
@@ -246,7 +246,7 @@ DeprecationBootstrap() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
MIN_PYTHON_VERSION="2.6"
|
MIN_PYTHON_VERSION="2.7"
|
||||||
MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
|
MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
|
||||||
# Sets LE_PYTHON to Python version string and PYVER to the first two
|
# Sets LE_PYTHON to Python version string and PYVER to the first two
|
||||||
# digits of the python version
|
# digits of the python version
|
||||||
@@ -781,20 +781,11 @@ elif [ -f /etc/redhat-release ]; then
|
|||||||
prev_le_python="$LE_PYTHON"
|
prev_le_python="$LE_PYTHON"
|
||||||
unset LE_PYTHON
|
unset LE_PYTHON
|
||||||
DeterminePythonVersion "NOCRASH"
|
DeterminePythonVersion "NOCRASH"
|
||||||
if [ "$PYVER" -eq 26 ]; then
|
Bootstrap() {
|
||||||
Bootstrap() {
|
BootstrapMessage "RedHat-based OSes"
|
||||||
BootstrapMessage "RedHat-based OSes that will use Python3"
|
BootstrapRpmCommon
|
||||||
BootstrapRpmPython3
|
}
|
||||||
}
|
BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
|
||||||
USE_PYTHON_3=1
|
|
||||||
BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
|
|
||||||
else
|
|
||||||
Bootstrap() {
|
|
||||||
BootstrapMessage "RedHat-based OSes"
|
|
||||||
BootstrapRpmCommon
|
|
||||||
}
|
|
||||||
BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
|
|
||||||
fi
|
|
||||||
LE_PYTHON="$prev_le_python"
|
LE_PYTHON="$prev_le_python"
|
||||||
elif [ -f /etc/os-release ] && `grep -q openSUSE /etc/os-release` ; then
|
elif [ -f /etc/os-release ] && `grep -q openSUSE /etc/os-release` ; then
|
||||||
Bootstrap() {
|
Bootstrap() {
|
||||||
@@ -965,18 +956,10 @@ if [ "$1" = "--le-auto-phase2" ]; then
|
|||||||
say "Creating virtual environment..."
|
say "Creating virtual environment..."
|
||||||
DeterminePythonVersion
|
DeterminePythonVersion
|
||||||
rm -rf "$VENV_PATH"
|
rm -rf "$VENV_PATH"
|
||||||
if [ "$PYVER" -le 27 ]; then
|
if [ "$VERBOSE" = 1 ]; then
|
||||||
if [ "$VERBOSE" = 1 ]; then
|
"$LE_PYTHON" -m venv "$VENV_PATH"
|
||||||
virtualenv --no-site-packages --python "$LE_PYTHON" "$VENV_PATH"
|
|
||||||
else
|
|
||||||
virtualenv --no-site-packages --python "$LE_PYTHON" "$VENV_PATH" > /dev/null
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [ "$VERBOSE" = 1 ]; then
|
"$LE_PYTHON" -m venv "$VENV_PATH" > /dev/null
|
||||||
"$LE_PYTHON" -m venv "$VENV_PATH"
|
|
||||||
else
|
|
||||||
"$LE_PYTHON" -m venv "$VENV_PATH" > /dev/null
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$BOOTSTRAP_VERSION" ]; then
|
if [ -n "$BOOTSTRAP_VERSION" ]; then
|
||||||
|
@@ -246,7 +246,7 @@ DeprecationBootstrap() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
MIN_PYTHON_VERSION="2.6"
|
MIN_PYTHON_VERSION="2.7"
|
||||||
MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
|
MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
|
||||||
# Sets LE_PYTHON to Python version string and PYVER to the first two
|
# Sets LE_PYTHON to Python version string and PYVER to the first two
|
||||||
# digits of the python version
|
# digits of the python version
|
||||||
@@ -320,20 +320,11 @@ elif [ -f /etc/redhat-release ]; then
|
|||||||
prev_le_python="$LE_PYTHON"
|
prev_le_python="$LE_PYTHON"
|
||||||
unset LE_PYTHON
|
unset LE_PYTHON
|
||||||
DeterminePythonVersion "NOCRASH"
|
DeterminePythonVersion "NOCRASH"
|
||||||
if [ "$PYVER" -eq 26 ]; then
|
Bootstrap() {
|
||||||
Bootstrap() {
|
BootstrapMessage "RedHat-based OSes"
|
||||||
BootstrapMessage "RedHat-based OSes that will use Python3"
|
BootstrapRpmCommon
|
||||||
BootstrapRpmPython3
|
}
|
||||||
}
|
BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
|
||||||
USE_PYTHON_3=1
|
|
||||||
BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
|
|
||||||
else
|
|
||||||
Bootstrap() {
|
|
||||||
BootstrapMessage "RedHat-based OSes"
|
|
||||||
BootstrapRpmCommon
|
|
||||||
}
|
|
||||||
BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
|
|
||||||
fi
|
|
||||||
LE_PYTHON="$prev_le_python"
|
LE_PYTHON="$prev_le_python"
|
||||||
elif [ -f /etc/os-release ] && `grep -q openSUSE /etc/os-release` ; then
|
elif [ -f /etc/os-release ] && `grep -q openSUSE /etc/os-release` ; then
|
||||||
Bootstrap() {
|
Bootstrap() {
|
||||||
@@ -504,18 +495,10 @@ if [ "$1" = "--le-auto-phase2" ]; then
|
|||||||
say "Creating virtual environment..."
|
say "Creating virtual environment..."
|
||||||
DeterminePythonVersion
|
DeterminePythonVersion
|
||||||
rm -rf "$VENV_PATH"
|
rm -rf "$VENV_PATH"
|
||||||
if [ "$PYVER" -le 27 ]; then
|
if [ "$VERBOSE" = 1 ]; then
|
||||||
if [ "$VERBOSE" = 1 ]; then
|
"$LE_PYTHON" -m venv "$VENV_PATH"
|
||||||
virtualenv --no-site-packages --python "$LE_PYTHON" "$VENV_PATH"
|
|
||||||
else
|
|
||||||
virtualenv --no-site-packages --python "$LE_PYTHON" "$VENV_PATH" > /dev/null
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [ "$VERBOSE" = 1 ]; then
|
"$LE_PYTHON" -m venv "$VENV_PATH" > /dev/null
|
||||||
"$LE_PYTHON" -m venv "$VENV_PATH"
|
|
||||||
else
|
|
||||||
"$LE_PYTHON" -m venv "$VENV_PATH" > /dev/null
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$BOOTSTRAP_VERSION" ]; then
|
if [ -n "$BOOTSTRAP_VERSION" ]; then
|
||||||
|
@@ -287,8 +287,8 @@ class AutoTests(TestCase):
|
|||||||
self.assertTrue(re.match(r'letsencrypt \d+\.\d+\.\d+',
|
self.assertTrue(re.match(r'letsencrypt \d+\.\d+\.\d+',
|
||||||
err.strip().splitlines()[-1]))
|
err.strip().splitlines()[-1]))
|
||||||
# Make a few assertions to test the validity of the next tests:
|
# Make a few assertions to test the validity of the next tests:
|
||||||
self.assertTrue('Upgrading certbot-auto ' in out)
|
self.assertIn('Upgrading certbot-auto ', out)
|
||||||
self.assertTrue('Creating virtual environment...' in out)
|
self.assertIn('Creating virtual environment...', out)
|
||||||
|
|
||||||
# Now we have le-auto 99.9.9 and LE 99.9.9 installed. This
|
# Now we have le-auto 99.9.9 and LE 99.9.9 installed. This
|
||||||
# conveniently sets us up to test the next 2 cases.
|
# conveniently sets us up to test the next 2 cases.
|
||||||
@@ -296,8 +296,8 @@ class AutoTests(TestCase):
|
|||||||
# Test when neither phase-1 upgrade nor phase-2 upgrade is
|
# Test when neither phase-1 upgrade nor phase-2 upgrade is
|
||||||
# needed (probably a common case):
|
# needed (probably a common case):
|
||||||
out, err = run_letsencrypt_auto()
|
out, err = run_letsencrypt_auto()
|
||||||
self.assertFalse('Upgrading certbot-auto ' in out)
|
self.assertNotIn('Upgrading certbot-auto ', out)
|
||||||
self.assertFalse('Creating virtual environment...' in out)
|
self.assertNotIn('Creating virtual environment...', out)
|
||||||
|
|
||||||
def test_phase2_upgrade(self):
|
def test_phase2_upgrade(self):
|
||||||
"""Test a phase-2 upgrade without a phase-1 upgrade."""
|
"""Test a phase-2 upgrade without a phase-1 upgrade."""
|
||||||
@@ -312,8 +312,8 @@ class AutoTests(TestCase):
|
|||||||
# Create venv saving the correct bootstrap script version
|
# Create venv saving the correct bootstrap script version
|
||||||
out, err = run_le_auto(le_auto_path, venv_dir, base_url,
|
out, err = run_le_auto(le_auto_path, venv_dir, base_url,
|
||||||
PIP_FIND_LINKS=pip_find_links)
|
PIP_FIND_LINKS=pip_find_links)
|
||||||
self.assertFalse('Upgrading certbot-auto ' in out)
|
self.assertNotIn('Upgrading certbot-auto ', out)
|
||||||
self.assertTrue('Creating virtual environment...' in out)
|
self.assertIn('Creating virtual environment...', out)
|
||||||
with open(join(venv_dir, BOOTSTRAP_FILENAME)) as f:
|
with open(join(venv_dir, BOOTSTRAP_FILENAME)) as f:
|
||||||
bootstrap_version = f.read()
|
bootstrap_version = f.read()
|
||||||
|
|
||||||
@@ -329,8 +329,8 @@ class AutoTests(TestCase):
|
|||||||
out, err = run_le_auto(le_auto_path, venv_dir, base_url,
|
out, err = run_le_auto(le_auto_path, venv_dir, base_url,
|
||||||
PIP_FIND_LINKS=pip_find_links)
|
PIP_FIND_LINKS=pip_find_links)
|
||||||
|
|
||||||
self.assertFalse('Upgrading certbot-auto ' in out)
|
self.assertNotIn('Upgrading certbot-auto ', out)
|
||||||
self.assertTrue('Creating virtual environment...' in out)
|
self.assertIn('Creating virtual environment...', out)
|
||||||
|
|
||||||
def test_openssl_failure(self):
|
def test_openssl_failure(self):
|
||||||
"""Make sure we stop if the openssl signature check fails."""
|
"""Make sure we stop if the openssl signature check fails."""
|
||||||
|
@@ -5,7 +5,6 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import atexit
|
import atexit
|
||||||
import contextlib
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
@@ -302,8 +301,7 @@ def main():
|
|||||||
make_and_verify_selection(args.server_root, tempdir)
|
make_and_verify_selection(args.server_root, tempdir)
|
||||||
|
|
||||||
tarpath = os.path.join(tempdir, "config.tar.gz")
|
tarpath = os.path.join(tempdir, "config.tar.gz")
|
||||||
# contextlib.closing used for py26 support
|
with tarfile.open(tarpath, mode="w:gz") as tar:
|
||||||
with contextlib.closing(tarfile.open(tarpath, mode="w:gz")) as tar:
|
|
||||||
tar.add(tempdir, arcname=".")
|
tar.add(tempdir, arcname=".")
|
||||||
|
|
||||||
# TODO: Submit tarpath
|
# TODO: Submit tarpath
|
||||||
|
@@ -31,10 +31,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
9
setup.py
9
setup.py
@@ -52,13 +52,6 @@ install_requires = [
|
|||||||
'zope.interface',
|
'zope.interface',
|
||||||
]
|
]
|
||||||
|
|
||||||
# env markers cause problems with older pip and setuptools
|
|
||||||
if sys.version_info < (2, 7):
|
|
||||||
install_requires.extend([
|
|
||||||
'argparse',
|
|
||||||
'ordereddict',
|
|
||||||
])
|
|
||||||
|
|
||||||
dev_extras = [
|
dev_extras = [
|
||||||
# Pin astroid==1.3.5, pylint==1.4.2 as a workaround for #289
|
# Pin astroid==1.3.5, pylint==1.4.2 as a workaround for #289
|
||||||
'astroid==1.3.5',
|
'astroid==1.3.5',
|
||||||
@@ -98,10 +91,8 @@ setup(
|
|||||||
'Operating System :: POSIX :: Linux',
|
'Operating System :: POSIX :: Linux',
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
|
@@ -15,10 +15,4 @@ VENV_BIN=${VENV_PATH}/bin
|
|||||||
|
|
||||||
cd letsencrypt
|
cd letsencrypt
|
||||||
./tools/venv.sh
|
./tools/venv.sh
|
||||||
PYVER=`python --version 2>&1 | cut -d" " -f 2 | cut -d. -f1,2 | sed 's/\.//'`
|
venv/bin/tox -e py27
|
||||||
|
|
||||||
if [ $PYVER -eq 26 ] ; then
|
|
||||||
venv/bin/tox -e py26
|
|
||||||
else
|
|
||||||
venv/bin/tox -e py27
|
|
||||||
fi
|
|
||||||
|
@@ -3,7 +3,7 @@ import sys
|
|||||||
|
|
||||||
# Run Python's built-in HTTP server
|
# Run Python's built-in HTTP server
|
||||||
# Usage: python ./tests/run_http_server.py port_num
|
# Usage: python ./tests/run_http_server.py port_num
|
||||||
# NOTE: This script should be compatible with 2.6, 2.7, 3.3+
|
# NOTE: This script should be compatible with 2.7, 3.4+
|
||||||
|
|
||||||
# sys.argv (port number) is passed as-is to the HTTP server module
|
# sys.argv (port number) is passed as-is to the HTTP server module
|
||||||
runpy.run_module(
|
runpy.run_module(
|
||||||
|
@@ -18,10 +18,6 @@ for requirement in "$@" ; do
|
|||||||
pkg=$(echo $requirement | cut -f1 -d\[) # remove any extras such as [dev]
|
pkg=$(echo $requirement | cut -f1 -d\[) # remove any extras such as [dev]
|
||||||
if [ $pkg = "." ]; then
|
if [ $pkg = "." ]; then
|
||||||
pkg="certbot"
|
pkg="certbot"
|
||||||
else
|
|
||||||
# Work around a bug in pytest/importlib for the deprecated Python 3.3.
|
|
||||||
# See https://travis-ci.org/certbot/certbot/jobs/308774157#L1333.
|
|
||||||
pkg=$(echo "$pkg" | tr - _)
|
|
||||||
fi
|
fi
|
||||||
"$(dirname $0)/pytest.sh" --pyargs $pkg
|
"$(dirname $0)/pytest.sh" --pyargs $pkg
|
||||||
done
|
done
|
||||||
|
41
tox.ini
41
tox.ini
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
[tox]
|
[tox]
|
||||||
skipsdist = true
|
skipsdist = true
|
||||||
envlist = modification,py{26,33,34,35,36},cover,lint
|
envlist = modification,py{34,35,36},cover,lint
|
||||||
|
|
||||||
[base]
|
[base]
|
||||||
# pip installs the requested packages in editable mode
|
# pip installs the requested packages in editable mode
|
||||||
@@ -14,25 +14,22 @@ pip_install = {toxinidir}/tools/pip_install_editable.sh
|
|||||||
# before the script moves on to the next package. All dependencies are pinned
|
# before the script moves on to the next package. All dependencies are pinned
|
||||||
# to a specific version for increased stability for developers.
|
# to a specific version for increased stability for developers.
|
||||||
install_and_test = {toxinidir}/tools/install_and_test.sh
|
install_and_test = {toxinidir}/tools/install_and_test.sh
|
||||||
py26_packages =
|
all_packages =
|
||||||
acme[dev] \
|
acme[dev] \
|
||||||
.[dev] \
|
.[dev] \
|
||||||
certbot-apache \
|
certbot-apache \
|
||||||
certbot-dns-cloudflare \
|
certbot-dns-cloudflare \
|
||||||
|
certbot-dns-cloudxns \
|
||||||
certbot-dns-digitalocean \
|
certbot-dns-digitalocean \
|
||||||
|
certbot-dns-dnsimple \
|
||||||
|
certbot-dns-dnsmadeeasy \
|
||||||
certbot-dns-google \
|
certbot-dns-google \
|
||||||
|
certbot-dns-luadns \
|
||||||
|
certbot-dns-nsone \
|
||||||
certbot-dns-rfc2136 \
|
certbot-dns-rfc2136 \
|
||||||
certbot-dns-route53 \
|
certbot-dns-route53 \
|
||||||
certbot-nginx \
|
certbot-nginx \
|
||||||
letshelp-certbot
|
letshelp-certbot
|
||||||
non_py26_packages =
|
|
||||||
certbot-dns-cloudxns \
|
|
||||||
certbot-dns-dnsimple \
|
|
||||||
certbot-dns-dnsmadeeasy \
|
|
||||||
certbot-dns-luadns \
|
|
||||||
certbot-dns-nsone
|
|
||||||
all_packages =
|
|
||||||
{[base]py26_packages} {[base]non_py26_packages}
|
|
||||||
install_packages =
|
install_packages =
|
||||||
{toxinidir}/tools/pip_install_editable.sh {[base]all_packages}
|
{toxinidir}/tools/pip_install_editable.sh {[base]all_packages}
|
||||||
source_paths =
|
source_paths =
|
||||||
@@ -54,32 +51,15 @@ source_paths =
|
|||||||
letshelp-certbot/letshelp_certbot
|
letshelp-certbot/letshelp_certbot
|
||||||
tests/lock_test.py
|
tests/lock_test.py
|
||||||
|
|
||||||
[testenv:py26]
|
|
||||||
commands =
|
|
||||||
{[base]install_and_test} {[base]py26_packages}
|
|
||||||
python tests/lock_test.py
|
|
||||||
deps =
|
|
||||||
setuptools==36.8.0
|
|
||||||
wheel==0.29.0
|
|
||||||
passenv = TRAVIS
|
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
commands =
|
commands =
|
||||||
{[testenv:py26]commands}
|
{[base]install_and_test} {[base]all_packages}
|
||||||
{[base]install_and_test} {[base]non_py26_packages}
|
python tests/lock_test.py
|
||||||
setenv =
|
setenv =
|
||||||
PYTHONPATH = {toxinidir}
|
PYTHONPATH = {toxinidir}
|
||||||
PYTHONHASHSEED = 0
|
PYTHONHASHSEED = 0
|
||||||
passenv =
|
passenv =
|
||||||
{[testenv:py26]passenv}
|
TRAVIS
|
||||||
|
|
||||||
[testenv:py33]
|
|
||||||
commands =
|
|
||||||
{[testenv]commands}
|
|
||||||
deps =
|
|
||||||
wheel==0.29.0
|
|
||||||
passenv =
|
|
||||||
{[testenv]passenv}
|
|
||||||
|
|
||||||
[testenv:py27-oldest]
|
[testenv:py27-oldest]
|
||||||
commands =
|
commands =
|
||||||
@@ -104,7 +84,6 @@ passenv =
|
|||||||
{[testenv]passenv}
|
{[testenv]passenv}
|
||||||
|
|
||||||
[testenv:lint]
|
[testenv:lint]
|
||||||
# recent versions of pylint do not support Python 2.6 (#97, #187)
|
|
||||||
basepython = python2.7
|
basepython = python2.7
|
||||||
# separating into multiple invocations disables cross package
|
# separating into multiple invocations disables cross package
|
||||||
# duplicate code checking; if one of the commands fails, others will
|
# duplicate code checking; if one of the commands fails, others will
|
||||||
|
Reference in New Issue
Block a user