Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-designateclient for 
openSUSE:Factory checked in at 2026-08-09 21:34:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-designateclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-designateclient.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-designateclient"

Sun Aug  9 21:34:40 2026 rev:26 rq:1370107 version:7.0.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-designateclient/python-designateclient.changes
    2026-03-10 17:53:53.728991282 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-designateclient.new.16738/python-designateclient.changes
 2026-08-09 21:36:58.365579148 +0200
@@ -1,0 +2,21 @@
+Thu Aug  6 20:01:09 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 7.0.0:
+  * Add --status filter option to zone transfer request list
+  * Add Zone nameserver request to client
+  * Add dns limit list CLI command
+  * Add --attributes flag to zone import create command
+  * Add pagination support to zone task list methods
+  * Fix tld list command filters not being applied
+  * Add support for GET /v2/quotas/ endpoint
+  * Update packaging configuration
+  * Migrate setup configuration to pyproject.toml
+  * Include status code and body in non-JSON error responses
+  * Add missing filter options to list commands
+  * Fix "floatingip" to "floating IP" in ptr record help text
+  * Make email optional when creating zone
+  * Update master for stable/2026.1
+  * Drop redundant type/attribute check
+  * Remove old checks for Python 2-3 compatibility
+
+-------------------------------------------------------------------

Old:
----
  python_designateclient-6.4.0.tar.gz

New:
----
  python_designateclient-7.0.0.tar.gz

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

Other differences:
------------------
++++++ python-designateclient.spec ++++++
--- /var/tmp/diff_new_pack.9X5Ewi/_old  2026-08-09 21:36:58.977599987 +0200
+++ /var/tmp/diff_new_pack.9X5Ewi/_new  2026-08-09 21:36:58.977599987 +0200
@@ -18,7 +18,7 @@
 
 %global pythons %{primary_python}
 Name:           python-designateclient
-Version:        6.4.0
+Version:        7.0.0
 Release:        0
 Summary:        OpenStack DNS as a Service - Client
 License:        Apache-2.0

++++++ python_designateclient-6.4.0.tar.gz -> 
python_designateclient-7.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/AUTHORS 
new/python_designateclient-7.0.0/AUTHORS
--- old/python_designateclient-6.4.0/AUTHORS    2026-02-24 15:34:05.000000000 
+0100
+++ new/python_designateclient-7.0.0/AUTHORS    2026-07-01 13:49:32.000000000 
+0200
@@ -66,6 +66,7 @@
 Patrick Galbraith <[email protected]>
 Paul Glass <[email protected]>
 Pavel Kirpichyov <[email protected]>
+Pavlo Shchelokovskyy <[email protected]>
 Pradeep Kumar Singh <[email protected]>
 Rahman Syed <[email protected]>
 Reddy A, Penchal (pr8721) <[email protected]>
@@ -91,6 +92,7 @@
 Vieri <[email protected]>
 Vu Cong Tuan <[email protected]>
 abhishekkekane <[email protected]>
+ahnhyun <[email protected]>
 algerwang <[email protected]>
 ashish-kumar-gupta <[email protected]>
 cao.yuan <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/ChangeLog 
new/python_designateclient-7.0.0/ChangeLog
--- old/python_designateclient-6.4.0/ChangeLog  2026-02-24 15:34:05.000000000 
+0100
+++ new/python_designateclient-7.0.0/ChangeLog  2026-07-01 13:49:32.000000000 
+0200
@@ -1,9 +1,30 @@
 CHANGES
 =======
 
+7.0.0
+-----
+
+* Add --status filter option to zone transfer request list
+* Add Zone nameserver request to client
+* Add dns limit list CLI command
+* Add --attributes flag to zone import create command
+* Add pagination support to zone task list methods
+* Fix tld list command filters not being applied
+* Add support for GET /v2/quotas/ endpoint
+* Update packaging configuration
+* Migrate setup configuration to pyproject.toml
+* Include status code and body in non-JSON error responses
+* Add missing filter options to list commands
+* Fix "floatingip" to "floating IP" in ptr record help text
+* Make email optional when creating zone
+* Update master for stable/2026.1
+* Drop redundant type/attribute check
+* Remove old checks for Python 2-3 compatibility
+
 6.4.0
 -----
 
+* Add unit tests for QuotasController
 * reno: Update master for unmaintained/2024.1
 * Remove remaining Python 3.9 support
 * Update master for stable/2025.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/PKG-INFO 
new/python_designateclient-7.0.0/PKG-INFO
--- old/python_designateclient-6.4.0/PKG-INFO   2026-02-24 15:34:06.070713500 
+0100
+++ new/python_designateclient-7.0.0/PKG-INFO   2026-07-01 13:49:32.143751600 
+0200
@@ -1,15 +1,15 @@
 Metadata-Version: 2.4
 Name: python-designateclient
-Version: 6.4.0
+Version: 7.0.0
 Summary: OpenStack DNS-as-a-Service - Client
-Home-page: https://docs.openstack.org/python-designateclient/latest
-Author: OpenStack
-Author-email: [email protected]
-License: Apache License, Version 2.0
+Author-email: OpenStack <[email protected]>
+License-Expression: Apache-2.0
+Project-URL: Bug Tracker, https://bugs.launchpad.net/python-designateclient/
+Project-URL: Documentation, 
https://docs.openstack.org/python-designateclient/latest
+Project-URL: Source Code, https://opendev.org/openstack/python-designateclient
 Classifier: Environment :: OpenStack
 Classifier: Intended Audience :: Information Technology
 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 :: Implementation :: CPython
@@ -21,6 +21,7 @@
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Topic :: Internet :: Name Service (DNS)
 Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: cliff!=2.9.0,>=2.8.0
 Requires-Dist: jsonschema>=3.2.0
@@ -32,13 +33,8 @@
 Requires-Dist: requests>=2.14.2
 Requires-Dist: stevedore>=1.20.0
 Requires-Dist: debtcollector>=1.2.0
-Dynamic: author
-Dynamic: author-email
-Dynamic: license
 Dynamic: license-file
 Dynamic: requires-dist
-Dynamic: requires-python
-Dynamic: summary
 
 =====================================
 Python bindings to the Designate API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/hacking/checks.py 
new/python_designateclient-7.0.0/designateclient/hacking/checks.py
--- old/python_designateclient-6.4.0/designateclient/hacking/checks.py  
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/hacking/checks.py  
2026-07-01 13:49:06.000000000 +0200
@@ -22,8 +22,6 @@
 # D704: Found import of %s. This oslo library has been graduated!
 # D705: timeutils.utcnow() must be used instead of datetime.%s()
 # D706: Don't translate debug level logs
-# D707: basestring is not Python3-compatible, use str instead.
-# D708: Do not use xrange. Use range for large loops.
 # D709: LOG.audit is deprecated, please use LOG.info!
 # D710: LOG.warn() is not allowed. Use LOG.warning()
 # D711: Don't use backslashes for line continuation.
@@ -128,21 +126,6 @@
 
 
 @core.flake8ext
-def check_no_basestring(logical_line):
-    if re.search(r"\bbasestring\b", logical_line):
-        msg = ("D707: basestring is not Python3-compatible, use "
-               "str instead.")
-        yield (0, msg)
-
-
[email protected]
-def check_python3_xrange(logical_line):
-    if re.search(r"\bxrange\s*\(", logical_line):
-        yield (0, "D708: Do not use xrange. Use range for "
-                  "large loops.")
-
-
[email protected]
 def check_no_log_audit(logical_line):
     """Ensure that we are not using LOG.audit messages
     Plans are in place going forward as discussed in the following
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/tests/osc/v2/test_tlds.py 
new/python_designateclient-7.0.0/designateclient/tests/osc/v2/test_tlds.py
--- old/python_designateclient-6.4.0/designateclient/tests/osc/v2/test_tlds.py  
1970-01-01 01:00:00.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/tests/osc/v2/test_tlds.py  
2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,67 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from unittest import mock
+
+from osc_lib.tests import utils
+
+from designateclient.v2 import base
+from designateclient.v2.cli import tlds
+
+
+class TestDesignateListTLDs(utils.TestCommand):
+    def setUp(self):
+        super().setUp()
+        self.app.client_manager.dns = mock.MagicMock()
+        self.cmd = tlds.ListTLDsCommand(self.app, None)
+        self.dns_client = self.app.client_manager.dns
+
+    def test_list_tlds(self):
+        arg_list = []
+        verify_args = []
+
+        result = base.DesignateList()
+        result.extend([
+            {'id': '1', 'name': 'com', 'description': None},
+            {'id': '2', 'name': 'org', 'description': None},
+        ])
+
+        self.dns_client.tlds.list.return_value = result
+
+        parsed_args = self.check_parser(self.cmd, arg_list, verify_args)
+        columns, data = self.cmd.take_action(parsed_args)
+
+        results = list(data)
+
+        self.assertEqual(2, len(results))
+        self.dns_client.tlds.list.assert_called_once_with(criterion={})
+
+    def test_list_tlds_with_name_filter(self):
+        arg_list = ['--name', 'com']
+        verify_args = [('name', 'com')]
+
+        result = base.DesignateList()
+        result.extend([
+            {'id': '1', 'name': 'com', 'description': None},
+        ])
+
+        self.dns_client.tlds.list.return_value = result
+
+        parsed_args = self.check_parser(self.cmd, arg_list, verify_args)
+        columns, data = self.cmd.take_action(parsed_args)
+
+        results = list(data)
+
+        self.assertEqual(1, len(results))
+        self.dns_client.tlds.list.assert_called_once_with(
+            criterion={'name': 'com'}
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/tests/osc/v2/test_zone.py 
new/python_designateclient-7.0.0/designateclient/tests/osc/v2/test_zone.py
--- old/python_designateclient-6.4.0/designateclient/tests/osc/v2/test_zone.py  
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/tests/osc/v2/test_zone.py  
2026-07-01 13:49:06.000000000 +0200
@@ -12,6 +12,7 @@
 
 from unittest import mock
 
+from osc_lib import exceptions as osc_exc
 from osc_lib.tests import utils
 
 from designateclient.tests.osc import resources
@@ -46,6 +47,22 @@
 
         self.assertEqual(17, len(results))
 
+    def test_create_primary_zone_no_email(self):
+        arg_list = [
+            'example.devstack.org.',
+        ]
+        verify_args = [
+            ('name', 'example.devstack.org.'),
+        ]
+
+        parsed_args = self.check_parser(self.cmd, arg_list, verify_args)
+        exc = self.assertRaises(
+            osc_exc.CommandError,
+            self.cmd.take_action,
+            parsed_args,
+        )
+        self.assertIn("Zone type PRIMARY requires --email", str(exc))
+
 
 class TestDesignateListZones(utils.TestCommand):
     def setUp(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/tests/v2/test_limits.py 
new/python_designateclient-7.0.0/designateclient/tests/v2/test_limits.py
--- old/python_designateclient-6.4.0/designateclient/tests/v2/test_limits.py    
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/tests/v2/test_limits.py    
2026-07-01 13:49:06.000000000 +0200
@@ -16,7 +16,7 @@
 from designateclient.tests import v2
 
 
-class TestLimits(v2.APIV2TestCase, v2.CrudMixin):
+class TestLimits(v2.APIV2TestCase):
     def test_get(self):
         ref = {"max_zones": "foo"}
         self.stub_url("GET", parts=["limits"], json=ref)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/tests/v2/test_quotas.py 
new/python_designateclient-7.0.0/designateclient/tests/v2/test_quotas.py
--- old/python_designateclient-6.4.0/designateclient/tests/v2/test_quotas.py    
1970-01-01 01:00:00.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/tests/v2/test_quotas.py    
2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,55 @@
+# Copyright 2025 Red Hat
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+import uuid
+
+from designateclient.tests import v2
+
+
+class TestQuotas(v2.APIV2TestCase, v2.CrudMixin):
+    RESOURCE = 'quotas'
+
+    def test_list(self):
+        ref = {"zones": 100}
+
+        self.stub_url("GET", parts=[self.RESOURCE], json=ref)
+
+        response = self.client.quotas.list()
+        self.assertEqual(ref, response)
+
+    def test_list_with_project_id(self):
+        project_id = uuid.uuid4().hex
+        ref = {"zones": 100}
+
+        self.stub_url("GET", parts=[self.RESOURCE, project_id], json=ref)
+
+        response = self.client.quotas.list(project_id)
+        self.assertEqual(ref, response)
+
+    def test_update(self):
+        project_id = uuid.uuid4().hex
+        ref = {"zones": 100}
+
+        self.stub_url("PATCH", parts=[self.RESOURCE, project_id], json=ref)
+
+        values = {"zones": 100}
+        self.client.quotas.update(project_id, values)
+        self.assertRequestBodyIs(json=values)
+
+    def test_reset(self):
+        project_id = uuid.uuid4().hex
+
+        self.stub_url("DELETE", parts=[self.RESOURCE, project_id])
+
+        self.client.quotas.reset(project_id)
+        self.assertRequestBodyIs(None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/tests/v2/test_zones.py 
new/python_designateclient-7.0.0/designateclient/tests/v2/test_zones.py
--- old/python_designateclient-6.4.0/designateclient/tests/v2/test_zones.py     
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/tests/v2/test_zones.py     
2026-07-01 13:49:06.000000000 +0200
@@ -99,6 +99,19 @@
         self.assertList(items, listed)
         self.assertQueryStringIs("")
 
+    def test_nameservers(self):
+        nameservers = {"nameservers": [
+            {"priority": 1, "hostname": "ns1.devstack.org."}
+        ]}
+        zone = self.new_ref()
+
+        parts = ["zones", zone["id"], "nameservers"]
+        self.stub_url('GET', parts=parts, json=nameservers)
+
+        response = self.client.zones.nameservers(zone["id"])
+
+        self.assertList(nameservers["nameservers"], response)
+
     def test_update(self):
         ref = self.new_ref()
 
@@ -218,6 +231,26 @@
         self.client.zone_transfers.list_requests()
         self.assertRequestBodyIs("")
 
+    def test_list_requests_with_pagination(self):
+        items = [
+            {
+                "id": uuid.uuid4().hex,
+                "zone_id": uuid.uuid4().hex,
+                "target_project_id": uuid.uuid4().hex,
+                "status": "ACTIVE"
+            }
+        ]
+
+        parts = ["zones", "tasks", "transfer_requests"]
+        self.stub_url('GET', parts=parts, json={"transfer_requests": items})
+
+        response = self.client.zone_transfers.list_requests(
+            marker=uuid.uuid4().hex,
+            limit=10
+        )
+        self.assertEqual(items, response)
+        self.assertQueryStringContains(limit="10")
+
     def test_update_request(self):
         transfer = "098bee04-fe30-4a83-8ccd-e0c496755816"
         project = "098bee04-fe30-4a83-8ccd-e0c496755817"
@@ -286,6 +319,25 @@
         self.client.zone_transfers.list_accepts()
         self.assertRequestBodyIs("")
 
+    def test_list_accepts_with_pagination(self):
+        items = [
+            {
+                "id": uuid.uuid4().hex,
+                "zone_transfer_request_id": uuid.uuid4().hex,
+                "status": "COMPLETE"
+            }
+        ]
+
+        parts = ["zones", "tasks", "transfer_accepts"]
+        self.stub_url('GET', parts=parts, json={"transfer_accepts": items})
+
+        response = self.client.zone_transfers.list_accepts(
+            marker=uuid.uuid4().hex,
+            limit=5
+        )
+        self.assertEqual(items, response)
+        self.assertQueryStringContains(limit="5")
+
 
 class TestZoneExports(v2.APIV2TestCase, v2.CrudMixin):
     def new_ref(self, **kwargs):
@@ -327,9 +379,24 @@
         self.stub_url('GET', parts=parts, json={"exports": items})
 
         listed = self.client.zone_exports.list()
-        self.assertList(items, listed["exports"])
+        self.assertList(items, listed)
         self.assertQueryStringIs("")
 
+    def test_list_exports_with_pagination(self):
+        items = [
+            self.new_ref()
+        ]
+
+        parts = ["zones", "tasks", "exports"]
+        self.stub_url('GET', parts=parts, json={"exports": items})
+
+        response = self.client.zone_exports.list(
+            marker=uuid.uuid4().hex,
+            limit=20
+        )
+        self.assertList(items, response)
+        self.assertQueryStringContains(limit="20")
+
     def test_delete_export(self):
         ref = self.new_ref()
 
@@ -371,6 +438,23 @@
         self.client.zone_imports.create(zonefile)
         self.assertRequestBodyIs(body=zonefile)
 
+    def test_create_import_with_attributes(self):
+        zonefile = '$ORIGIN example.com'
+        attributes = {'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'}
+
+        parts = ["zones", "tasks", "imports"]
+        self.stub_url('POST', parts=parts, json=self.new_ref())
+
+        self.client.zone_imports.create(zonefile, attributes=attributes)
+        self.assertRequestBodyIs(json={
+            'zonefile': zonefile,
+            'attributes': attributes,
+        })
+        self.assertEqual(
+            'application/json',
+            self.requests.last_request.headers['Content-Type']
+        )
+
     def test_get_import(self):
         ref = self.new_ref()
 
@@ -391,9 +475,24 @@
         self.stub_url('GET', parts=parts, json={"imports": items})
 
         listed = self.client.zone_imports.list()
-        self.assertList(items, listed["imports"])
+        self.assertList(items, listed)
         self.assertQueryStringIs("")
 
+    def test_list_imports_with_pagination(self):
+        items = [
+            self.new_ref()
+        ]
+
+        parts = ["zones", "tasks", "imports"]
+        self.stub_url('GET', parts=parts, json={"imports": items})
+
+        response = self.client.zone_imports.list(
+            marker=uuid.uuid4().hex,
+            limit=15
+        )
+        self.assertList(items, response)
+        self.assertQueryStringContains(limit="15")
+
     def test_delete_import(self):
         ref = self.new_ref()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/cli/blacklists.py 
new/python_designateclient-7.0.0/designateclient/v2/cli/blacklists.py
--- old/python_designateclient-6.4.0/designateclient/v2/cli/blacklists.py       
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/cli/blacklists.py       
2026-07-01 13:49:06.000000000 +0200
@@ -39,6 +39,9 @@
     def get_parser(self, prog_name):
         parser = super().get_parser(prog_name)
 
+        parser.add_argument('--pattern', help='Blacklist Pattern',
+                            required=False)
+
         common.add_all_common_options(parser)
 
         return parser
@@ -47,8 +50,12 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
+        criterion = {}
+        if parsed_args.pattern is not None:
+            criterion['pattern'] = parsed_args.pattern
+
         cols = self.columns
-        data = get_all(client.blacklists.list)
+        data = get_all(client.blacklists.list, criterion)
         return cols, (utils.get_item_properties(s, cols) for s in data)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/cli/limits.py 
new/python_designateclient-7.0.0/designateclient/v2/cli/limits.py
--- old/python_designateclient-6.4.0/designateclient/v2/cli/limits.py   
1970-01-01 01:00:00.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/cli/limits.py   
2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,34 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from osc_lib.command import command
+
+from designateclient.v2.cli import common
+
+
+class ListLimitsCommand(command.Lister):
+    """List DNS limits"""
+
+    columns = ['Limit', 'Value']
+
+    def get_parser(self, prog_name):
+        parser = super().get_parser(prog_name)
+        common.add_all_common_options(parser)
+        return parser
+
+    def take_action(self, parsed_args):
+        client = self.app.client_manager.dns
+        common.set_all_common_headers(client, parsed_args)
+
+        data = client.limits.get()
+
+        return self.columns, sorted(data.items())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/cli/reverse.py 
new/python_designateclient-7.0.0/designateclient/v2/cli/reverse.py
--- old/python_designateclient-6.4.0/designateclient/v2/cli/reverse.py  
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/cli/reverse.py  
2026-07-01 13:49:06.000000000 +0200
@@ -32,7 +32,7 @@
 
 
 class ListFloatingIPCommand(command.Lister):
-    """List floatingip ptr records"""
+    """List floating IP ptr records"""
 
     columns = ['id', 'ptrdname', 'description', 'ttl']
 
@@ -53,7 +53,7 @@
 
 
 class ShowFloatingIPCommand(command.ShowOne):
-    """Show floatingip ptr record details"""
+    """Show floating IP ptr record details"""
 
     def get_parser(self, prog_name):
         parser = super().get_parser(prog_name)
@@ -74,7 +74,7 @@
 
 
 class SetFloatingIPCommand(command.ShowOne):
-    """Set floatingip ptr record"""
+    """Set floating IP ptr record"""
 
     def get_parser(self, prog_name):
         parser = super().get_parser(prog_name)
@@ -122,7 +122,7 @@
 
 
 class UnsetFloatingIPCommand(command.Command):
-    """Unset floatingip ptr record"""
+    """Unset floating IP ptr record"""
 
     def get_parser(self, prog_name):
         parser = super().get_parser(prog_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/cli/tlds.py 
new/python_designateclient-7.0.0/designateclient/v2/cli/tlds.py
--- old/python_designateclient-6.4.0/designateclient/v2/cli/tlds.py     
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/cli/tlds.py     
2026-07-01 13:49:06.000000000 +0200
@@ -41,8 +41,6 @@
 
         parser.add_argument('--name', help='TLD NAME')
 
-        parser.add_argument('--description', help='TLD Description')
-
         common.add_all_common_options(parser)
 
         return parser
@@ -51,7 +49,11 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        data = get_all(client.tlds.list)
+        criterion = {}
+        if parsed_args.name is not None:
+            criterion['name'] = parsed_args.name
+
+        data = get_all(client.tlds.list, criterion)
 
         cols = self.columns
         return cols, (utils.get_item_properties(s, cols) for s in data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/cli/zones.py 
new/python_designateclient-7.0.0/designateclient/v2/cli/zones.py
--- old/python_designateclient-6.4.0/designateclient/v2/cli/zones.py    
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/cli/zones.py    
2026-07-01 13:49:06.000000000 +0200
@@ -140,7 +140,8 @@
         parser = super().get_parser(prog_name)
 
         parser.add_argument('name', help='Zone Name')
-        parser.add_argument('--email', help='Zone Email', required=True)
+        parser.add_argument('--email',
+                            help='Zone Email. Required for PRIMARY zone type')
         parser.add_argument('--type', help='Zone Type',
                             choices=['PRIMARY', 'SECONDARY'],
                             default='PRIMARY')
@@ -171,7 +172,7 @@
                 except ValueError:
                     raise osc_exc.CommandError(
                         f"Attribute '{attr}' is in an incorrect format. "
-                        "Attributes are <key>:<value> formated"
+                        "Attributes are <key>:<value> formatted"
                     )
 
         if parsed_args.type == 'PRIMARY':
@@ -256,7 +257,7 @@
 
         parser.add_argument('--delete-shares', default=False,
                             action='store_true',
-                            help='Delete existing zone shares. Default: False')
+                            help='Delete existing zone shares.')
 
         common.add_all_common_options(parser)
         common.add_hard_delete_option(parser)
@@ -267,19 +268,37 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        delete_shares = False
-        if (hasattr(parsed_args, 'delete_shares') and
-                parsed_args.delete_shares is not None and
-                isinstance(parsed_args.delete_shares, bool)):
-            delete_shares = parsed_args.delete_shares
-
-        data = client.zones.delete(parsed_args.id, delete_shares=delete_shares)
+        data = client.zones.delete(
+            parsed_args.id, delete_shares=parsed_args.delete_shares)
         LOG.info('Zone %s was deleted', parsed_args.id)
 
         _format_zone(data)
         return zip(*sorted(data.items()))
 
 
+class ListZoneNameserversCommand(command.Lister):
+    """List Zone Nameservers"""
+
+    columns = ['hostname', 'priority']
+
+    def get_parser(self, prog_name):
+        parser = super().get_parser(prog_name)
+
+        parser.add_argument('id', help='Zone ID or Name')
+        common.add_all_common_options(parser)
+
+        return parser
+
+    def take_action(self, parsed_args):
+        client = self.app.client_manager.dns
+        common.set_all_common_headers(client, parsed_args)
+
+        data = client.zones.nameservers(parsed_args.id)
+
+        cols = self.columns
+        return cols, (utils.get_item_properties(s, cols) for s in data)
+
+
 class AbandonZoneCommand(command.Command):
     """Abandon a zone"""
     def get_parser(self, prog_name):
@@ -385,6 +404,9 @@
         parser = super().get_parser(
             prog_name)
 
+        parser.add_argument('--status', help='Zone Transfer Request Status',
+                            required=False)
+
         common.add_all_common_options(parser)
 
         return parser
@@ -393,7 +415,11 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        data = client.zone_transfers.list_requests()
+        criterion = {}
+        if parsed_args.status is not None:
+            criterion['status'] = parsed_args.status
+
+        data = get_all(client.zone_transfers.list_requests, criterion)
 
         cols = self.columns
         return cols, (utils.get_item_properties(s, cols) for s in data)
@@ -513,6 +539,10 @@
         parser = super().get_parser(
             prog_name)
 
+        parser.add_argument('--status',
+                            help='Zone Transfer Accept Status',
+                            required=False)
+
         common.add_all_common_options(parser)
 
         return parser
@@ -521,7 +551,11 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        data = client.zone_transfers.list_accepts()
+        criterion = {}
+        if parsed_args.status is not None:
+            criterion['status'] = parsed_args.status
+
+        data = get_all(client.zone_transfers.list_accepts, criterion)
 
         cols = self.columns
         return cols, (utils.get_item_properties(s, cols) for s in data)
@@ -587,6 +621,10 @@
         parser = super().get_parser(
             prog_name)
 
+        parser.add_argument('--status', help='Zone Export Status',
+                            required=False)
+        parser.add_argument('--zone-id', help='Zone ID', required=False)
+
         common.add_all_common_options(parser)
 
         return parser
@@ -595,11 +633,16 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        data = client.zone_exports.list()
+        criterion = {}
+        if parsed_args.status is not None:
+            criterion['status'] = parsed_args.status
+        if parsed_args.zone_id is not None:
+            criterion['zone_id'] = parsed_args.zone_id
+
+        data = get_all(client.zone_exports.list, criterion)
 
         cols = self.columns
-        return cols, (utils.get_item_properties(s, cols)
-                      for s in data['exports'])
+        return cols, (utils.get_item_properties(s, cols) for s in data)
 
 
 class ShowZoneExportCommand(command.ShowOne):
@@ -679,6 +722,8 @@
 
         parser.add_argument('zone_file_path',
                             help='Path to a zone file', type=str)
+        parser.add_argument('--attributes', help='Zone Attributes',
+                            nargs='+')
 
         common.add_all_common_options(parser)
 
@@ -691,7 +736,20 @@
         with open(parsed_args.zone_file_path) as f:
             zone_file_contents = f.read()
 
-        data = client.zone_imports.create(zone_file_contents)
+        attributes = None
+        if parsed_args.attributes:
+            attributes = {}
+            for attr in parsed_args.attributes:
+                try:
+                    k, v = attr.split(':')
+                    attributes[k] = v
+                except ValueError:
+                    raise osc_exc.CommandError(
+                        "Attribute '%s' is in an incorrect format. "
+                        "Attributes are <key>:<value> formatted" % attr
+                    )
+
+        data = client.zone_imports.create(zone_file_contents, attributes)
         _format_zone_import_record(data)
 
         LOG.info('Zone Import %s was created', data['id'])
@@ -714,6 +772,12 @@
         parser = super().get_parser(
             prog_name)
 
+        parser.add_argument('--status', help='Zone Import Status',
+                            required=False)
+        parser.add_argument('--zone-id', help='Zone ID', required=False)
+        parser.add_argument('--message', help='Zone Import Message',
+                            required=False)
+
         common.add_all_common_options(parser)
 
         return parser
@@ -722,11 +786,18 @@
         client = self.app.client_manager.dns
         common.set_all_common_headers(client, parsed_args)
 
-        data = client.zone_imports.list()
+        criterion = {}
+        if parsed_args.status is not None:
+            criterion['status'] = parsed_args.status
+        if parsed_args.zone_id is not None:
+            criterion['zone_id'] = parsed_args.zone_id
+        if parsed_args.message is not None:
+            criterion['message'] = parsed_args.message
+
+        data = get_all(client.zone_imports.list, criterion)
 
         cols = self.columns
-        return cols, (utils.get_item_properties(s, cols)
-                      for s in data['imports'])
+        return cols, (utils.get_item_properties(s, cols) for s in data)
 
 
 class ShowZoneImportCommand(command.ShowOne):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/client.py 
new/python_designateclient-7.0.0/designateclient/v2/client.py
--- old/python_designateclient-6.4.0/designateclient/v2/client.py       
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/client.py       
2026-07-01 13:49:06.000000000 +0200
@@ -98,7 +98,10 @@
         try:
             response_payload = response.json()
         except ValueError:
-            response_payload = {}
+            response_payload = {
+                'code': response.status_code,
+                'message': response.text,
+            }
             body = response.text
 
         if response.status_code == 400:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/quotas.py 
new/python_designateclient-7.0.0/designateclient/v2/quotas.py
--- old/python_designateclient-6.4.0/designateclient/v2/quotas.py       
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/quotas.py       
2026-07-01 13:49:06.000000000 +0200
@@ -17,7 +17,9 @@
 
 
 class QuotasController(V2Controller):
-    def list(self, project_id):
+    def list(self, project_id=None):
+        if project_id is None:
+            return self._get('/quotas')
         return self._get(f'/quotas/{project_id}')
 
     def update(self, project_id, values):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/designateclient/v2/zones.py 
new/python_designateclient-7.0.0/designateclient/v2/zones.py
--- old/python_designateclient-6.4.0/designateclient/v2/zones.py        
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/designateclient/v2/zones.py        
2026-07-01 13:49:06.000000000 +0200
@@ -55,6 +55,12 @@
 
         return self._get(f'/zones/{zone}')
 
+    def nameservers(self, zone):
+        zone = v2_utils.resolve_by_name(self.list, zone)
+
+        return self._get('/zones/%s/nameservers' % zone,
+                         response_key='nameservers')
+
     def update(self, zone, values):
         zone = v2_utils.resolve_by_name(self.list, zone)
 
@@ -116,8 +122,9 @@
         url = f'/zones/tasks/transfer_requests/{transfer_id}'
         return self._get(url)
 
-    def list_requests(self):
-        url = '/zones/tasks/transfer_requests'
+    def list_requests(self, criterion=None, marker=None, limit=None):
+        url = self.build_url('/zones/tasks/transfer_requests', criterion,
+                             marker, limit)
         return self._get(url, response_key='transfer_requests')
 
     def update_request(self, transfer_id, values):
@@ -141,8 +148,9 @@
         url = f'/zones/tasks/transfer_accepts/{accept_id}'
         return self._get(url)
 
-    def list_accepts(self):
-        url = '/zones/tasks/transfer_accepts'
+    def list_accepts(self, criterion=None, marker=None, limit=None):
+        url = self.build_url('/zones/tasks/transfer_accepts', criterion,
+                             marker, limit)
         return self._get(url, response_key='transfer_accepts')
 
 
@@ -155,8 +163,9 @@
     def get_export_record(self, zone_export_id):
         return self._get(f'/zones/tasks/exports/{zone_export_id}')
 
-    def list(self):
-        return self._get('/zones/tasks/exports')
+    def list(self, criterion=None, marker=None, limit=None):
+        url = self.build_url('/zones/tasks/exports', criterion, marker, limit)
+        return self._get(url, response_key='exports')
 
     def delete(self, zone_export_id):
         return self._delete(f'/zones/tasks/exports/{zone_export_id}')
@@ -167,15 +176,26 @@
 
 
 class ZoneImportsController(V2Controller):
-    def create(self, zone_file_contents):
-        return self._post('/zones/tasks/imports', data=zone_file_contents,
-                          headers={'Content-Type': 'text/dns'})
+    def create(self, zone_file_contents, attributes=None):
+        if attributes:
+            data = {
+                'zonefile': zone_file_contents,
+                'attributes': attributes,
+            }
+            headers = {'Content-Type': 'application/json'}
+        else:
+            data = zone_file_contents
+            headers = {'Content-Type': 'text/dns'}
+
+        return self._post('/zones/tasks/imports', data=data,
+                          headers=headers)
 
     def get_import_record(self, zone_import_id):
         return self._get(f'/zones/tasks/imports/{zone_import_id}')
 
-    def list(self):
-        return self._get('/zones/tasks/imports')
+    def list(self, criterion=None, marker=None, limit=None):
+        url = self.build_url('/zones/tasks/imports', criterion, marker, limit)
+        return self._get(url, response_key='imports')
 
     def delete(self, zone_import_id):
         return self._delete(f'/zones/tasks/imports/{zone_import_id}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/pyproject.toml 
new/python_designateclient-7.0.0/pyproject.toml
--- old/python_designateclient-6.4.0/pyproject.toml     1970-01-01 
01:00:00.000000000 +0100
+++ new/python_designateclient-7.0.0/pyproject.toml     2026-07-01 
13:49:06.000000000 +0200
@@ -0,0 +1,105 @@
+[build-system]
+requires = ["pbr>=6.1.1"]
+build-backend = "pbr.build"
+
+[project]
+name = "python-designateclient"
+description = "OpenStack DNS-as-a-Service - Client"
+readme = {file = "README.rst", content-type = "text/x-rst"}
+license = "Apache-2.0"
+requires-python = ">=3.10"
+authors = [
+    {name = "OpenStack", email = "[email protected]"},
+]
+classifiers = [
+    "Environment :: OpenStack",
+    "Intended Audience :: Information Technology",
+    "Intended Audience :: System Administrators",
+    "Operating System :: POSIX :: Linux",
+    "Programming Language :: Python",
+    "Programming Language :: Python :: Implementation :: CPython",
+    "Programming Language :: Python :: 3 :: Only",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
+    "Topic :: Internet :: Name Service (DNS)",
+]
+dynamic = ["version", "dependencies"]
+
+[project.urls]
+"Bug Tracker" = "https://bugs.launchpad.net/python-designateclient/";
+"Documentation" = "https://docs.openstack.org/python-designateclient/latest";
+"Source Code" = "https://opendev.org/openstack/python-designateclient";
+
+[project.entry-points."designateclient.versions"]
+2 = "designateclient.v2.client:Client"
+
+[project.entry-points."openstack.cli.extension"]
+dns = "designateclient.osc.plugin"
+
+[project.entry-points."openstack.dns.v2"]
+zone_blacklist_create = 
"designateclient.v2.cli.blacklists:CreateBlacklistCommand"
+zone_blacklist_list = "designateclient.v2.cli.blacklists:ListBlacklistsCommand"
+zone_blacklist_show = "designateclient.v2.cli.blacklists:ShowBlacklistCommand"
+zone_blacklist_set = "designateclient.v2.cli.blacklists:SetBlacklistCommand"
+zone_blacklist_delete = 
"designateclient.v2.cli.blacklists:DeleteBlacklistCommand"
+tld_create = "designateclient.v2.cli.tlds:CreateTLDCommand"
+tld_list = "designateclient.v2.cli.tlds:ListTLDsCommand"
+tld_show = "designateclient.v2.cli.tlds:ShowTLDCommand"
+tld_set = "designateclient.v2.cli.tlds:SetTLDCommand"
+tld_delete = "designateclient.v2.cli.tlds:DeleteTLDCommand"
+zone_create = "designateclient.v2.cli.zones:CreateZoneCommand"
+zone_list = "designateclient.v2.cli.zones:ListZonesCommand"
+zone_nameservers_list = 
"designateclient.v2.cli.zones:ListZoneNameserversCommand"
+zone_show = "designateclient.v2.cli.zones:ShowZoneCommand"
+zone_set = "designateclient.v2.cli.zones:SetZoneCommand"
+zone_delete = "designateclient.v2.cli.zones:DeleteZoneCommand"
+zone_abandon = "designateclient.v2.cli.zones:AbandonZoneCommand"
+zone_axfr = "designateclient.v2.cli.zones:AXFRZoneCommand"
+zone_move = "designateclient.v2.cli.zones:PoolMoveZoneCommand"
+zone_export_create = "designateclient.v2.cli.zones:ExportZoneCommand"
+zone_export_list = "designateclient.v2.cli.zones:ListZoneExportsCommand"
+zone_export_show = "designateclient.v2.cli.zones:ShowZoneExportCommand"
+zone_export_delete = "designateclient.v2.cli.zones:DeleteZoneExportCommand"
+zone_export_showfile = "designateclient.v2.cli.zones:ShowZoneExportFileCommand"
+zone_import_create = "designateclient.v2.cli.zones:ImportZoneCommand"
+zone_import_list = "designateclient.v2.cli.zones:ListZoneImportsCommand"
+zone_import_show = "designateclient.v2.cli.zones:ShowZoneImportCommand"
+zone_import_delete = "designateclient.v2.cli.zones:DeleteZoneImportCommand"
+zone_transfer_request_create = 
"designateclient.v2.cli.zones:CreateTransferRequestCommand"
+zone_transfer_request_list = 
"designateclient.v2.cli.zones:ListTransferRequestsCommand"
+zone_transfer_request_show = 
"designateclient.v2.cli.zones:ShowTransferRequestCommand"
+zone_transfer_request_set = 
"designateclient.v2.cli.zones:SetTransferRequestCommand"
+zone_transfer_request_delete = 
"designateclient.v2.cli.zones:DeleteTransferRequestCommand"
+zone_transfer_accept_request = 
"designateclient.v2.cli.zones:AcceptTransferRequestCommand"
+zone_transfer_accept_list = 
"designateclient.v2.cli.zones:ListTransferAcceptsCommand"
+zone_transfer_accept_show = 
"designateclient.v2.cli.zones:ShowTransferAcceptCommand"
+zone_share_create = "designateclient.v2.cli.zones:ShareZoneCommand"
+zone_share_list = "designateclient.v2.cli.zones:ListSharedZonesCommand"
+zone_share_show = "designateclient.v2.cli.zones:ShowSharedZoneCommand"
+zone_share_delete = "designateclient.v2.cli.zones:DeleteSharedZoneCommand"
+recordset_create = "designateclient.v2.cli.recordsets:CreateRecordSetCommand"
+recordset_list = "designateclient.v2.cli.recordsets:ListRecordSetsCommand"
+recordset_show = "designateclient.v2.cli.recordsets:ShowRecordSetCommand"
+recordset_set = "designateclient.v2.cli.recordsets:SetRecordSetCommand"
+recordset_delete = "designateclient.v2.cli.recordsets:DeleteRecordSetCommand"
+ptr_record_list = "designateclient.v2.cli.reverse:ListFloatingIPCommand"
+ptr_record_show = "designateclient.v2.cli.reverse:ShowFloatingIPCommand"
+ptr_record_set = "designateclient.v2.cli.reverse:SetFloatingIPCommand"
+ptr_record_unset = "designateclient.v2.cli.reverse:UnsetFloatingIPCommand"
+dns_service_list = 
"designateclient.v2.cli.service_statuses:ListServiceStatusesCommand"
+dns_service_show = 
"designateclient.v2.cli.service_statuses:ShowServiceStatusCommand"
+dns_quota_list = "designateclient.v2.cli.quotas:ListQuotasCommand"
+dns_quota_set = "designateclient.v2.cli.quotas:SetQuotasCommand"
+dns_quota_reset = "designateclient.v2.cli.quotas:ResetQuotasCommand"
+tsigkey_create = "designateclient.v2.cli.tsigkeys:CreateTSIGKeyCommand"
+tsigkey_list = "designateclient.v2.cli.tsigkeys:ListTSIGKeysCommand"
+tsigkey_show = "designateclient.v2.cli.tsigkeys:ShowTSIGKeyCommand"
+tsigkey_set = "designateclient.v2.cli.tsigkeys:SetTSIGKeyCommand"
+tsigkey_delete = "designateclient.v2.cli.tsigkeys:DeleteTSIGKeyCommand"
+dns_limit_list = "designateclient.v2.cli.limits:ListLimitsCommand"
+
+[tool.setuptools.packages.find]
+include = ["designateclient*"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/python_designateclient.egg-info/PKG-INFO 
new/python_designateclient-7.0.0/python_designateclient.egg-info/PKG-INFO
--- old/python_designateclient-6.4.0/python_designateclient.egg-info/PKG-INFO   
2026-02-24 15:34:05.000000000 +0100
+++ new/python_designateclient-7.0.0/python_designateclient.egg-info/PKG-INFO   
2026-07-01 13:49:32.000000000 +0200
@@ -1,15 +1,15 @@
 Metadata-Version: 2.4
 Name: python-designateclient
-Version: 6.4.0
+Version: 7.0.0
 Summary: OpenStack DNS-as-a-Service - Client
-Home-page: https://docs.openstack.org/python-designateclient/latest
-Author: OpenStack
-Author-email: [email protected]
-License: Apache License, Version 2.0
+Author-email: OpenStack <[email protected]>
+License-Expression: Apache-2.0
+Project-URL: Bug Tracker, https://bugs.launchpad.net/python-designateclient/
+Project-URL: Documentation, 
https://docs.openstack.org/python-designateclient/latest
+Project-URL: Source Code, https://opendev.org/openstack/python-designateclient
 Classifier: Environment :: OpenStack
 Classifier: Intended Audience :: Information Technology
 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 :: Implementation :: CPython
@@ -21,6 +21,7 @@
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Topic :: Internet :: Name Service (DNS)
 Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: cliff!=2.9.0,>=2.8.0
 Requires-Dist: jsonschema>=3.2.0
@@ -32,13 +33,8 @@
 Requires-Dist: requests>=2.14.2
 Requires-Dist: stevedore>=1.20.0
 Requires-Dist: debtcollector>=1.2.0
-Dynamic: author
-Dynamic: author-email
-Dynamic: license
 Dynamic: license-file
 Dynamic: requires-dist
-Dynamic: requires-python
-Dynamic: summary
 
 =====================================
 Python bindings to the Designate API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/python_designateclient.egg-info/SOURCES.txt 
new/python_designateclient-7.0.0/python_designateclient.egg-info/SOURCES.txt
--- 
old/python_designateclient-6.4.0/python_designateclient.egg-info/SOURCES.txt    
    2026-02-24 15:34:06.000000000 +0100
+++ 
new/python_designateclient-7.0.0/python_designateclient.egg-info/SOURCES.txt    
    2026-07-01 13:49:32.000000000 +0200
@@ -6,6 +6,7 @@
 ChangeLog
 LICENSE
 README.rst
+pyproject.toml
 python-designateclient.sublime-project
 requirements.txt
 setup.cfg
@@ -52,12 +53,14 @@
 designateclient/tests/osc/resources/zone_list.json
 designateclient/tests/osc/v2/__init__.py
 designateclient/tests/osc/v2/test_recordsets.py
+designateclient/tests/osc/v2/test_tlds.py
 designateclient/tests/osc/v2/test_zone.py
 designateclient/tests/v2/__init__.py
 designateclient/tests/v2/test_blacklists.py
 designateclient/tests/v2/test_client.py
 designateclient/tests/v2/test_limits.py
 designateclient/tests/v2/test_nameservers.py
+designateclient/tests/v2/test_quotas.py
 designateclient/tests/v2/test_recordsets.py
 designateclient/tests/v2/test_reverse.py
 designateclient/tests/v2/test_service_statuses.py
@@ -83,6 +86,7 @@
 designateclient/v2/cli/__init__.py
 designateclient/v2/cli/blacklists.py
 designateclient/v2/cli/common.py
+designateclient/v2/cli/limits.py
 designateclient/v2/cli/quotas.py
 designateclient/v2/cli/recordsets.py
 designateclient/v2/cli/reverse.py
@@ -119,19 +123,27 @@
 releasenotes/notes/.placeholder
 releasenotes/notes/Add-shared-zones-support-4be565f3d1c6356c.yaml
 releasenotes/notes/add-hard-delete-option-for-zone-delete-e16652c8e72fc023.yaml
+releasenotes/notes/bug-1927892-a3f8c4e2b7d91065.yaml
 releasenotes/notes/bug-1940544-9ed7805341dec1ba.yaml
+releasenotes/notes/bug-1978713-1e1f6d9a991c2c4f.yaml
+releasenotes/notes/bug-2131519-zone-task-pagination-7e4a2b91c3d80f56.yaml
+releasenotes/notes/dns-limit-list-command-b5fabebf76e7e8eb.yaml
 releasenotes/notes/drop-py2-c4e50d006fa4446c.yaml
 releasenotes/notes/drop-python-3-6-and-3-7-7d815c897c330d9c.yaml
 releasenotes/notes/quota-commands-7ff037bddae95771.yaml
 releasenotes/notes/remove-api-v1-4e507128b344082b.yaml
 releasenotes/notes/remove-py38-355959306e686af7.yaml
 releasenotes/notes/remove-records-argument-8eda058e3bf028ca.yaml
+releasenotes/notes/zone-create-command-email-is-optional-bug-2143824-71b816f91ce045b1.yaml
+releasenotes/notes/zone-import-attributes-1166c129d39186db.yaml
+releasenotes/notes/zone-nameservers-list-command-60b986968d714b2b.yaml
 releasenotes/source/2023.1.rst
 releasenotes/source/2023.2.rst
 releasenotes/source/2024.1.rst
 releasenotes/source/2024.2.rst
 releasenotes/source/2025.1.rst
 releasenotes/source/2025.2.rst
+releasenotes/source/2026.1.rst
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/newton.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/python_designateclient.egg-info/entry_points.txt
 
new/python_designateclient-7.0.0/python_designateclient.egg-info/entry_points.txt
--- 
old/python_designateclient-6.4.0/python_designateclient.egg-info/entry_points.txt
   2026-02-24 15:34:05.000000000 +0100
+++ 
new/python_designateclient-7.0.0/python_designateclient.egg-info/entry_points.txt
   2026-07-01 13:49:32.000000000 +0200
@@ -5,6 +5,7 @@
 dns = designateclient.osc.plugin
 
 [openstack.dns.v2]
+dns_limit_list = designateclient.v2.cli.limits:ListLimitsCommand
 dns_quota_list = designateclient.v2.cli.quotas:ListQuotasCommand
 dns_quota_reset = designateclient.v2.cli.quotas:ResetQuotasCommand
 dns_quota_set = designateclient.v2.cli.quotas:SetQuotasCommand
@@ -49,6 +50,7 @@
 zone_import_show = designateclient.v2.cli.zones:ShowZoneImportCommand
 zone_list = designateclient.v2.cli.zones:ListZonesCommand
 zone_move = designateclient.v2.cli.zones:PoolMoveZoneCommand
+zone_nameservers_list = designateclient.v2.cli.zones:ListZoneNameserversCommand
 zone_set = designateclient.v2.cli.zones:SetZoneCommand
 zone_share_create = designateclient.v2.cli.zones:ShareZoneCommand
 zone_share_delete = designateclient.v2.cli.zones:DeleteSharedZoneCommand
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/python_designateclient.egg-info/pbr.json 
new/python_designateclient-7.0.0/python_designateclient.egg-info/pbr.json
--- old/python_designateclient-6.4.0/python_designateclient.egg-info/pbr.json   
2026-02-24 15:34:05.000000000 +0100
+++ new/python_designateclient-7.0.0/python_designateclient.egg-info/pbr.json   
2026-07-01 13:49:32.000000000 +0200
@@ -1 +1 @@
-{"git_version": "891ee88", "is_release": true}
\ No newline at end of file
+{"git_version": "944e373", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/bug-1927892-a3f8c4e2b7d91065.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/bug-1927892-a3f8c4e2b7d91065.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/bug-1927892-a3f8c4e2b7d91065.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/bug-1927892-a3f8c4e2b7d91065.yaml
       2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,14 @@
+---
+features:
+  - Adds ``--status`` and ``--zone-id`` filter options to the
+    ``zone export list`` command.
+  - Adds ``--status``, ``--zone-id``, and ``--message`` filter options to the
+    ``zone import list`` command.
+  - Adds ``--status`` filter option to the ``zone transfer accept list``
+    command.
+fixes:
+  - Wires up the existing ``--pattern`` filter option in the
+    ``dns blacklist list`` command so it is actually passed to the API.
+  - Wires up the existing ``--name`` filter option in the ``tld list``
+    command so it is actually passed to the API. Removes the
+    ``--description`` filter which is not supported by the API.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/bug-1978713-1e1f6d9a991c2c4f.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/bug-1978713-1e1f6d9a991c2c4f.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/bug-1978713-1e1f6d9a991c2c4f.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/bug-1978713-1e1f6d9a991c2c4f.yaml
       2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,4 @@
+---
+features:
+  - Adds a ``--status`` filter option to the ``zone transfer request list``
+    command, allowing users to filter zone transfer requests by status.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/bug-2131519-zone-task-pagination-7e4a2b91c3d80f56.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/bug-2131519-zone-task-pagination-7e4a2b91c3d80f56.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/bug-2131519-zone-task-pagination-7e4a2b91c3d80f56.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/bug-2131519-zone-task-pagination-7e4a2b91c3d80f56.yaml
  2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,17 @@
+---
+features:
+  - Zone task list methods (``zone_transfers.list_requests()``,
+    ``zone_transfers.list_accepts()``, ``zone_exports.list()``, and
+    ``zone_imports.list()``) now support pagination parameters
+    (``criterion``, ``marker``, ``limit``), matching the pattern used
+    by other v2 controllers.
+  - CLI list commands for zone exports, zone imports, and zone transfer
+    accepts now automatically paginate through all results using
+    ``get_all()``.
+upgrade:
+  - |
+    ``zone_exports.list()`` and ``zone_imports.list()`` now return a list
+    of items directly instead of the raw API response dict. Code that
+    previously accessed ``result["exports"]`` or ``result["imports"]``
+    should use the return value directly. This aligns these methods with
+    all other v2 list controllers which already use ``response_key``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/dns-limit-list-command-b5fabebf76e7e8eb.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/dns-limit-list-command-b5fabebf76e7e8eb.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/dns-limit-list-command-b5fabebf76e7e8eb.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/dns-limit-list-command-b5fabebf76e7e8eb.yaml
    2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,4 @@
+---
+features:
+  - Adds a ``dns limit list`` CLI command to display the DNS service
+    limits (``GET /limits``).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/zone-create-command-email-is-optional-bug-2143824-71b816f91ce045b1.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/zone-create-command-email-is-optional-bug-2143824-71b816f91ce045b1.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/zone-create-command-email-is-optional-bug-2143824-71b816f91ce045b1.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/zone-create-command-email-is-optional-bug-2143824-71b816f91ce045b1.yaml
 2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    "--email" is no longer an effectively required argument when creating zone.
+    It is now only required for PRIMARY zone type, and is silently ignored
+    for SECONDARY zone type.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/zone-import-attributes-1166c129d39186db.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/zone-import-attributes-1166c129d39186db.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/zone-import-attributes-1166c129d39186db.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/zone-import-attributes-1166c129d39186db.yaml
    2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,9 @@
+---
+features:
+  - |
+    Added ``--attributes`` option to ``openstack zone import create`` command.
+    This allows users to pass zone attributes (e.g. ``pool_id``) when
+    importing a zonefile, using the same ``key:value`` format as
+    ``openstack zone create``. When attributes are provided, the client sends
+    the request as ``application/json`` instead of ``text/dns``. Existing
+    behavior without ``--attributes`` is unchanged.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/notes/zone-nameservers-list-command-60b986968d714b2b.yaml
 
new/python_designateclient-7.0.0/releasenotes/notes/zone-nameservers-list-command-60b986968d714b2b.yaml
--- 
old/python_designateclient-6.4.0/releasenotes/notes/zone-nameservers-list-command-60b986968d714b2b.yaml
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/python_designateclient-7.0.0/releasenotes/notes/zone-nameservers-list-command-60b986968d714b2b.yaml
     2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,4 @@
+---
+features:
+  - Adds a ``zone nameservers list`` CLI command to list the
+    nameservers assigned to a zone (``GET /zones/{zone_id}/nameservers``).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/source/2026.1.rst 
new/python_designateclient-7.0.0/releasenotes/source/2026.1.rst
--- old/python_designateclient-6.4.0/releasenotes/source/2026.1.rst     
1970-01-01 01:00:00.000000000 +0100
+++ new/python_designateclient-7.0.0/releasenotes/source/2026.1.rst     
2026-07-01 13:49:06.000000000 +0200
@@ -0,0 +1,6 @@
+===========================
+2026.1 Series Release Notes
+===========================
+
+.. release-notes::
+   :branch: stable/2026.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_designateclient-6.4.0/releasenotes/source/index.rst 
new/python_designateclient-7.0.0/releasenotes/source/index.rst
--- old/python_designateclient-6.4.0/releasenotes/source/index.rst      
2026-02-24 15:32:49.000000000 +0100
+++ new/python_designateclient-7.0.0/releasenotes/source/index.rst      
2026-07-01 13:49:06.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   2026.1
    2025.2
    2025.1
    2024.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/setup.cfg 
new/python_designateclient-7.0.0/setup.cfg
--- old/python_designateclient-6.4.0/setup.cfg  2026-02-24 15:34:06.071713400 
+0100
+++ new/python_designateclient-7.0.0/setup.cfg  2026-07-01 13:49:32.143751600 
+0200
@@ -1,108 +1,5 @@
 [metadata]
 name = python-designateclient
-description = OpenStack DNS-as-a-Service - Client
-long_description = file: README.rst
-license = Apache License, Version 2.0
-author = OpenStack
-author_email = [email protected]
-url = https://docs.openstack.org/python-designateclient/latest
-python_requires = >=3.10
-classifiers = 
-       Environment :: OpenStack
-       Intended Audience :: Information Technology
-       Intended Audience :: System Administrators
-       License :: OSI Approved :: Apache Software License
-       Operating System :: POSIX :: Linux
-       Programming Language :: Python
-       Programming Language :: Python :: Implementation :: CPython
-       Programming Language :: Python :: 3 :: Only
-       Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.10
-       Programming Language :: Python :: 3.11
-       Programming Language :: Python :: 3.12
-       Programming Language :: Python :: 3.13
-       Topic :: Internet :: Name Service (DNS)
-
-[files]
-packages = 
-       designateclient
-
-[entry_points]
-designateclient.versions = 
-       2 = designateclient.v2.client:Client
-openstack.cli.extension = 
-       dns = designateclient.osc.plugin
-openstack.dns.v2 = 
-       zone_blacklist_create = 
designateclient.v2.cli.blacklists:CreateBlacklistCommand
-       zone_blacklist_list = 
designateclient.v2.cli.blacklists:ListBlacklistsCommand
-       zone_blacklist_show = 
designateclient.v2.cli.blacklists:ShowBlacklistCommand
-       zone_blacklist_set = 
designateclient.v2.cli.blacklists:SetBlacklistCommand
-       zone_blacklist_delete = 
designateclient.v2.cli.blacklists:DeleteBlacklistCommand
-       
-       tld_create = designateclient.v2.cli.tlds:CreateTLDCommand
-       tld_list = designateclient.v2.cli.tlds:ListTLDsCommand
-       tld_show = designateclient.v2.cli.tlds:ShowTLDCommand
-       tld_set = designateclient.v2.cli.tlds:SetTLDCommand
-       tld_delete = designateclient.v2.cli.tlds:DeleteTLDCommand
-       
-       zone_create = designateclient.v2.cli.zones:CreateZoneCommand
-       zone_list = designateclient.v2.cli.zones:ListZonesCommand
-       zone_show = designateclient.v2.cli.zones:ShowZoneCommand
-       zone_set = designateclient.v2.cli.zones:SetZoneCommand
-       zone_delete = designateclient.v2.cli.zones:DeleteZoneCommand
-       
-       zone_abandon = designateclient.v2.cli.zones:AbandonZoneCommand
-       zone_axfr = designateclient.v2.cli.zones:AXFRZoneCommand
-       zone_move = designateclient.v2.cli.zones:PoolMoveZoneCommand
-       
-       zone_export_create = designateclient.v2.cli.zones:ExportZoneCommand
-       zone_export_list = designateclient.v2.cli.zones:ListZoneExportsCommand
-       zone_export_show = designateclient.v2.cli.zones:ShowZoneExportCommand
-       zone_export_delete = 
designateclient.v2.cli.zones:DeleteZoneExportCommand
-       zone_export_showfile = 
designateclient.v2.cli.zones:ShowZoneExportFileCommand
-       
-       zone_import_create = designateclient.v2.cli.zones:ImportZoneCommand
-       zone_import_list = designateclient.v2.cli.zones:ListZoneImportsCommand
-       zone_import_show = designateclient.v2.cli.zones:ShowZoneImportCommand
-       zone_import_delete = 
designateclient.v2.cli.zones:DeleteZoneImportCommand
-       
-       zone_transfer_request_create = 
designateclient.v2.cli.zones:CreateTransferRequestCommand
-       zone_transfer_request_list = 
designateclient.v2.cli.zones:ListTransferRequestsCommand
-       zone_transfer_request_show = 
designateclient.v2.cli.zones:ShowTransferRequestCommand
-       zone_transfer_request_set = 
designateclient.v2.cli.zones:SetTransferRequestCommand
-       zone_transfer_request_delete = 
designateclient.v2.cli.zones:DeleteTransferRequestCommand
-       zone_transfer_accept_request = 
designateclient.v2.cli.zones:AcceptTransferRequestCommand
-       zone_transfer_accept_list = 
designateclient.v2.cli.zones:ListTransferAcceptsCommand
-       zone_transfer_accept_show = 
designateclient.v2.cli.zones:ShowTransferAcceptCommand
-       
-       zone_share_create = designateclient.v2.cli.zones:ShareZoneCommand
-       zone_share_list = designateclient.v2.cli.zones:ListSharedZonesCommand
-       zone_share_show = designateclient.v2.cli.zones:ShowSharedZoneCommand
-       zone_share_delete = designateclient.v2.cli.zones:DeleteSharedZoneCommand
-       
-       recordset_create = 
designateclient.v2.cli.recordsets:CreateRecordSetCommand
-       recordset_list = designateclient.v2.cli.recordsets:ListRecordSetsCommand
-       recordset_show = designateclient.v2.cli.recordsets:ShowRecordSetCommand
-       recordset_set = designateclient.v2.cli.recordsets:SetRecordSetCommand
-       recordset_delete = 
designateclient.v2.cli.recordsets:DeleteRecordSetCommand
-       
-       ptr_record_list = designateclient.v2.cli.reverse:ListFloatingIPCommand
-       ptr_record_show = designateclient.v2.cli.reverse:ShowFloatingIPCommand
-       ptr_record_set = designateclient.v2.cli.reverse:SetFloatingIPCommand
-       ptr_record_unset = designateclient.v2.cli.reverse:UnsetFloatingIPCommand
-       
-       dns_service_list = 
designateclient.v2.cli.service_statuses:ListServiceStatusesCommand
-       dns_service_show = 
designateclient.v2.cli.service_statuses:ShowServiceStatusCommand
-       
-       dns_quota_list = designateclient.v2.cli.quotas:ListQuotasCommand
-       dns_quota_set = designateclient.v2.cli.quotas:SetQuotasCommand
-       dns_quota_reset = designateclient.v2.cli.quotas:ResetQuotasCommand
-       
-       tsigkey_create = designateclient.v2.cli.tsigkeys:CreateTSIGKeyCommand
-       tsigkey_list = designateclient.v2.cli.tsigkeys:ListTSIGKeysCommand
-       tsigkey_show = designateclient.v2.cli.tsigkeys:ShowTSIGKeyCommand
-       tsigkey_set = designateclient.v2.cli.tsigkeys:SetTSIGKeyCommand
-       tsigkey_delete = designateclient.v2.cli.tsigkeys:DeleteTSIGKeyCommand
 
 [egg_info]
 tag_build = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_designateclient-6.4.0/tox.ini 
new/python_designateclient-7.0.0/tox.ini
--- old/python_designateclient-6.4.0/tox.ini    2026-02-24 15:32:49.000000000 
+0100
+++ new/python_designateclient-7.0.0/tox.ini    2026-07-01 13:49:06.000000000 
+0200
@@ -100,8 +100,6 @@
   D704 = checks:no_import_graduated_oslo_libraries
   D705 = checks:use_timeutils_utcnow
   D706 = checks:no_translate_debug_logs
-  D707 = checks:check_no_basestring
-  D708 = checks:check_python3_xrange
   D709 = checks:check_no_log_audit
   D710 = checks:check_no_log_warn
   D711 = checks:check_line_continuation_no_backslash

Reply via email to