Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-certbot for openSUSE:Factory checked in at 2023-12-14 22:02:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-certbot (Old) and /work/SRC/openSUSE:Factory/.python-certbot.new.25432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot" Thu Dec 14 22:02:50 2023 rev:48 rq:1133000 version:2.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-certbot/python-certbot.changes 2023-11-06 21:15:11.089266719 +0100 +++ /work/SRC/openSUSE:Factory/.python-certbot.new.25432/python-certbot.changes 2023-12-14 22:02:52.223482654 +0100 @@ -1,0 +2,14 @@ +Thu Dec 7 10:40:28 UTC 2023 - Markéta Machová <mmach...@suse.com> + +- Update to 2.8.0 + * Support for Python 3.7 was removed. + * Stop using the deprecated pkg_resources API included in setuptools. + +------------------------------------------------------------------- +Thu Nov 16 12:56:34 UTC 2023 - Markéta Machová <mmach...@suse.com> + +- Update to 2.7.4 + * Fixed a bug introduced in version 2.7.0 that caused interactively entered + webroot plugin values to not be saved for renewal. + +------------------------------------------------------------------- Old: ---- certbot-2.7.3.tar.gz New: ---- certbot-2.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-certbot.spec ++++++ --- /var/tmp/diff_new_pack.S7d3A8/_old 2023-12-14 22:02:52.991510356 +0100 +++ /var/tmp/diff_new_pack.S7d3A8/_new 2023-12-14 22:02:52.995510501 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-certbot -Version: 2.7.3 +Version: 2.8.0 Release: 0 Summary: ACME client License: Apache-2.0 @@ -69,6 +69,7 @@ %prep %setup -q -n certbot-%{version} +%autopatch -p1 %build %python_build ++++++ certbot-2.7.3.tar.gz -> certbot-2.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/CHANGELOG.md new/certbot-2.8.0/CHANGELOG.md --- old/certbot-2.7.3/CHANGELOG.md 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/CHANGELOG.md 2023-12-05 20:13:52.000000000 +0100 @@ -2,6 +2,34 @@ Certbot adheres to [Semantic Versioning](https://semver.org/). +## 2.8.0 - 2023-12-05 + +### Added + +* Added support for [Alpine Linux](https://www.alpinelinux.org) distribution when is used the apache plugin + +### Changed + +* Support for Python 3.7 was removed. + +### Fixed + +* Stop using the deprecated `pkg_resources` API included in `setuptools`. + +More details about these changes can be found on our GitHub repo. + +## 2.7.4 - 2023-11-01 + +### Fixed + +* Fixed a bug introduced in version 2.7.0 that caused interactively entered + webroot plugin values to not be saved for renewal. +* Fixed a bug introduced in version 2.7.0 of our Lexicon based DNS plugins that + caused them to fail to find the DNS zone that needs to be modified in some + cases. + +More details about these changes can be found on our GitHub repo. + ## 2.7.3 - 2023-10-24 ### Fixed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/PKG-INFO new/certbot-2.8.0/PKG-INFO --- old/certbot-2.7.3/PKG-INFO 2023-10-24 22:42:05.459497700 +0200 +++ new/certbot-2.8.0/PKG-INFO 2023-12-05 20:13:53.303259000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot -Version: 2.7.3 +Version: 2.8.0 Summary: ACME client Home-page: https://github.com/certbot/certbot Author: Certbot Project @@ -14,7 +14,6 @@ Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 @@ -25,12 +24,75 @@ Classifier: Topic :: System :: Networking Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Utilities -Requires-Python: >=3.7 +Requires-Python: >=3.8 +License-File: LICENSE.txt +Requires-Dist: acme>=2.8.0 +Requires-Dist: ConfigArgParse>=1.5.3 +Requires-Dist: configobj>=5.0.6 +Requires-Dist: cryptography>=3.2.1 +Requires-Dist: distro>=1.0.1 +Requires-Dist: importlib_resources>=1.3.1; python_version < "3.9" +Requires-Dist: importlib_metadata>=4.6; python_version < "3.10" +Requires-Dist: josepy>=1.13.0 +Requires-Dist: parsedatetime>=2.4 +Requires-Dist: pyrfc3339 +Requires-Dist: pytz>=2019.3 +Requires-Dist: pywin32>=300; sys_platform == "win32" +Requires-Dist: setuptools>=41.6.0 Provides-Extra: all +Requires-Dist: azure-devops; extra == "all" +Requires-Dist: ipdb; extra == "all" +Requires-Dist: poetry>=1.2.0; extra == "all" +Requires-Dist: poetry-plugin-export>=1.1.0; extra == "all" +Requires-Dist: twine; extra == "all" +Requires-Dist: Sphinx>=1.2; extra == "all" +Requires-Dist: sphinx_rtd_theme; extra == "all" +Requires-Dist: coverage; extra == "all" +Requires-Dist: mypy; extra == "all" +Requires-Dist: pip; extra == "all" +Requires-Dist: pylint; extra == "all" +Requires-Dist: pytest; extra == "all" +Requires-Dist: pytest-cov; extra == "all" +Requires-Dist: pytest-xdist; extra == "all" +Requires-Dist: setuptools; extra == "all" +Requires-Dist: tox; extra == "all" +Requires-Dist: types-httplib2; extra == "all" +Requires-Dist: types-pyOpenSSL; extra == "all" +Requires-Dist: types-pyRFC3339; extra == "all" +Requires-Dist: types-pytz; extra == "all" +Requires-Dist: types-pywin32; extra == "all" +Requires-Dist: types-requests; extra == "all" +Requires-Dist: types-setuptools; extra == "all" +Requires-Dist: types-six; extra == "all" +Requires-Dist: wheel; extra == "all" Provides-Extra: dev +Requires-Dist: azure-devops; extra == "dev" +Requires-Dist: ipdb; extra == "dev" +Requires-Dist: poetry>=1.2.0; extra == "dev" +Requires-Dist: poetry-plugin-export>=1.1.0; extra == "dev" +Requires-Dist: twine; extra == "dev" Provides-Extra: docs +Requires-Dist: Sphinx>=1.2; extra == "docs" +Requires-Dist: sphinx_rtd_theme; extra == "docs" Provides-Extra: test -License-File: LICENSE.txt +Requires-Dist: coverage; extra == "test" +Requires-Dist: mypy; extra == "test" +Requires-Dist: pip; extra == "test" +Requires-Dist: pylint; extra == "test" +Requires-Dist: pytest; extra == "test" +Requires-Dist: pytest-cov; extra == "test" +Requires-Dist: pytest-xdist; extra == "test" +Requires-Dist: setuptools; extra == "test" +Requires-Dist: tox; extra == "test" +Requires-Dist: types-httplib2; extra == "test" +Requires-Dist: types-pyOpenSSL; extra == "test" +Requires-Dist: types-pyRFC3339; extra == "test" +Requires-Dist: types-pytz; extra == "test" +Requires-Dist: types-pywin32; extra == "test" +Requires-Dist: types-requests; extra == "test" +Requires-Dist: types-setuptools; extra == "test" +Requires-Dist: types-six; extra == "test" +Requires-Dist: wheel; extra == "test" .. This file contains a series of comments that are used to include sections of this README in other files. Do not modify these comments unless you know what you are doing. tag:intro-begin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/__init__.py new/certbot-2.8.0/certbot/__init__.py --- old/certbot-2.7.3/certbot/__init__.py 2023-10-24 22:42:05.000000000 +0200 +++ new/certbot-2.8.0/certbot/__init__.py 2023-12-05 20:13:53.000000000 +0100 @@ -1,13 +1,4 @@ """Certbot client.""" -import sys -import warnings # version number like 1.2.3a0, must have at least 2 parts, like 1.2 -__version__ = '2.7.3' - -if sys.version_info[:2] == (3, 7): - warnings.warn( - "Python 3.7 support will be dropped in the next planned release of " - "certbot. Please upgrade your Python version.", - PendingDeprecationWarning, - ) # pragma: no cover +__version__ = '2.8.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/cli/helpful.py new/certbot-2.8.0/certbot/_internal/cli/helpful.py --- old/certbot-2.7.3/certbot/_internal/cli/helpful.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/cli/helpful.py 2023-12-05 20:13:52.000000000 +0100 @@ -165,6 +165,7 @@ def remove_config_file_domains_for_renewal(self, config: NamespaceConfig) -> None: """Make "certbot renew" safe if domains are set in cli.ini.""" # Works around https://github.com/certbot/certbot/issues/4096 + assert config.argument_sources is not None if (config.argument_sources['domains'] == ArgumentSource.CONFIG_FILE and self.verb == "renew"): config.domains = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/constants.py new/certbot-2.8.0/certbot/_internal/constants.py --- old/certbot-2.7.3/certbot/_internal/constants.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/constants.py 2023-12-05 20:13:52.000000000 +0100 @@ -21,7 +21,7 @@ OLD_SETUPTOOLS_PLUGINS_ENTRY_POINT = "letsencrypt.plugins" """Plugins Setuptools entry point before rename.""" -CLI_DEFAULTS: Dict[str, Any] = dict( # noqa +CLI_DEFAULTS: Dict[str, Any] = dict( # pylint: disable=use-dict-literal config_files=[ os.path.join(misc.get_default_folder('config'), 'cli.ini'), # https://freedesktop.org/wiki/Software/xdg-user-dirs/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/display/completer.py new/certbot-2.8.0/certbot/_internal/display/completer.py --- old/certbot-2.7.3/certbot/_internal/display/completer.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/display/completer.py 2023-12-05 20:13:52.000000000 +0100 @@ -3,12 +3,9 @@ from types import TracebackType from typing import Callable from typing import Iterator +from typing import Literal from typing import Optional from typing import Type -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing_extensions import Literal # readline module is not available on all systems try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/main.py new/certbot-2.8.0/certbot/_internal/main.py --- old/certbot-2.7.3/certbot/_internal/main.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/main.py 2023-12-05 20:13:52.000000000 +0100 @@ -1863,10 +1863,6 @@ if config.func != plugins_cmd: # pylint: disable=comparison-with-callable raise - if sys.version_info[:2] == (3, 7): - logger.warning("Python 3.7 support will be dropped in the next planned release " - "of Certbot - please upgrade your Python version.") - with make_displayer(config) as displayer: display_obj.set_display(displayer) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/plugins/disco.py new/certbot-2.8.0/certbot/_internal/plugins/disco.py --- old/certbot-2.7.3/certbot/_internal/plugins/disco.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/plugins/disco.py 2023-12-05 20:13:52.000000000 +0100 @@ -207,6 +207,7 @@ plugin2_dist = other_ep.entry_point.dist plugin1 = plugin1_dist.name.lower() if plugin1_dist else "unknown" plugin2 = plugin2_dist.name.lower() if plugin2_dist else "unknown" + # pylint: disable=broad-exception-raised raise Exception("Duplicate plugin name {0} from {1} and {2}.".format( plugin_ep.name, plugin1, plugin2)) if issubclass(plugin_ep.plugin_cls, interfaces.Plugin): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/_internal/tests/configuration_test.py new/certbot-2.8.0/certbot/_internal/tests/configuration_test.py --- old/certbot-2.7.3/certbot/_internal/tests/configuration_test.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/_internal/tests/configuration_test.py 2023-12-05 20:13:52.000000000 +0100 @@ -165,17 +165,22 @@ def test_set_by_user_exception(self): from certbot.configuration import NamespaceConfig - + # a newly created NamespaceConfig has no argument sources dict, so an # exception is raised config = NamespaceConfig(self.config.namespace) with pytest.raises(RuntimeError): config.set_by_user('whatever') - + # now set an argument sources dict config.set_argument_sources({}) assert not config.set_by_user('whatever') + def test_set_by_user_mutables(self): + assert not self.config.set_by_user('domains') + self.config.domains.append('example.org') + assert self.config.set_by_user('domains') + if __name__ == '__main__': sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/configuration.py new/certbot-2.8.0/certbot/configuration.py --- old/certbot-2.7.3/certbot/configuration.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/configuration.py 2023-12-05 20:13:52.000000000 +0100 @@ -66,7 +66,8 @@ self.namespace: argparse.Namespace # Avoid recursion loop because of the delegation defined in __setattr__ object.__setattr__(self, 'namespace', namespace) - object.__setattr__(self, 'argument_sources', None) + object.__setattr__(self, '_argument_sources', None) + object.__setattr__(self, '_previously_accessed_mutables', {}) self.namespace.config_dir = os.path.abspath(self.namespace.config_dir) self.namespace.work_dir = os.path.abspath(self.namespace.work_dir) @@ -90,7 +91,7 @@ """ # Avoid recursion loop because of the delegation defined in __setattr__ - object.__setattr__(self, 'argument_sources', argument_sources) + object.__setattr__(self, '_argument_sources', argument_sources) def set_by_user(self, var: str) -> bool: @@ -145,15 +146,48 @@ """ If an argument_sources dict was set, overwrites an argument's source to be ArgumentSource.RUNTIME. Used when certbot sets an argument's values - at runtime. + at runtime. This also clears the modified value from + _previously_accessed_mutables since it is no longer needed. """ - if self.argument_sources is not None: - self.argument_sources[name] = ArgumentSource.RUNTIME + if self._argument_sources is not None: + self._argument_sources[name] = ArgumentSource.RUNTIME + if name in self._previously_accessed_mutables: + del self._previously_accessed_mutables[name] + + @property + def argument_sources(self) -> Optional[Dict[str, ArgumentSource]]: + """Returns _argument_sources after handling any changes to accessed mutable values.""" + # We keep values in _previously_accessed_mutables until we've detected a modification to try + # to provide up-to-date information when argument_sources is accessed. Once a mutable object + # has been accessed, it can be modified at any time if a reference to it was kept somewhere + # else. + + # We copy _previously_accessed_mutables because _mark_runtime_override modifies it. + for name, prev_value in self._previously_accessed_mutables.copy().items(): + current_value = getattr(self.namespace, name) + if current_value != prev_value: + self._mark_runtime_override(name) + return self._argument_sources # Delegate any attribute not explicitly defined to the underlying namespace object. + # + # If any mutable namespace attributes are explicitly defined in the future, you'll probably want + # to take an approach like the one used in __getattr__ and the argument_sources property. def __getattr__(self, name: str) -> Any: - return getattr(self.namespace, name) + arg_sources = self.argument_sources + value = getattr(self.namespace, name) + if arg_sources is not None: + # If the requested attribute was already modified at runtime, we don't need to track any + # future changes. + if name not in arg_sources or arg_sources[name] != ArgumentSource.RUNTIME: + # If name is already in _previously_accessed_mutables, we don't need to make a copy + # of it again. If its value was changed, this would have been caught while preparing + # the return value of the property self.argument_sources accessed earlier in this + # function. + if name not in self._previously_accessed_mutables and not _is_immutable(value): + self._previously_accessed_mutables[name] = copy.deepcopy(value) + return value def __setattr__(self, name: str, value: Any) -> None: self._mark_runtime_override(name) @@ -425,9 +459,10 @@ # Work around https://bugs.python.org/issue1515 for py26 tests :( :( new_ns = copy.deepcopy(self.namespace) new_config = type(self)(new_ns) - if self.set_argument_sources is not None: - new_sources = copy.deepcopy(self.argument_sources) - new_config.set_argument_sources(new_sources) + # Avoid recursion loop because of the delegation defined in __setattr__ + object.__setattr__(new_config, '_argument_sources', copy.deepcopy(self.argument_sources)) + object.__setattr__(new_config, '_previously_accessed_mutables', + copy.deepcopy(self._previously_accessed_mutables)) return new_config @@ -450,3 +485,15 @@ for domain in config.namespace.domains: # This may be redundant, but let's be paranoid util.enforce_domain_sanity(domain) + + +def _is_immutable(value: Any) -> bool: + """Is value of an immutable type?""" + if isinstance(value, tuple): + # tuples are only immutable if all contained values are immutable. + return all(_is_immutable(subvalue) for subvalue in value) + for immutable_type in (int, float, complex, str, bytes, bool, frozenset,): + if isinstance(value, immutable_type): + return True + # The last case we consider here is None which is also immutable. + return value is None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/plugins/dns_common_lexicon.py new/certbot-2.8.0/certbot/plugins/dns_common_lexicon.py --- old/certbot-2.7.3/certbot/plugins/dns_common_lexicon.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/plugins/dns_common_lexicon.py 2023-12-05 20:13:52.000000000 +0100 @@ -198,6 +198,10 @@ dict_config = { 'domain': domain, + # We bypass Lexicon subdomain resolution by setting the 'delegated' field in the config + # to the value of the 'domain' field itself. Here we consider that the domain passed to + # _build_lexicon_config() is already the exact subdomain of the actual DNS zone to use. + 'delegated': domain, 'provider_name': self._provider_name, 'ttl': self._ttl, self._provider_name: {item[2]: self._credentials.conf(item[0]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/plugins/dns_test_common.py new/certbot-2.8.0/certbot/plugins/dns_test_common.py --- old/certbot-2.7.3/certbot/plugins/dns_test_common.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/plugins/dns_test_common.py 2023-12-05 20:13:52.000000000 +0100 @@ -1,7 +1,7 @@ """Base test class for DNS authenticators.""" from typing import Any from typing import Mapping -from typing import TYPE_CHECKING +from typing import Protocol from unittest import mock import configobj @@ -14,12 +14,6 @@ from certbot.tests import acme_util from certbot.tests import util as test_util -if TYPE_CHECKING: - from typing_extensions import Protocol -else: - Protocol = object - - DOMAIN = 'example.com' KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/plugins/dns_test_common_lexicon.py new/certbot-2.8.0/certbot/plugins/dns_test_common_lexicon.py --- old/certbot-2.7.3/certbot/plugins/dns_test_common_lexicon.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/plugins/dns_test_common_lexicon.py 2023-12-05 20:13:52.000000000 +0100 @@ -6,8 +6,8 @@ from typing import cast from typing import Generator from typing import List +from typing import Protocol from typing import Tuple -from typing import TYPE_CHECKING from unittest import mock from unittest.mock import MagicMock import warnings @@ -28,11 +28,6 @@ from certbot.plugins.dns_test_common import _AuthenticatorCallableTestCase from certbot.tests import util as test_util -if TYPE_CHECKING: # pragma: no cover - from typing_extensions import Protocol -else: - Protocol = object - DOMAIN = 'example.com' KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot/tests/util.py new/certbot-2.8.0/certbot/tests/util.py --- old/certbot-2.7.3/certbot/tests/util.py 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/certbot/tests/util.py 2023-12-05 20:13:52.000000000 +0100 @@ -1,6 +1,7 @@ """Test utilities.""" import atexit from contextlib import ExitStack +import copy from importlib import reload as reload_module import io import logging @@ -403,7 +404,8 @@ def setUp(self) -> None: super().setUp() self.config = configuration.NamespaceConfig( - mock.MagicMock(**constants.CLI_DEFAULTS), + # We make a copy here so any mutable values from CLI_DEFAULTS do not get modified. + mock.MagicMock(**copy.deepcopy(constants.CLI_DEFAULTS)), ) self.config.set_argument_sources({}) self.config.namespace.verb = "certonly" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot.egg-info/PKG-INFO new/certbot-2.8.0/certbot.egg-info/PKG-INFO --- old/certbot-2.7.3/certbot.egg-info/PKG-INFO 2023-10-24 22:42:05.000000000 +0200 +++ new/certbot-2.8.0/certbot.egg-info/PKG-INFO 2023-12-05 20:13:53.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot -Version: 2.7.3 +Version: 2.8.0 Summary: ACME client Home-page: https://github.com/certbot/certbot Author: Certbot Project @@ -14,7 +14,6 @@ Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 @@ -25,12 +24,75 @@ Classifier: Topic :: System :: Networking Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Utilities -Requires-Python: >=3.7 +Requires-Python: >=3.8 +License-File: LICENSE.txt +Requires-Dist: acme>=2.8.0 +Requires-Dist: ConfigArgParse>=1.5.3 +Requires-Dist: configobj>=5.0.6 +Requires-Dist: cryptography>=3.2.1 +Requires-Dist: distro>=1.0.1 +Requires-Dist: importlib_resources>=1.3.1; python_version < "3.9" +Requires-Dist: importlib_metadata>=4.6; python_version < "3.10" +Requires-Dist: josepy>=1.13.0 +Requires-Dist: parsedatetime>=2.4 +Requires-Dist: pyrfc3339 +Requires-Dist: pytz>=2019.3 +Requires-Dist: pywin32>=300; sys_platform == "win32" +Requires-Dist: setuptools>=41.6.0 Provides-Extra: all +Requires-Dist: azure-devops; extra == "all" +Requires-Dist: ipdb; extra == "all" +Requires-Dist: poetry>=1.2.0; extra == "all" +Requires-Dist: poetry-plugin-export>=1.1.0; extra == "all" +Requires-Dist: twine; extra == "all" +Requires-Dist: Sphinx>=1.2; extra == "all" +Requires-Dist: sphinx_rtd_theme; extra == "all" +Requires-Dist: coverage; extra == "all" +Requires-Dist: mypy; extra == "all" +Requires-Dist: pip; extra == "all" +Requires-Dist: pylint; extra == "all" +Requires-Dist: pytest; extra == "all" +Requires-Dist: pytest-cov; extra == "all" +Requires-Dist: pytest-xdist; extra == "all" +Requires-Dist: setuptools; extra == "all" +Requires-Dist: tox; extra == "all" +Requires-Dist: types-httplib2; extra == "all" +Requires-Dist: types-pyOpenSSL; extra == "all" +Requires-Dist: types-pyRFC3339; extra == "all" +Requires-Dist: types-pytz; extra == "all" +Requires-Dist: types-pywin32; extra == "all" +Requires-Dist: types-requests; extra == "all" +Requires-Dist: types-setuptools; extra == "all" +Requires-Dist: types-six; extra == "all" +Requires-Dist: wheel; extra == "all" Provides-Extra: dev +Requires-Dist: azure-devops; extra == "dev" +Requires-Dist: ipdb; extra == "dev" +Requires-Dist: poetry>=1.2.0; extra == "dev" +Requires-Dist: poetry-plugin-export>=1.1.0; extra == "dev" +Requires-Dist: twine; extra == "dev" Provides-Extra: docs +Requires-Dist: Sphinx>=1.2; extra == "docs" +Requires-Dist: sphinx_rtd_theme; extra == "docs" Provides-Extra: test -License-File: LICENSE.txt +Requires-Dist: coverage; extra == "test" +Requires-Dist: mypy; extra == "test" +Requires-Dist: pip; extra == "test" +Requires-Dist: pylint; extra == "test" +Requires-Dist: pytest; extra == "test" +Requires-Dist: pytest-cov; extra == "test" +Requires-Dist: pytest-xdist; extra == "test" +Requires-Dist: setuptools; extra == "test" +Requires-Dist: tox; extra == "test" +Requires-Dist: types-httplib2; extra == "test" +Requires-Dist: types-pyOpenSSL; extra == "test" +Requires-Dist: types-pyRFC3339; extra == "test" +Requires-Dist: types-pytz; extra == "test" +Requires-Dist: types-pywin32; extra == "test" +Requires-Dist: types-requests; extra == "test" +Requires-Dist: types-setuptools; extra == "test" +Requires-Dist: types-six; extra == "test" +Requires-Dist: wheel; extra == "test" .. This file contains a series of comments that are used to include sections of this README in other files. Do not modify these comments unless you know what you are doing. tag:intro-begin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/certbot.egg-info/requires.txt new/certbot-2.8.0/certbot.egg-info/requires.txt --- old/certbot-2.7.3/certbot.egg-info/requires.txt 2023-10-24 22:42:05.000000000 +0200 +++ new/certbot-2.8.0/certbot.egg-info/requires.txt 2023-12-05 20:13:53.000000000 +0100 @@ -1,4 +1,4 @@ -acme>=2.7.3 +acme>=2.8.0 ConfigArgParse>=1.5.3 configobj>=5.0.6 cryptography>=3.2.1 @@ -29,6 +29,7 @@ coverage mypy pip +pylint pytest pytest-cov pytest-xdist @@ -42,12 +43,8 @@ types-requests types-setuptools types-six -typing-extensions wheel -[all:python_full_version >= "3.7.2"] -pylint - [dev] azure-devops ipdb @@ -63,6 +60,7 @@ coverage mypy pip +pylint pytest pytest-cov pytest-xdist @@ -76,8 +74,4 @@ types-requests types-setuptools types-six -typing-extensions wheel - -[test:python_full_version >= "3.7.2"] -pylint diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/docs/cli-help.txt new/certbot-2.8.0/docs/cli-help.txt --- old/certbot-2.7.3/docs/cli-help.txt 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/docs/cli-help.txt 2023-12-05 20:13:52.000000000 +0100 @@ -1,4 +1,4 @@ -usage: +usage: certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ... Certbot can obtain and install HTTPS/TLS/SSL certificates. By default, @@ -122,7 +122,7 @@ case, and to know when to deprecate support for past Python versions and flags. If you wish to hide this information from the Let's Encrypt server, set this to - "". (default: CertbotACMEClient/2.7.2 (certbot; + "". (default: CertbotACMEClient/2.7.4 (certbot; OS_NAME OS_VERSION) Authenticator/XXX Installer/YYY (SUBCOMMAND; flags: FLAGS) Py/major.minor.patchlevel). The flags encoded in the user agent are: --duplicate, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/docs/contributing.rst new/certbot-2.8.0/docs/contributing.rst --- old/certbot-2.7.3/docs/contributing.rst 2023-10-24 22:42:04.000000000 +0200 +++ new/certbot-2.8.0/docs/contributing.rst 2023-12-05 20:13:52.000000000 +0100 @@ -328,8 +328,8 @@ for one example of that. Certbot client supports dynamic discovery of plugins through the -`setuptools entry points`_ using the `certbot.plugins` group. This -way you can, for example, create a custom implementation of +`importlib.metadata entry points`_ using the `certbot.plugins` group. +This way you can, for example, create a custom implementation of `~certbot.interfaces.Authenticator` or the `~certbot.interfaces.Installer` without having to merge it with the core upstream source code. An example is provided in @@ -352,8 +352,8 @@ only work for users who have Certbot installed from OS packages or via pip. -.. _`setuptools entry points`: - https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points +.. _`importlib.metadata entry points`: + https://importlib-metadata.readthedocs.io/en/latest/using.html#entry-points Writing your own plugin snap ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-2.7.3/setup.py new/certbot-2.8.0/setup.py --- old/certbot-2.7.3/setup.py 2023-10-24 22:42:05.000000000 +0200 +++ new/certbot-2.8.0/setup.py 2023-12-05 20:13:52.000000000 +0100 @@ -70,8 +70,7 @@ 'coverage', 'mypy', 'pip', - # Our pinned version of pylint requires Python >= 3.7.2. - 'pylint ; python_full_version >= "3.7.2"', + 'pylint', 'pytest', 'pytest-cov', 'pytest-xdist', @@ -85,9 +84,6 @@ 'types-requests', 'types-setuptools', 'types-six', - # typing-extensions is required to import typing.Protocol and make the mypy checks - # pass (along with pylint about non-existent objects) on Python 3.7 - 'typing-extensions', 'wheel', ] @@ -103,7 +99,7 @@ author="Certbot Project", author_email='certbot-...@eff.org', license='Apache License 2.0', - python_requires='>=3.7', + python_requires='>=3.8', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', @@ -113,7 +109,6 @@ 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10',