Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-certbot-dns-dnsmadeeasy for 
openSUSE:Factory checked in at 2025-06-16 12:26:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-dnsmadeeasy (Old)
 and      /work/SRC/openSUSE:Factory/.python-certbot-dns-dnsmadeeasy.new.19631 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-certbot-dns-dnsmadeeasy"

Mon Jun 16 12:26:26 2025 rev:47 rq:1286011 version:4.1.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-certbot-dns-dnsmadeeasy/python-certbot-dns-dnsmadeeasy.changes
    2025-04-22 17:29:48.782937472 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-certbot-dns-dnsmadeeasy.new.19631/python-certbot-dns-dnsmadeeasy.changes
 2025-06-16 12:26:29.612306258 +0200
@@ -1,0 +2,7 @@
+Fri Jun 13 14:51:13 UTC 2025 - Markéta Machová <mmach...@suse.com>
+
+- update to version 4.1.1
+  * Switched to src-layout from flat-layout to accommodate PEP 517 pip
+    editable installs
+
+-------------------------------------------------------------------

Old:
----
  certbot_dns_dnsmadeeasy-4.0.0.tar.gz

New:
----
  certbot_dns_dnsmadeeasy-4.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-certbot-dns-dnsmadeeasy.spec ++++++
--- /var/tmp/diff_new_pack.K4MjGS/_old  2025-06-16 12:26:30.164329244 +0200
+++ /var/tmp/diff_new_pack.K4MjGS/_new  2025-06-16 12:26:30.164329244 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-certbot-dns-dnsmadeeasy
-Version:        4.0.0
+Version:        4.1.1
 Release:        0
 Summary:        DNS Made Easy Authenticator plugin for Certbot
 License:        Apache-2.0

++++++ certbot_dns_dnsmadeeasy-4.0.0.tar.gz -> 
certbot_dns_dnsmadeeasy-4.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/MANIFEST.in 
new/certbot_dns_dnsmadeeasy-4.1.1/MANIFEST.in
--- old/certbot_dns_dnsmadeeasy-4.0.0/MANIFEST.in       2025-04-08 
00:03:33.000000000 +0200
+++ new/certbot_dns_dnsmadeeasy-4.1.1/MANIFEST.in       2025-06-12 
20:08:34.000000000 +0200
@@ -1,6 +1,6 @@
 include LICENSE.txt
 include README.rst
 recursive-include docs *
-include certbot_dns_dnsmadeeasy/py.typed
+include src/certbot_dns_dnsmadeeasy/py.typed
 global-exclude __pycache__
 global-exclude *.py[cod]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/PKG-INFO 
new/certbot_dns_dnsmadeeasy-4.1.1/PKG-INFO
--- old/certbot_dns_dnsmadeeasy-4.0.0/PKG-INFO  2025-04-08 00:03:37.820513500 
+0200
+++ new/certbot_dns_dnsmadeeasy-4.1.1/PKG-INFO  2025-06-12 20:08:40.030581500 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: certbot-dns-dnsmadeeasy
-Version: 4.0.0
+Version: 4.1.1
 Summary: DNS Made Easy DNS Authenticator plugin for Certbot
 Home-page: https://github.com/certbot/certbot
 Author: Certbot Project
@@ -24,11 +24,11 @@
 Classifier: Topic :: System :: Networking
 Classifier: Topic :: System :: Systems Administration
 Classifier: Topic :: Utilities
-Requires-Python: >=3.9
+Requires-Python: >=3.9.2
 License-File: LICENSE.txt
 Requires-Dist: dns-lexicon>=3.14.1
-Requires-Dist: acme>=4.0.0
-Requires-Dist: certbot>=4.0.0
+Requires-Dist: acme>=4.1.1
+Requires-Dist: certbot>=4.1.1
 Provides-Extra: docs
 Requires-Dist: Sphinx>=1.0; extra == "docs"
 Requires-Dist: sphinx_rtd_theme; extra == "docs"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/__init__.py 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/__init__.py
--- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/__init__.py       
2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/__init__.py       
1970-01-01 01:00:00.000000000 +0100
@@ -1,90 +0,0 @@
-"""
-The `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin automates the process of
-completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and
-subsequently removing, TXT records using the DNS Made Easy API.
-
-.. note::
-   The plugin is not installed by default. It can be installed by heading to
-   `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_, 
choosing your system and
-   selecting the Wildcard tab.
-
-Named Arguments
----------------
-
-=========================================  
=====================================
-``--dns-dnsmadeeasy-credentials``          DNS Made Easy credentials_ INI file.
-                                           (Required)
-``--dns-dnsmadeeasy-propagation-seconds``  The number of seconds to wait for 
DNS
-                                           to propagate before asking the ACME
-                                           server to verify the DNS record.
-                                           (Default: 60)
-=========================================  
=====================================
-
-
-Credentials
------------
-
-Use of this plugin requires a configuration file containing DNS Made Easy API
-credentials, obtained from your DNS Made Easy
-`account page <https://cp.dnsmadeeasy.com/account/info>`_.
-
-.. code-block:: ini
-   :name: credentials.ini
-   :caption: Example credentials file:
-
-   # DNS Made Easy API credentials used by Certbot
-   dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a
-   dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55
-
-The path to this file can be provided interactively or using the
-``--dns-dnsmadeeasy-credentials`` command-line argument. Certbot records the 
path
-to this file for use during renewal, but does not store the file's contents.
-
-.. caution::
-   You should protect these API credentials as you would the password to your
-   DNS Made Easy account. Users who can read this file can use these 
credentials
-   to issue arbitrary API calls on your behalf. Users who can cause Certbot to
-   run using these credentials can complete a ``dns-01`` challenge to acquire
-   new certificates or revoke existing certificates for associated domains,
-   even if those domains aren't being managed by this server.
-
-Certbot will emit a warning if it detects that the credentials file can be
-accessed by other users on your system. The warning reads "Unsafe permissions
-on credentials configuration file", followed by the path to the credentials
-file. This warning will be emitted each time Certbot uses the credentials file,
-including for renewal, and cannot be silenced except by addressing the issue
-(e.g., by using a command like ``chmod 600`` to restrict access to the file).
-
-
-Examples
---------
-
-.. code-block:: bash
-   :caption: To acquire a certificate for ``example.com``
-
-   certbot certonly \\
-     --dns-dnsmadeeasy \\
-     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
-     -d example.com
-
-.. code-block:: bash
-   :caption: To acquire a single certificate for both ``example.com`` and
-             ``www.example.com``
-
-   certbot certonly \\
-     --dns-dnsmadeeasy \\
-     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
-     -d example.com \\
-     -d www.example.com
-
-.. code-block:: bash
-   :caption: To acquire a certificate for ``example.com``, waiting 2 minutes
-             for DNS propagation
-
-   certbot certonly \\
-     --dns-dnsmadeeasy \\
-     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
-     --dns-dnsmadeeasy-propagation-seconds 120 \\
-     -d example.com
-
-"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/__init__.py 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/__init__.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/__init__.py 
    2025-04-08 00:03:33.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/__init__.py 
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"""Internal implementation of `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` 
plugin."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
      2025-04-08 00:03:33.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
      1970-01-01 01:00:00.000000000 +0100
@@ -1,61 +0,0 @@
-"""DNS Authenticator for DNS Made Easy DNS."""
-import logging
-from typing import Any
-from typing import Callable
-from typing import Optional
-
-from requests import HTTPError
-
-from certbot import errors
-from certbot.plugins import dns_common_lexicon
-
-logger = logging.getLogger(__name__)
-
-ACCOUNT_URL = 'https://cp.dnsmadeeasy.com/account/info'
-
-
-class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator):
-    """DNS Authenticator for DNS Made Easy
-
-    This Authenticator uses the DNS Made Easy API to fulfill a dns-01 
challenge.
-    """
-
-    description = ('Obtain certificates using a DNS TXT record (if you are 
using DNS Made Easy for '
-                   'DNS).')
-
-    def __init__(self, *args: Any, **kwargs: Any) -> None:
-        super().__init__(*args, **kwargs)
-        self._add_provider_option('api-key',
-                                  'API key for DNS Made Easy account, '
-                                  f'obtained from {ACCOUNT_URL}',
-                                  'auth_username')
-        self._add_provider_option('secret-key',
-                                  'Secret key for DNS Made Easy account, '
-                                  f'obtained from {ACCOUNT_URL}',
-                                  'auth_token')
-
-    @classmethod
-    def add_parser_arguments(cls, add: Callable[..., None],
-                             default_propagation_seconds: int = 60) -> None:
-        super().add_parser_arguments(add, default_propagation_seconds)
-        add('credentials', help='DNS Made Easy credentials INI file.')
-
-    def more_info(self) -> str:
-        return 'This plugin configures a DNS TXT record to respond to a dns-01 
challenge using ' + \
-               'the DNS Made Easy API.'
-
-    @property
-    def _provider_name(self) -> str:
-        return 'dnsmadeeasy'
-
-    def _handle_http_error(self, e: HTTPError, domain_name: str) -> 
Optional[errors.PluginError]:
-        if domain_name in str(e) and str(e).startswith('404 Client Error: Not 
Found for url:'):
-            return None
-
-        hint = None
-        if str(e).startswith('403 Client Error: Forbidden for url:'):
-            hint = 'Are your API key and Secret key values correct?'
-
-        hint_disp = f' ({hint})' if hint else ''
-
-        return errors.PluginError(f'Error determining zone identifier: 
{e}.{hint_disp}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
       2025-04-08 00:03:33.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
       1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"""certbot-dns-dnsmadeeasy tests"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
   2025-04-08 00:03:33.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
   1970-01-01 01:00:00.000000000 +0100
@@ -1,43 +0,0 @@
-"""Tests for certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy."""
-
-import sys
-from unittest import mock
-
-import pytest
-from requests import Response
-from requests.exceptions import HTTPError
-
-from certbot.compat import os
-from certbot.plugins import dns_test_common
-from certbot.plugins import dns_test_common_lexicon
-from certbot.plugins.dns_test_common import DOMAIN
-from certbot.tests import util as test_util
-
-API_KEY = 'foo'
-SECRET_KEY = 'bar'
-
-
-class AuthenticatorTest(test_util.TempDirTestCase,
-                        
dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest):
-
-    DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: 
{DOMAIN}.', response=Response())
-    LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.', 
response=Response())
-
-    def setUp(self):
-        super().setUp()
-
-        from certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy import 
Authenticator
-
-        path = os.path.join(self.tempdir, 'file.ini')
-        dns_test_common.write({"dnsmadeeasy_api_key": API_KEY,
-                               "dnsmadeeasy_secret_key": SECRET_KEY},
-                              path)
-
-        self.config = mock.MagicMock(dnsmadeeasy_credentials=path,
-                                     dnsmadeeasy_propagation_seconds=0)  # 
don't wait during tests
-
-        self.auth = Authenticator(self.config, "dnsmadeeasy")
-
-
-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_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO
--- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
2025-04-08 00:03:37.000000000 +0200
+++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-Metadata-Version: 2.4
-Name: certbot-dns-dnsmadeeasy
-Version: 4.0.0
-Summary: DNS Made Easy DNS Authenticator plugin for Certbot
-Home-page: https://github.com/certbot/certbot
-Author: Certbot Project
-Author-email: certbot-...@eff.org
-License: Apache License 2.0
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Plugins
-Classifier: Intended Audience :: System Administrators
-Classifier: License :: OSI Approved :: Apache Software License
-Classifier: Operating System :: POSIX :: Linux
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Topic :: Internet :: WWW/HTTP
-Classifier: Topic :: Security
-Classifier: Topic :: System :: Installation/Setup
-Classifier: Topic :: System :: Networking
-Classifier: Topic :: System :: Systems Administration
-Classifier: Topic :: Utilities
-Requires-Python: >=3.9
-License-File: LICENSE.txt
-Requires-Dist: dns-lexicon>=3.14.1
-Requires-Dist: acme>=4.0.0
-Requires-Dist: certbot>=4.0.0
-Provides-Extra: docs
-Requires-Dist: Sphinx>=1.0; extra == "docs"
-Requires-Dist: sphinx_rtd_theme; extra == "docs"
-Provides-Extra: test
-Requires-Dist: pytest; extra == "test"
-Dynamic: author
-Dynamic: author-email
-Dynamic: classifier
-Dynamic: home-page
-Dynamic: license
-Dynamic: license-file
-Dynamic: provides-extra
-Dynamic: requires-dist
-Dynamic: requires-python
-Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt  
    2025-04-08 00:03:37.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt  
    1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-LICENSE.txt
-MANIFEST.in
-README.rst
-setup.py
-certbot_dns_dnsmadeeasy/__init__.py
-certbot_dns_dnsmadeeasy/py.typed
-certbot_dns_dnsmadeeasy.egg-info/PKG-INFO
-certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
-certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
-certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
-certbot_dns_dnsmadeeasy.egg-info/requires.txt
-certbot_dns_dnsmadeeasy.egg-info/top_level.txt
-certbot_dns_dnsmadeeasy/_internal/__init__.py
-certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
-certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
-certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
-docs/.gitignore
-docs/Makefile
-docs/api.rst
-docs/conf.py
-docs/index.rst
-docs/make.bat
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
     2025-04-08 00:03:37.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
     1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
 2025-04-08 00:03:37.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-[certbot.plugins]
-dns-dnsmadeeasy = 
certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy:Authenticator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/requires.txt 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/requires.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/requires.txt 
    2025-04-08 00:03:37.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/requires.txt 
    1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-dns-lexicon>=3.14.1
-acme>=4.0.0
-certbot>=4.0.0
-
-[docs]
-Sphinx>=1.0
-sphinx_rtd_theme
-
-[test]
-pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
    2025-04-08 00:03:37.000000000 +0200
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-certbot_dns_dnsmadeeasy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/setup.py 
new/certbot_dns_dnsmadeeasy-4.1.1/setup.py
--- old/certbot_dns_dnsmadeeasy-4.0.0/setup.py  2025-04-08 00:03:33.000000000 
+0200
+++ new/certbot_dns_dnsmadeeasy-4.1.1/setup.py  2025-06-12 20:08:35.000000000 
+0200
@@ -4,7 +4,7 @@
 from setuptools import find_packages
 from setuptools import setup
 
-version = '4.0.0'
+version = '4.1.1'
 
 install_requires = [
     'dns-lexicon>=3.14.1',
@@ -38,7 +38,7 @@
     author="Certbot Project",
     author_email='certbot-...@eff.org',
     license='Apache License 2.0',
-    python_requires='>=3.9',
+    python_requires='>=3.9.2',
     classifiers=[
         'Development Status :: 5 - Production/Stable',
         'Environment :: Plugins',
@@ -60,7 +60,8 @@
         'Topic :: Utilities',
     ],
 
-    packages=find_packages(),
+    packages=find_packages(where='src'),
+    package_dir={'': 'src'},
     include_package_data=True,
     install_requires=install_requires,
     extras_require={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/__init__.py 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/__init__.py
--- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/__init__.py   
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/__init__.py   
2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1,90 @@
+"""
+The `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin automates the process of
+completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and
+subsequently removing, TXT records using the DNS Made Easy API.
+
+.. note::
+   The plugin is not installed by default. It can be installed by heading to
+   `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_, 
choosing your system and
+   selecting the Wildcard tab.
+
+Named Arguments
+---------------
+
+=========================================  
=====================================
+``--dns-dnsmadeeasy-credentials``          DNS Made Easy credentials_ INI file.
+                                           (Required)
+``--dns-dnsmadeeasy-propagation-seconds``  The number of seconds to wait for 
DNS
+                                           to propagate before asking the ACME
+                                           server to verify the DNS record.
+                                           (Default: 60)
+=========================================  
=====================================
+
+
+Credentials
+-----------
+
+Use of this plugin requires a configuration file containing DNS Made Easy API
+credentials, obtained from your DNS Made Easy
+`account page <https://cp.dnsmadeeasy.com/account/info>`_.
+
+.. code-block:: ini
+   :name: credentials.ini
+   :caption: Example credentials file:
+
+   # DNS Made Easy API credentials used by Certbot
+   dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a
+   dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55
+
+The path to this file can be provided interactively or using the
+``--dns-dnsmadeeasy-credentials`` command-line argument. Certbot records the 
path
+to this file for use during renewal, but does not store the file's contents.
+
+.. caution::
+   You should protect these API credentials as you would the password to your
+   DNS Made Easy account. Users who can read this file can use these 
credentials
+   to issue arbitrary API calls on your behalf. Users who can cause Certbot to
+   run using these credentials can complete a ``dns-01`` challenge to acquire
+   new certificates or revoke existing certificates for associated domains,
+   even if those domains aren't being managed by this server.
+
+Certbot will emit a warning if it detects that the credentials file can be
+accessed by other users on your system. The warning reads "Unsafe permissions
+on credentials configuration file", followed by the path to the credentials
+file. This warning will be emitted each time Certbot uses the credentials file,
+including for renewal, and cannot be silenced except by addressing the issue
+(e.g., by using a command like ``chmod 600`` to restrict access to the file).
+
+
+Examples
+--------
+
+.. code-block:: bash
+   :caption: To acquire a certificate for ``example.com``
+
+   certbot certonly \\
+     --dns-dnsmadeeasy \\
+     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
+     -d example.com
+
+.. code-block:: bash
+   :caption: To acquire a single certificate for both ``example.com`` and
+             ``www.example.com``
+
+   certbot certonly \\
+     --dns-dnsmadeeasy \\
+     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
+     -d example.com \\
+     -d www.example.com
+
+.. code-block:: bash
+   :caption: To acquire a certificate for ``example.com``, waiting 2 minutes
+             for DNS propagation
+
+   certbot certonly \\
+     --dns-dnsmadeeasy \\
+     --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\
+     --dns-dnsmadeeasy-propagation-seconds 120 \\
+     -d example.com
+
+"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/__init__.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/__init__.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/__init__.py
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/__init__.py
 2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1 @@
+"""Internal implementation of `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` 
plugin."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
  2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1,61 @@
+"""DNS Authenticator for DNS Made Easy DNS."""
+import logging
+from typing import Any
+from typing import Callable
+from typing import Optional
+
+from requests import HTTPError
+
+from certbot import errors
+from certbot.plugins import dns_common_lexicon
+
+logger = logging.getLogger(__name__)
+
+ACCOUNT_URL = 'https://cp.dnsmadeeasy.com/account/info'
+
+
+class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator):
+    """DNS Authenticator for DNS Made Easy
+
+    This Authenticator uses the DNS Made Easy API to fulfill a dns-01 
challenge.
+    """
+
+    description = ('Obtain certificates using a DNS TXT record (if you are 
using DNS Made Easy for '
+                   'DNS).')
+
+    def __init__(self, *args: Any, **kwargs: Any) -> None:
+        super().__init__(*args, **kwargs)
+        self._add_provider_option('api-key',
+                                  'API key for DNS Made Easy account, '
+                                  f'obtained from {ACCOUNT_URL}',
+                                  'auth_username')
+        self._add_provider_option('secret-key',
+                                  'Secret key for DNS Made Easy account, '
+                                  f'obtained from {ACCOUNT_URL}',
+                                  'auth_token')
+
+    @classmethod
+    def add_parser_arguments(cls, add: Callable[..., None],
+                             default_propagation_seconds: int = 60) -> None:
+        super().add_parser_arguments(add, default_propagation_seconds)
+        add('credentials', help='DNS Made Easy credentials INI file.')
+
+    def more_info(self) -> str:
+        return 'This plugin configures a DNS TXT record to respond to a dns-01 
challenge using ' + \
+               'the DNS Made Easy API.'
+
+    @property
+    def _provider_name(self) -> str:
+        return 'dnsmadeeasy'
+
+    def _handle_http_error(self, e: HTTPError, domain_name: str) -> 
Optional[errors.PluginError]:
+        if domain_name in str(e) and str(e).startswith('404 Client Error: Not 
Found for url:'):
+            return None
+
+        hint = None
+        if str(e).startswith('403 Client Error: Forbidden for url:'):
+            hint = 'Are your API key and Secret key values correct?'
+
+        hint_disp = f' ({hint})' if hint else ''
+
+        return errors.PluginError(f'Error determining zone identifier: 
{e}.{hint_disp}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
   2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1 @@
+"""certbot-dns-dnsmadeeasy tests"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
       2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1,43 @@
+"""Tests for certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy."""
+
+import sys
+from unittest import mock
+
+import pytest
+from requests import Response
+from requests.exceptions import HTTPError
+
+from certbot.compat import os
+from certbot.plugins import dns_test_common
+from certbot.plugins import dns_test_common_lexicon
+from certbot.plugins.dns_test_common import DOMAIN
+from certbot.tests import util as test_util
+
+API_KEY = 'foo'
+SECRET_KEY = 'bar'
+
+
+class AuthenticatorTest(test_util.TempDirTestCase,
+                        
dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest):
+
+    DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: 
{DOMAIN}.', response=Response())
+    LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.', 
response=Response())
+
+    def setUp(self):
+        super().setUp()
+
+        from certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy import 
Authenticator
+
+        path = os.path.join(self.tempdir, 'file.ini')
+        dns_test_common.write({"dnsmadeeasy_api_key": API_KEY,
+                               "dnsmadeeasy_secret_key": SECRET_KEY},
+                              path)
+
+        self.config = mock.MagicMock(dnsmadeeasy_credentials=path,
+                                     dnsmadeeasy_propagation_seconds=0)  # 
don't wait during tests
+
+        self.auth = Authenticator(self.config, "dnsmadeeasy")
+
+
+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_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 
    2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1,46 @@
+Metadata-Version: 2.4
+Name: certbot-dns-dnsmadeeasy
+Version: 4.1.1
+Summary: DNS Made Easy DNS Authenticator plugin for Certbot
+Home-page: https://github.com/certbot/certbot
+Author: Certbot Project
+Author-email: certbot-...@eff.org
+License: Apache License 2.0
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Intended Audience :: System Administrators
+Classifier: License :: OSI Approved :: Apache Software License
+Classifier: Operating System :: POSIX :: Linux
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Topic :: Internet :: WWW/HTTP
+Classifier: Topic :: Security
+Classifier: Topic :: System :: Installation/Setup
+Classifier: Topic :: System :: Networking
+Classifier: Topic :: System :: Systems Administration
+Classifier: Topic :: Utilities
+Requires-Python: >=3.9.2
+License-File: LICENSE.txt
+Requires-Dist: dns-lexicon>=3.14.1
+Requires-Dist: acme>=4.1.1
+Requires-Dist: certbot>=4.1.1
+Provides-Extra: docs
+Requires-Dist: Sphinx>=1.0; extra == "docs"
+Requires-Dist: sphinx_rtd_theme; extra == "docs"
+Provides-Extra: test
+Requires-Dist: pytest; extra == "test"
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: provides-extra
+Dynamic: requires-dist
+Dynamic: requires-python
+Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
  2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1,22 @@
+LICENSE.txt
+MANIFEST.in
+README.rst
+setup.py
+docs/.gitignore
+docs/Makefile
+docs/api.rst
+docs/conf.py
+docs/index.rst
+docs/make.bat
+src/certbot_dns_dnsmadeeasy/__init__.py
+src/certbot_dns_dnsmadeeasy/py.typed
+src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO
+src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt
+src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
+src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
+src/certbot_dns_dnsmadeeasy.egg-info/requires.txt
+src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
+src/certbot_dns_dnsmadeeasy/_internal/__init__.py
+src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py
+src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py
+src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt
 2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1 @@
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt
     2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1,2 @@
+[certbot.plugins]
+dns-dnsmadeeasy = 
certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy:Authenticator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt
 2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1,10 @@
+dns-lexicon>=3.14.1
+acme>=4.1.1
+certbot>=4.1.1
+
+[docs]
+Sphinx>=1.0
+sphinx_rtd_theme
+
+[test]
+pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
--- 
old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt
        2025-06-12 20:08:40.000000000 +0200
@@ -0,0 +1 @@
+certbot_dns_dnsmadeeasy

Reply via email to