Compare commits

...

11 Commits

Author SHA1 Message Date
Brad Warren
d7094299db No heavy tests. 2020-11-17 15:46:38 -08:00
Brad Warren
7536a8d768 Disable mypy on RFC plugin 2020-11-17 15:46:30 -08:00
Brad Warren
46c344e92c Fix lint by telling pylint it cannot be trusted 2020-11-17 15:46:30 -08:00
Brad Warren
4d89718930 Use <= to "pin" dnspython 2020-11-17 15:46:30 -08:00
Brad Warren
635fd7b534 Upgrade typed-ast 2020-11-17 15:46:30 -08:00
Brad Warren
af34764709 Update PyYAML and packages which pinned it back 2020-11-17 15:46:30 -08:00
Brad Warren
a197a28f24 Move more tests to Python 3.9 2020-11-17 15:46:30 -08:00
Brad Warren
098521dd3d undo changes to tox.ini 2020-11-17 15:46:30 -08:00
Brad Warren
8178fc0235 s/\( *'Pro.*3\.\)8\(',\)/\18\2\n\19\2/ 2020-11-17 15:46:30 -08:00
Brad Warren
0867174e79 Mention Python 3.9 support in changelog. 2020-11-17 15:46:30 -08:00
Brad Warren
e331d847c7 Test on Python 3.9. 2020-11-17 15:46:30 -08:00
27 changed files with 77 additions and 38 deletions

View File

@@ -4,7 +4,7 @@ jobs:
- name: IMAGE_NAME - name: IMAGE_NAME
value: ubuntu-18.04 value: ubuntu-18.04
- name: PYTHON_VERSION - name: PYTHON_VERSION
value: 3.8 value: 3.9
- group: certbot-common - group: certbot-common
strategy: strategy:
matrix: matrix:
@@ -14,6 +14,9 @@ jobs:
linux-py37: linux-py37:
PYTHON_VERSION: 3.7 PYTHON_VERSION: 3.7
TOXENV: py37 TOXENV: py37
linux-py38:
PYTHON_VERSION: 3.8
TOXENV: py38
linux-py37-nopin: linux-py37-nopin:
PYTHON_VERSION: 3.7 PYTHON_VERSION: 3.7
TOXENV: py37 TOXENV: py37
@@ -62,6 +65,14 @@ jobs:
PYTHON_VERSION: 3.8 PYTHON_VERSION: 3.8
TOXENV: integration TOXENV: integration
ACME_SERVER: boulder-v2 ACME_SERVER: boulder-v2
linux-boulder-v1-py39-integration:
PYTHON_VERSION: 3.9
TOXENV: integration
ACME_SERVER: boulder-v1
linux-boulder-v2-py39-integration:
PYTHON_VERSION: 3.9
TOXENV: integration
ACME_SERVER: boulder-v2
nginx-compat: nginx-compat:
TOXENV: nginx_compat TOXENV: nginx_compat
linux-integration-rfc2136: linux-integration-rfc2136:
@@ -72,21 +83,6 @@ jobs:
TOXENV: le_auto_oraclelinux6 TOXENV: le_auto_oraclelinux6
docker-dev: docker-dev:
TOXENV: docker_dev TOXENV: docker_dev
macos-farmtest-apache2:
# We run one of these test farm tests on macOS to help ensure the
# tests continue to work on the platform.
IMAGE_NAME: macOS-10.15
PYTHON_VERSION: 3.8
TOXENV: test-farm-apache2
farmtest-leauto-upgrades:
PYTHON_VERSION: 3.7
TOXENV: test-farm-leauto-upgrades
farmtest-certonly-standalone:
PYTHON_VERSION: 3.7
TOXENV: test-farm-certonly-standalone
farmtest-sdists:
PYTHON_VERSION: 3.7
TOXENV: test-farm-sdists
pool: pool:
vmImage: $(IMAGE_NAME) vmImage: $(IMAGE_NAME)
steps: steps:

View File

@@ -1,17 +1,17 @@
jobs: jobs:
- job: test - job: test
variables: variables:
PYTHON_VERSION: 3.8 PYTHON_VERSION: 3.9
strategy: strategy:
matrix: matrix:
macos-py27: macos-py27:
IMAGE_NAME: macOS-10.15 IMAGE_NAME: macOS-10.15
PYTHON_VERSION: 2.7 PYTHON_VERSION: 2.7
TOXENV: py27 TOXENV: py27
macos-py38: macos-py39:
IMAGE_NAME: macOS-10.15 IMAGE_NAME: macOS-10.15
PYTHON_VERSION: 3.8 PYTHON_VERSION: 3.9
TOXENV: py38 TOXENV: py39
windows-py36: windows-py36:
IMAGE_NAME: vs2017-win2016 IMAGE_NAME: vs2017-win2016
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
@@ -38,10 +38,10 @@ jobs:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
TOXENV: py36 TOXENV: py36
linux-py38-cover: linux-py39-cover:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 3.8 PYTHON_VERSION: 3.9
TOXENV: py38-cover TOXENV: py39-cover
linux-py37-lint: linux-py37-lint:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 3.7 PYTHON_VERSION: 3.7

View File

@@ -3,4 +3,3 @@ stages:
jobs: jobs:
- template: ../jobs/standard-tests-jobs.yml - template: ../jobs/standard-tests-jobs.yml
- template: ../jobs/extended-tests-jobs.yml - template: ../jobs/extended-tests-jobs.yml
- template: ../jobs/packaging-jobs.yml

View File

@@ -66,6 +66,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
], ],

View File

@@ -53,6 +53,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -52,6 +52,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
], ],

View File

@@ -50,6 +50,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
], ],

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -64,6 +64,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -74,6 +74,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -62,6 +62,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -66,6 +66,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -62,6 +62,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -1,3 +1,13 @@
# type: ignore
# pylint: disable=no-member
# Many attributes of dnspython are now dynamically defined which causes both
# mypy and pylint to error about accessing attributes they think do not exist.
# This is the case even in up-to-date versions of mypy and pylint which as of
# writing this are 0.790 and 2.6.0 respectively. This problem may be fixed in
# dnspython 2.1.0. See https://github.com/rthalley/dnspython/issues/598. For
# now, let's disable these checks. This is done at the very top of the file
# like this because "type: ignore" must be the first line in the file to be
# respected by mypy.
"""DNS Authenticator using RFC 2136 Dynamic Updates.""" """DNS Authenticator using RFC 2136 Dynamic Updates."""
import logging import logging

View File

@@ -63,6 +63,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -58,6 +58,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -62,6 +62,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -49,6 +49,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -8,7 +8,7 @@ Certbot adheres to [Semantic Versioning](https://semver.org/).
* Added timeout to DNS query function calls for dns-rfc2136 plugin. * Added timeout to DNS query function calls for dns-rfc2136 plugin.
* Confirmation when deleting certificates * Confirmation when deleting certificates
* * Support for Python 3.9 was added to Certbot and all of its components.
### Changed ### Changed

View File

@@ -131,6 +131,7 @@ setup(
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP',
'Topic :: Security', 'Topic :: Security',
'Topic :: System :: Installation/Setup', 'Topic :: System :: Installation/Setup',

View File

@@ -26,9 +26,15 @@ coverage==4.5.4
decorator==4.4.1 decorator==4.4.1
deprecated==1.2.10 deprecated==1.2.10
dns-lexicon==3.3.17 dns-lexicon==3.3.17
dnspython==1.15.0 # There is no version of dnspython that works on both Python 2 and Python 3.9.
docker==3.7.2 # To work around this, we make use of the fact that subject to other
docker-compose==1.25.0 # constraints, pip will install the newest version of a package while ignoring
# versions that don't support the version of Python being used. The result of
# this is dnspython 2.0.0 is installed in Python 3 while dnspython 1.16.0 is
# installed in Python 2.
dnspython<=2.0.0
docker==4.3.1
docker-compose==1.26.2
docker-pycreds==0.4.0 docker-pycreds==0.4.0
dockerpty==0.4.1 dockerpty==0.4.1
docopt==0.6.2 docopt==0.6.2
@@ -94,8 +100,9 @@ pytest-sugar==0.9.2
pytest-rerunfailures==4.2 pytest-rerunfailures==4.2
python-dateutil==2.8.1 python-dateutil==2.8.1
python-digitalocean==1.11 python-digitalocean==1.11
python-dotenv==0.14.0
pywin32==227 pywin32==227
PyYAML==3.13 PyYAML==5.3.1
repoze.sphinx.autointerface==0.8 repoze.sphinx.autointerface==0.8
requests-file==1.4.2 requests-file==1.4.2
requests-oauthlib==1.3.0 requests-oauthlib==1.3.0
@@ -116,7 +123,7 @@ tox==3.14.0
tqdm==4.19.4 tqdm==4.19.4
traitlets==4.3.3 traitlets==4.3.3
twine==1.11.0 twine==1.11.0
typed-ast==1.4.0 typed-ast==1.4.1
typing==3.6.4 typing==3.6.4
uritemplate==3.0.0 uritemplate==3.0.0
virtualenv==16.6.2 virtualenv==16.6.2

View File

@@ -1,8 +1,9 @@
#!/usr/bin/env python #!/usr/bin/env python
"""Merges multiple Python requirements files into one file. """Merges multiple Python requirements files into one file.
Requirements files specified later take precedence over earlier ones. Only Requirements files specified later take precedence over earlier ones.
simple SomeProject==1.2.3 format is currently supported. Only the simple formats SomeProject==1.2.3 or SomeProject<=1.2.3 are
currently supported.
""" """
from __future__ import print_function from __future__ import print_function
@@ -16,17 +17,22 @@ def process_entries(entries):
:param list entries: List of entries :param list entries: List of entries
:returns: mapping from a project to its pinned version :returns: mapping from a project to its version specifier
:rtype: dict :rtype: dict
""" """
data = {} data = {}
for e in entries: for e in entries:
e = e.strip() e = e.strip()
if e and not e.startswith('#') and not e.startswith('-e'): if e and not e.startswith('#') and not e.startswith('-e'):
project, version = e.split('==') for comparison in ('==', '<=',):
if not version: parts = e.split(comparison)
if len(parts) == 2:
project_name = parts[0]
version = parts[1]
data[project_name] = comparison + version
break
else:
raise ValueError("Unexpected syntax '{0}'".format(e)) raise ValueError("Unexpected syntax '{0}'".format(e))
data[project] = version
return data return data
def read_file(file_path): def read_file(file_path):
@@ -44,10 +50,11 @@ def read_file(file_path):
def output_requirements(requirements): def output_requirements(requirements):
"""Prepare print requirements to stdout. """Prepare print requirements to stdout.
:param dict requirements: mapping from a project to its pinned version :param dict requirements: mapping from a project to its version
specifier
""" """
return '\n'.join('{0}=={1}'.format(key, value) return '\n'.join('{0}{1}'.format(key, value)
for key, value in sorted(requirements.items())) for key, value in sorted(requirements.items()))