diff options
author | Brad Warren <bmw@users.noreply.github.com> | 2022-10-20 23:07:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-20 23:07:18 +0300 |
commit | 3a738cadc36d1950b96de915ee6e3e8736ff258e (patch) | |
tree | b02534e1808cdb27d1978622939c4c3b6ea015f7 | |
parent | 5270c34dd79e2dfc28017afc152d0ec68763fbcf (diff) |
Remove docker-compose dependency (#9436)
This is progress towards https://github.com/certbot/certbot/issues/9370 as discussed at https://github.com/certbot/certbot/pull/9435.
I kept the command using `docker-compose` because `docker compose` doesn't seem that widely recognized yet and https://www.docker.com/blog/announcing-compose-v2-general-availability/ describes aliasing `docker-compose` to `docker compose` on newer systems by default.
* refactor boulder shutdown
* remove docker-compose dep
* Reorder shutdown process
-rw-r--r-- | acme/acme/messages.py | 6 | ||||
-rw-r--r-- | certbot-ci/certbot_integration_tests/nginx_tests/context.py | 3 | ||||
-rwxr-xr-x | certbot-ci/certbot_integration_tests/utils/acme_server.py | 41 | ||||
-rw-r--r-- | certbot-ci/certbot_integration_tests/utils/constants.py | 1 | ||||
-rw-r--r-- | certbot-ci/certbot_integration_tests/utils/dns_server.py | 4 | ||||
-rw-r--r-- | certbot-ci/setup.py | 1 | ||||
-rw-r--r-- | tools/oldest_constraints.txt | 64 | ||||
-rw-r--r-- | tools/requirements.txt | 90 |
8 files changed, 102 insertions, 108 deletions
diff --git a/acme/acme/messages.py b/acme/acme/messages.py index cdefcfa4f..a6eab3467 100644 --- a/acme/acme/messages.py +++ b/acme/acme/messages.py @@ -157,7 +157,7 @@ class Error(jose.JSONObjectWithFields, errors.Error): # Mypy does not understand the josepy magic happening here, and falsely claims # that subproblems is redefined. Let's ignore the type check here. @subproblems.decoder # type: ignore - def subproblems(value: List[Dict[str, Any]]) -> Tuple['Error', ...]: # type: ignore[misc] # pylint: disable=no-self-argument,missing-function-docstring + def subproblems(value: List[Dict[str, Any]]) -> Tuple['Error', ...]: # pylint: disable=no-self-argument,missing-function-docstring return tuple(Error.from_json(subproblem) for subproblem in value) @classmethod @@ -603,7 +603,7 @@ class Authorization(ResourceBody): # Mypy does not understand the josepy magic happening here, and falsely claims # that challenge is redefined. Let's ignore the type check here. @challenges.decoder # type: ignore - def challenges(value: List[Dict[str, Any]]) -> Tuple[ChallengeBody, ...]: # type: ignore[misc] # pylint: disable=no-self-argument,missing-function-docstring + def challenges(value: List[Dict[str, Any]]) -> Tuple[ChallengeBody, ...]: # pylint: disable=no-self-argument,missing-function-docstring return tuple(ChallengeBody.from_json(chall) for chall in value) @property @@ -691,7 +691,7 @@ class Order(ResourceBody): # Mypy does not understand the josepy magic happening here, and falsely claims # that identifiers is redefined. Let's ignore the type check here. @identifiers.decoder # type: ignore - def identifiers(value: List[Dict[str, Any]]) -> Tuple[Identifier, ...]: # type: ignore[misc] # pylint: disable=no-self-argument,missing-function-docstring + def identifiers(value: List[Dict[str, Any]]) -> Tuple[Identifier, ...]: # pylint: disable=no-self-argument,missing-function-docstring return tuple(Identifier.from_json(identifier) for identifier in value) diff --git a/certbot-ci/certbot_integration_tests/nginx_tests/context.py b/certbot-ci/certbot_integration_tests/nginx_tests/context.py index d52501596..9dd633db2 100644 --- a/certbot-ci/certbot_integration_tests/nginx_tests/context.py +++ b/certbot-ci/certbot_integration_tests/nginx_tests/context.py @@ -9,6 +9,7 @@ import pytest from certbot_integration_tests.certbot_tests import context as certbot_context from certbot_integration_tests.nginx_tests import nginx_config as config from certbot_integration_tests.utils import certbot_call +from certbot_integration_tests.utils import constants from certbot_integration_tests.utils import misc @@ -65,4 +66,4 @@ class IntegrationTestsContext(certbot_context.IntegrationTestsContext): def _stop_nginx(self) -> None: assert self.process.poll() is None self.process.terminate() - self.process.wait() + self.process.wait(constants.MAX_SUBPROCESS_WAIT) diff --git a/certbot-ci/certbot_integration_tests/utils/acme_server.py b/certbot-ci/certbot_integration_tests/utils/acme_server.py index 8994d0ef0..c12057cd4 100755 --- a/certbot-ci/certbot_integration_tests/utils/acme_server.py +++ b/certbot-ci/certbot_integration_tests/utils/acme_server.py @@ -18,6 +18,7 @@ from typing import Dict from typing import List from typing import Mapping from typing import Optional +from typing import Tuple from typing import Type import requests @@ -63,6 +64,7 @@ class ACMEServer: self._stdout = sys.stdout if stdout else open(os.devnull, 'w') # pylint: disable=consider-using-with self._dns_server = dns_server self._http_01_port = http_01_port + self._preterminate_cmds_args: List[Tuple[Tuple[Any, ...], Dict[str, Any]]] = [] if http_01_port != DEFAULT_HTTP_01_PORT: if self._acme_type != 'pebble' or self._proxy: raise ValueError('setting http_01_port is not currently supported ' @@ -85,6 +87,7 @@ class ACMEServer: """Stop the test stack, and clean its resources""" print('=> Tear down the test infrastructure...') try: + self._run_preterminate_cmds() for process in self._processes: try: process.terminate() @@ -94,17 +97,7 @@ class ACMEServer: if e.errno != errno.ESRCH: raise for process in self._processes: - process.wait() - - if os.path.exists(os.path.join(self._workspace, 'boulder')): - # Boulder docker generates build artifacts owned by root with 0o744 permissions. - # If we started the acme server from a normal user that has access to the Docker - # daemon, this user will not be able to delete these artifacts from the host. - # We need to do it through a docker. - process = self._launch_process(['docker', 'run', '--rm', '-v', - '{0}:/workspace'.format(self._workspace), - 'alpine', 'rm', '-rf', '/workspace/boulder']) - process.wait() + process.wait(MAX_SUBPROCESS_WAIT) finally: if os.path.exists(self._workspace): shutil.rmtree(self._workspace) @@ -187,7 +180,7 @@ class ACMEServer: # Load Boulder from git, that includes a docker-compose.yml ready for production. process = self._launch_process(['git', 'clone', 'https://github.com/letsencrypt/boulder', '--single-branch', '--depth=1', instance_path]) - process.wait() + process.wait(MAX_SUBPROCESS_WAIT) # Allow Boulder to ignore usual limit rate policies, useful for tests. os.rename(join(instance_path, 'test/rate-limit-policies-b.yml'), @@ -202,6 +195,17 @@ class ACMEServer: with open(join(instance_path, 'test/config/va{}.json'.format(suffix)), 'w') as f: f.write(json.dumps(config, indent=2, separators=(',', ': '))) + # This command needs to be run before we try and terminate running processes because + # docker-compose up doesn't always respond to SIGTERM. See + # https://github.com/certbot/certbot/pull/9435. + self._register_preterminate_cmd(['docker-compose', 'down'], cwd=instance_path) + # Boulder docker generates build artifacts owned by root with 0o744 permissions. + # If we started the acme server from a normal user that has access to the Docker + # daemon, this user will not be able to delete these artifacts from the host. + # We need to do it through a docker. + self._register_preterminate_cmd(['docker', 'run', '--rm', '-v', + '{0}:/workspace'.format(self._workspace), 'alpine', 'rm', + '-rf', '/workspace/boulder']) try: # Launch the Boulder server self._launch_process(['docker-compose', 'up', '--force-recreate'], cwd=instance_path) @@ -224,7 +228,7 @@ class ACMEServer: process = self._launch_process([ 'docker-compose', 'logs'], cwd=instance_path, force_stderr=True ) - process.wait() + process.wait(MAX_SUBPROCESS_WAIT) raise print('=> Finished boulder instance deployment.') @@ -253,6 +257,17 @@ class ACMEServer: self._processes.append(process) return process + def _register_preterminate_cmd(self, *args: Any, **kwargs: Any) -> None: + self._preterminate_cmds_args.append((args, kwargs)) + + def _run_preterminate_cmds(self) -> None: + for args, kwargs in self._preterminate_cmds_args: + process = self._launch_process(*args, **kwargs) + process.wait(MAX_SUBPROCESS_WAIT) + # It's unlikely to matter, but let's clear the list of cleanup commands + # once they've been run. + self._preterminate_cmds_args.clear() + def main() -> None: # pylint: disable=missing-function-docstring diff --git a/certbot-ci/certbot_integration_tests/utils/constants.py b/certbot-ci/certbot_integration_tests/utils/constants.py index a788881ef..ce0cd91d5 100644 --- a/certbot-ci/certbot_integration_tests/utils/constants.py +++ b/certbot-ci/certbot_integration_tests/utils/constants.py @@ -9,3 +9,4 @@ PEBBLE_MANAGEMENT_URL = 'https://localhost:15000' PEBBLE_CHALLTESTSRV_URL = f'http://localhost:{CHALLTESTSRV_PORT}' MOCK_OCSP_SERVER_PORT = 4002 PEBBLE_ALTERNATE_ROOTS = 2 +MAX_SUBPROCESS_WAIT = 120 diff --git a/certbot-ci/certbot_integration_tests/utils/dns_server.py b/certbot-ci/certbot_integration_tests/utils/dns_server.py index 7dfc9c0b2..ed5b6ccae 100644 --- a/certbot-ci/certbot_integration_tests/utils/dns_server.py +++ b/certbot-ci/certbot_integration_tests/utils/dns_server.py @@ -17,6 +17,8 @@ from typing import Type from pkg_resources import resource_filename +from certbot_integration_tests.utils import constants + BIND_DOCKER_IMAGE = "internetsystemsconsortium/bind9:9.16" BIND_BIND_ADDRESS = ("127.0.0.1", 45953) @@ -67,7 +69,7 @@ class DNSServer: if self.process: try: self.process.terminate() - self.process.wait() + self.process.wait(constants.MAX_SUBPROCESS_WAIT) except BaseException as e: print("BIND9 did not stop cleanly: {}".format(e), file=sys.stderr) diff --git a/certbot-ci/setup.py b/certbot-ci/setup.py index 4341ef266..728c6c707 100644 --- a/certbot-ci/setup.py +++ b/certbot-ci/setup.py @@ -15,7 +15,6 @@ if parse_version(setuptools_version) < parse_version(min_setuptools_version): install_requires = [ 'coverage', 'cryptography', - 'docker-compose', 'pyopenssl', 'pytest', 'pytest-cov', diff --git a/tools/oldest_constraints.txt b/tools/oldest_constraints.txt index 16dfbb758..e5f4db42f 100644 --- a/tools/oldest_constraints.txt +++ b/tools/oldest_constraints.txt @@ -3,58 +3,49 @@ apacheconfig==0.3.2 asn1crypto==0.24.0 astroid==2.11.7; python_version >= "3.7" -atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7" attrs==22.1.0; python_version >= "3.7" -bcrypt==3.2.2; python_version >= "3.7" boto3==1.15.15 botocore==1.18.15 -cached-property==1.5.2; python_version >= "3.7" -certifi==2022.6.15; python_version >= "3.7" +certifi==2022.9.24; python_version >= "3.7" cffi==1.9.1 chardet==3.0.4 cloudflare==1.5.1 colorama==0.4.5; sys_platform == "win32" and python_version >= "3.7" configargparse==0.10.0 configobj==5.0.6 -coverage==6.4.2; python_version >= "3.7" +coverage==6.5.0; python_version >= "3.7" cryptography==3.2.1 -cython==0.29.31 +cython==0.29.32 dill==0.3.5.1; python_version >= "3.7" -distlib==0.3.5; python_version >= "3.7" +distlib==0.3.6; python_version >= "3.7" distro==1.0.1 dns-lexicon==3.2.1 dnspython==1.15.0 -docker-compose==1.25.5; python_version >= "3.7" -docker==4.2.2; python_version >= "3.7" -dockerpty==0.4.1; python_version >= "3.7" -docopt==0.6.2; python_version >= "3.7" execnet==1.9.0; python_version >= "3.7" -filelock==3.7.1; python_version >= "3.7" +filelock==3.8.0; python_version >= "3.7" funcsigs==0.4 future==0.18.2; python_version >= "3.7" google-api-python-client==1.5.5 httplib2==0.9.2 idna==2.6 -importlib-metadata==4.12.0; python_version < "3.8" and python_version >= "3.7" +importlib-metadata==5.0.0; python_version < "3.8" and python_version >= "3.7" iniconfig==1.1.1; python_version >= "3.7" ipaddress==1.0.16 isort==5.10.1; python_version >= "3.7" and python_version < "4.0" jmespath==0.10.0; python_version >= "3.7" josepy==1.13.0; python_version >= "3.7" -jsonschema==3.2.0; python_version >= "3.7" lazy-object-proxy==1.7.1; python_version >= "3.7" logger==1.4; python_version >= "3.7" mccabe==0.7.0; python_version >= "3.7" mock==1.0.1 mypy-extensions==0.4.3; python_version >= "3.7" -mypy==0.971; python_version >= "3.7" +mypy==0.982; python_version >= "3.7" ndg-httpsclient==0.3.2 oauth2client==4.0.0 packaging==21.3; python_version >= "3.7" -paramiko==2.11.0; python_version >= "3.7" parsedatetime==2.4 pbr==1.8.0 -pip==22.2.1; python_version >= "3.7" +pip==22.3; python_version >= "3.7" platformdirs==2.5.2; python_version >= "3.7" pluggy==1.0.0; python_version >= "3.7" ply==3.4 @@ -63,53 +54,48 @@ pyasn1-modules==0.0.10; python_version >= "3.7" pyasn1==0.1.9 pycparser==2.14 pylint==2.13.9 -pynacl==1.5.0; python_version >= "3.7" pyopenssl==17.5.0 pyparsing==2.2.1 -pypiwin32==223; sys_platform == "win32" and python_version >= "3.7" pyrfc3339==1.0 -pyrsistent==0.18.1; python_version >= "3.7" -pytest-cov==3.0.0; python_version >= "3.7" +pytest-cov==4.0.0; python_version >= "3.7" pytest-forked==1.4.0; python_version >= "3.7" pytest-xdist==2.5.0; python_version >= "3.7" -pytest==7.1.2; python_version >= "3.7" +pytest==7.1.3; python_version >= "3.7" python-augeas==0.5.0 python-dateutil==2.8.2; python_version >= "3.7" python-digitalocean==1.11 pytz==2019.3 pywin32==304; sys_platform == "win32" and python_version >= "3.7" -pyyaml==5.4.1; python_version >= "3.7" +pyyaml==6.0; python_version >= "3.7" requests-file==1.5.1; python_version >= "3.7" -requests-toolbelt==0.9.1; python_version >= "3.7" +requests-toolbelt==0.10.0; python_version >= "3.7" requests==2.20.0 rsa==4.9; python_version >= "3.7" and python_version < "4" s3transfer==0.3.7; python_version >= "3.7" setuptools==41.6.0 six==1.11.0 -texttable==1.6.4; python_version >= "3.7" -tldextract==3.3.1; python_version >= "3.7" +tldextract==3.4.0; python_version >= "3.7" tomli==2.0.1; python_version < "3.11" and python_version >= "3.7" or python_full_version <= "3.11.0a6" and python_version >= "3.7" or python_version >= "3.7" tox==1.9.2; python_version >= "3.7" typed-ast==1.5.4; python_version >= "3.7" and python_version < "3.8" or implementation_name == "cpython" and python_version < "3.8" and python_version >= "3.7" -types-cryptography==3.3.21; python_version >= "3.7" -types-mock==4.0.15; python_version >= "3.7" -types-pyopenssl==22.0.9; python_version >= "3.7" +types-cryptography==3.3.23.1; python_version >= "3.7" +types-mock==4.0.15.1; python_version >= "3.7" +types-pyopenssl==22.1.0.1; python_version >= "3.7" types-pyrfc3339==1.1.1; python_version >= "3.7" -types-python-dateutil==2.8.19; python_version >= "3.7" -types-pytz==2022.1.2; python_version >= "3.7" -types-requests==2.28.5; python_version >= "3.7" -types-setuptools==63.2.2; python_version >= "3.7" -types-six==1.16.18; python_version >= "3.7" -types-urllib3==1.26.17; python_version >= "3.7" -typing-extensions==4.3.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7" +types-python-dateutil==2.8.19.2; python_version >= "3.7" +types-pytz==2022.5.0.0; python_version >= "3.7" +types-requests==2.28.11.2; python_version >= "3.7" +types-setuptools==65.5.0.1; python_version >= "3.7" +types-six==1.16.21; python_version >= "3.7" +types-urllib3==1.26.25.1; python_version >= "3.7" +typing-extensions==4.4.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7" uritemplate==3.0.1; python_version >= "3.7" urllib3==1.24.2 -virtualenv==20.16.2; python_version >= "3.7" -websocket-client==0.59.0; python_version >= "3.7" +virtualenv==20.16.5; python_version >= "3.7" wheel==0.33.6 wheel==0.33.6; python_version >= "3.7" wrapt==1.14.1; python_version >= "3.7" -zipp==3.8.1; python_version < "3.8" and python_version >= "3.7" +zipp==3.9.0; python_version < "3.8" and python_version >= "3.7" zope.component==4.1.0 zope.event==4.0.3 zope.hookable==4.0.4 diff --git a/tools/requirements.txt b/tools/requirements.txt index fb3afc90f..36c8bbf85 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -11,52 +11,47 @@ appdirs==1.4.4; python_version >= "3.7" and python_version < "4.0" appnope==0.1.3; python_version >= "3.7" and sys_platform == "darwin" astroid==2.11.7; python_version >= "3.7" attrs==22.1.0; python_version >= "3.7" -awscli==1.25.76 -awscli==1.25.76; python_version >= "3.7" +awscli==1.25.95 +awscli==1.25.95; python_version >= "3.7" azure-devops==6.0.0b4; python_version >= "3.7" babel==2.10.3; python_version >= "3.7" backcall==0.2.0; python_version >= "3.7" -bcrypt==4.0.0; python_version >= "3.7" +bcrypt==4.0.1; python_version >= "3.7" beautifulsoup4==4.11.1; python_version >= "3.7" bleach==5.0.1; python_version >= "3.7" -boto3==1.24.75; python_version >= "3.7" -botocore==1.27.75; python_version >= "3.7" +boto3==1.24.94; python_version >= "3.7" +botocore==1.27.94; python_version >= "3.7" cachecontrol==0.12.12; python_version >= "3.7" and python_version < "4.0" -cached-property==1.5.2; python_version < "3.8" and python_version >= "3.7" cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0" cachy==0.3.0; python_version >= "3.7" and python_version < "4.0" -certifi==2022.9.14; python_version >= "3.7" and python_version < "4" or python_version >= "3.7" +certifi==2022.9.24; python_version >= "3.7" and python_version < "4" or python_version >= "3.7" cffi==1.15.1; python_version >= "3.7" charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" cleo==1.0.0a5; python_version >= "3.7" and python_version < "4.0" -cloudflare==2.10.1; python_version >= "3.7" +cloudflare==2.10.2; python_version >= "3.7" colorama==0.4.4; python_version >= "3.7" configargparse==1.5.3; python_version >= "3.7" configobj==5.0.6; python_version >= "3.7" -coverage==6.4.4; python_version >= "3.7" +coverage==6.5.0; python_version >= "3.7" crashtest==0.3.1; python_version >= "3.7" and python_version < "4.0" -cryptography==38.0.1 -cryptography==38.0.1; python_version >= "3.7" +cryptography==38.0.2 +cryptography==38.0.2; python_version >= "3.7" cython==0.29.32 decorator==5.1.1; python_version >= "3.7" dill==0.3.5.1; python_version >= "3.7" distlib==0.3.6; python_version >= "3.7" -distro==1.7.0; python_version >= "3.7" +distro==1.8.0; python_version >= "3.7" dns-lexicon==3.11.1; python_version >= "3.7" and python_version < "4.0" dnspython==2.2.1; python_version >= "3.7" and python_version < "4.0" -docker-compose==1.29.2; python_version >= "3.7" -docker==6.0.0; python_version >= "3.7" -dockerpty==0.4.1; python_version >= "3.7" -docopt==0.6.2; python_version >= "3.7" docutils==0.16; python_version >= "3.7" entrypoints==0.3; python_version >= "3.7" and python_version < "4.0" execnet==1.9.0; python_version >= "3.7" fabric==2.7.1; python_version >= "3.7" filelock==3.8.0; python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0" -google-api-core==2.10.1; python_version >= "3.7" -google-api-python-client==2.61.0; python_version >= "3.7" +google-api-core==2.10.2; python_version >= "3.7" +google-api-python-client==2.65.0; python_version >= "3.7" google-auth-httplib2==0.1.0; python_version >= "3.7" -google-auth==2.11.0; python_version >= "3.7" +google-auth==2.13.0; python_version >= "3.7" googleapis-common-protos==1.56.4; python_version >= "3.7" html5lib==1.1; python_version >= "3.7" and python_version < "4.0" httplib2==0.20.4; python_version >= "3.7" @@ -64,7 +59,7 @@ idna==3.4; python_version >= "3.7" and python_version < "4" or python_version >= imagesize==1.4.1; python_version >= "3.7" importlib-metadata==1.7.0; python_version >= "3.7" and python_version < "3.8" iniconfig==1.1.1; python_version >= "3.7" -invoke==1.7.1; python_version >= "3.7" +invoke==1.7.3; python_version >= "3.7" ipdb==0.13.9; python_version >= "3.7" ipython==7.34.0; python_version >= "3.7" isodate==0.6.1; python_version >= "3.7" @@ -76,7 +71,6 @@ jmespath==1.0.1; python_version >= "3.7" josepy==1.13.0; python_version >= "3.7" jsonlines==3.1.0; python_version >= "3.7" jsonpickle==2.2.0; python_version >= "3.7" -jsonschema==3.2.0; python_version >= "3.7" keyring==22.3.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" lazy-object-proxy==1.7.1; python_version >= "3.7" markupsafe==2.1.1; python_version >= "3.7" @@ -86,9 +80,9 @@ mock==4.0.3 msgpack==1.0.4; python_version >= "3.7" and python_version < "4.0" msrest==0.6.21; python_version >= "3.7" mypy-extensions==0.4.3; python_version >= "3.7" -mypy==0.971; python_version >= "3.7" +mypy==0.982; python_version >= "3.7" oauth2client==4.1.3; python_version >= "3.7" -oauthlib==3.2.1; python_version >= "3.7" +oauthlib==3.2.2; python_version >= "3.7" packaging==20.9; python_version >= "3.7" paramiko==2.11.0; python_version >= "3.7" parsedatetime==2.6; python_version >= "3.7" @@ -96,7 +90,7 @@ parso==0.8.3; python_version >= "3.7" pathlib2==2.3.7.post1; python_version >= "3.7" pexpect==4.8.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" and sys_platform != "win32" pickleshare==0.7.5; python_version >= "3.7" -pip==22.2.2; python_version >= "3.7" +pip==22.3; python_version >= "3.7" pkginfo==1.8.3; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" platformdirs==2.5.2; python_version >= "3.7" pluggy==1.0.0; python_version >= "3.7" @@ -104,7 +98,7 @@ ply==3.11; python_version >= "3.7" poetry-core==1.1.0a7 poetry==1.2.0a2 prompt-toolkit==3.0.31; python_version >= "3.7" -protobuf==4.21.6; python_version >= "3.7" +protobuf==4.21.8; python_version >= "3.7" ptyprocess==0.7.0; python_version >= "3.7" and python_version < "4.0" py==1.11.0; python_version >= "3.7" pyasn1-modules==0.2.8; python_version >= "3.7" @@ -115,23 +109,21 @@ pylev==1.4.0; python_version >= "3.7" and python_version < "4.0" pylint==2.13.9 pynacl==1.5.0; python_version >= "3.7" pynsist==2.7; python_version >= "3.7" -pyopenssl==22.0.0; python_version >= "3.7" +pyopenssl==22.1.0; python_version >= "3.7" pyparsing==3.0.9; python_version >= "3.7" pyrfc3339==1.1; python_version >= "3.7" -pyrsistent==0.18.1; python_version >= "3.7" -pytest-cov==3.0.0; python_version >= "3.7" +pytest-cov==4.0.0; python_version >= "3.7" pytest-forked==1.4.0; python_version >= "3.7" pytest-xdist==2.5.0; python_version >= "3.7" pytest==7.1.3; python_version >= "3.7" python-augeas==1.1.0; python_version >= "3.7" python-dateutil==2.8.2; python_version >= "3.7" python-digitalocean==1.17.0; python_version >= "3.7" -python-dotenv==0.21.0; python_version >= "3.7" -pytz==2022.2.1; python_version >= "3.7" +pytz==2022.5; python_version >= "3.7" pywin32-ctypes==0.2.0; python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32" pywin32==304; sys_platform == "win32" and python_version >= "3.7" pyyaml==5.4.1; python_version >= "3.7" -readme-renderer==37.1; python_version >= "3.7" +readme-renderer==37.2; python_version >= "3.7" requests-download==0.1.2; python_version >= "3.7" requests-file==1.5.1; python_version >= "3.7" and python_version < "4.0" requests-oauthlib==1.3.1; python_version >= "3.7" @@ -142,8 +134,8 @@ rsa==4.7.2; python_version >= "3.7" and python_version < "4" s3transfer==0.6.0; python_version >= "3.7" secretstorage==3.3.3; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux" semantic-version==2.10.0; python_version >= "3.7" -setuptools-rust==1.5.1 -setuptools==65.3.0; python_version >= "3.7" +setuptools-rust==1.5.2 +setuptools==65.5.0; python_version >= "3.7" shellingham==1.5.0; python_version >= "3.7" and python_version < "4.0" six==1.16.0; python_version >= "3.7" snowballstemmer==2.2.0; python_version >= "3.7" @@ -156,38 +148,36 @@ sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" -texttable==1.6.4; python_version >= "3.7" -tldextract==3.3.1; python_version >= "3.7" and python_version < "4.0" +tldextract==3.4.0; python_version >= "3.7" and python_version < "4.0" toml==0.10.2; python_version >= "3.7" tomli==2.0.1; python_version < "3.11" and python_version >= "3.7" or python_full_version <= "3.11.0a6" and python_version >= "3.7" or python_version >= "3.7" -tomlkit==0.11.4; python_version >= "3.7" and python_version < "4.0" +tomlkit==0.11.5; python_version >= "3.7" and python_version < "4.0" tox==3.26.0; python_version >= "3.7" tqdm==4.64.1; python_version >= "3.7" -traitlets==5.4.0; python_version >= "3.7" +traitlets==5.5.0; python_version >= "3.7" twine==3.3.0; python_version >= "3.7" typed-ast==1.5.4; python_version >= "3.7" and python_version < "3.8" or implementation_name == "cpython" and python_version < "3.8" and python_version >= "3.7" -types-cryptography==3.3.23; python_version >= "3.7" -types-mock==4.0.15; python_version >= "3.7" -types-pyopenssl==22.0.10; python_version >= "3.7" +types-cryptography==3.3.23.1; python_version >= "3.7" +types-mock==4.0.15.1; python_version >= "3.7" +types-pyopenssl==22.1.0.1; python_version >= "3.7" types-pyrfc3339==1.1.1; python_version >= "3.7" -types-python-dateutil==2.8.19; python_version >= "3.7" -types-pytz==2022.2.1.0; python_version >= "3.7" -types-requests==2.28.10; python_version >= "3.7" -types-setuptools==65.3.0; python_version >= "3.7" -types-six==1.16.19; python_version >= "3.7" -types-urllib3==1.26.24; python_version >= "3.7" -typing-extensions==4.3.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7" +types-python-dateutil==2.8.19.2; python_version >= "3.7" +types-pytz==2022.5.0.0; python_version >= "3.7" +types-requests==2.28.11.2; python_version >= "3.7" +types-setuptools==65.5.0.1; python_version >= "3.7" +types-six==1.16.21; python_version >= "3.7" +types-urllib3==1.26.25.1; python_version >= "3.7" +typing-extensions==4.4.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7" uritemplate==4.1.1; python_version >= "3.7" urllib3==1.26.12; python_version >= "3.7" and python_version < "4" virtualenv==20.4.4; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" wcwidth==0.2.5; python_version >= "3.7" webencodings==0.5.1; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" -websocket-client==0.59.0; python_version >= "3.7" wheel==0.37.1; python_version >= "3.7" wrapt==1.14.1; python_version >= "3.7" yarg==0.1.9; python_version >= "3.7" -zipp==3.8.1; python_version >= "3.7" and python_version < "3.8" +zipp==3.9.0; python_version >= "3.7" and python_version < "3.8" zope.component==5.0.1; python_version >= "3.7" zope.event==4.5.0; python_version >= "3.7" zope.hookable==5.2; python_version >= "3.7" -zope.interface==5.4.0; python_version >= "3.7" +zope.interface==5.5.0; python_version >= "3.7" |