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',

Reply via email to