Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-novaclient for 
openSUSE:Factory checked in at 2026-03-24 18:50:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-novaclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-novaclient.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-novaclient"

Tue Mar 24 18:50:48 2026 rev:46 rq:1342251 version:18.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-novaclient/python-novaclient.changes      
2025-11-10 19:17:33.076876836 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-novaclient.new.8177/python-novaclient.changes
    2026-03-24 18:51:36.161227098 +0100
@@ -1,0 +2,13 @@
+Mon Mar  9 21:44:54 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 18.12.0:
+  * Replace obsolete PCRE packages
+  * Install pcre packages only in doc jobs
+  * Update the Testing document
+  * reno: Update master for unmaintained/2024.1
+  * Replace remaining py39 target
+  * Update master for stable/2025.2
+  * tests: Remove use of ddt
+  * Use pre-commit for lint jobs
+
+-------------------------------------------------------------------

Old:
----
  python_novaclient-18.11.0.tar.gz

New:
----
  python_novaclient-18.12.0.tar.gz

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

Other differences:
------------------
++++++ python-novaclient.spec ++++++
--- /var/tmp/diff_new_pack.dF2WgB/_old  2026-03-24 18:51:36.885257046 +0100
+++ /var/tmp/diff_new_pack.dF2WgB/_new  2026-03-24 18:51:36.885257046 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-novaclient
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %global pythons %{primary_python}
 Name:           python-novaclient
-Version:        18.11.0
+Version:        18.12.0
 Release:        0
 Summary:        Python API and CLI for OpenStack Nova
 License:        Apache-2.0

++++++ python_novaclient-18.11.0.tar.gz -> python_novaclient-18.12.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/.pre-commit-config.yaml 
new/python_novaclient-18.12.0/.pre-commit-config.yaml
--- old/python_novaclient-18.11.0/.pre-commit-config.yaml       2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/.pre-commit-config.yaml       2026-02-24 
15:33:49.000000000 +0100
@@ -1,10 +1,7 @@
 ---
-default_language_version:
-  # force all unspecified python hooks to run python3
-  python: python3
 repos:
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.1.0
+    rev: v5.0.0
     hooks:
       - id: trailing-whitespace
       - id: mixed-line-ending
@@ -16,17 +13,18 @@
       - id: check-yaml
         files: .*\.(yaml|yml)$
   - repo: https://github.com/Lucas-C/pre-commit-hooks
-    rev: v1.1.13
+    rev: v1.5.5
     hooks:
       - id: remove-tabs
         exclude: '.*\.(svg)$'
-  - repo: local
+  - repo: https://github.com/PyCQA/bandit
+    rev: 1.8.5
     hooks:
-      - id: flake8
-        name: flake8
-        additional_dependencies:
-          - hacking>=6.1.0,<6.2.0
-        language: python
-        entry: flake8
-        files: '^.*\.py$'
+      - id: bandit
+        exclude: '^novaclient/tests/.*$'
+  - repo: https://opendev.org/openstack/hacking
+    rev: 7.0.0
+    hooks:
+      - id: hacking
+        additional_dependencies: []
         exclude: '^(doc|releasenotes|tools)/.*$'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/ChangeLog 
new/python_novaclient-18.12.0/ChangeLog
--- old/python_novaclient-18.11.0/ChangeLog     2025-09-01 15:31:17.000000000 
+0200
+++ new/python_novaclient-18.12.0/ChangeLog     2026-02-24 15:34:39.000000000 
+0100
@@ -1,6 +1,18 @@
 CHANGES
 =======
 
+18.12.0
+-------
+
+* Replace obsolete PCRE packages
+* Install pcre packages only in doc jobs
+* Update the Testing document
+* reno: Update master for unmaintained/2024.1
+* Replace remaining py39 target
+* Update master for stable/2025.2
+* tests: Remove use of ddt
+* Use pre-commit for lint jobs
+
 18.11.0
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/PKG-INFO 
new/python_novaclient-18.12.0/PKG-INFO
--- old/python_novaclient-18.11.0/PKG-INFO      2025-09-01 15:31:17.398654200 
+0200
+++ new/python_novaclient-18.12.0/PKG-INFO      2026-02-24 15:34:40.017911700 
+0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: python-novaclient
-Version: 18.11.0
+Version: 18.12.0
 Summary: Client library for OpenStack Compute API
 Home-page: https://docs.openstack.org/python-novaclient/latest
 Author: OpenStack
@@ -31,6 +31,16 @@
 Requires-Dist: oslo.utils>=3.33.0
 Requires-Dist: PrettyTable>=0.7.2
 Requires-Dist: stevedore>=2.0.1
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: description
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-dist
+Dynamic: requires-python
+Dynamic: summary
 
 ========================
 Team and repository tags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/bindep.txt 
new/python_novaclient-18.12.0/bindep.txt
--- old/python_novaclient-18.11.0/bindep.txt    2025-09-01 15:30:51.000000000 
+0200
+++ new/python_novaclient-18.12.0/bindep.txt    2026-02-24 15:33:49.000000000 
+0100
@@ -18,4 +18,5 @@
 python3-dev [platform:dpkg]
 python3-devel [platform:fedora]
 uuid-dev [platform:dpkg]
-libpcre3-dev [test platform:dpkg]
+libpcre2-dev [platform:dpkg doc]
+pcre2-devel [platform:rpm doc]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/doc/requirements.txt 
new/python_novaclient-18.12.0/doc/requirements.txt
--- old/python_novaclient-18.11.0/doc/requirements.txt  2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/doc/requirements.txt  2026-02-24 
15:33:49.000000000 +0100
@@ -4,4 +4,4 @@
 sphinxcontrib-apidoc>=0.2.0 # BSD
 
 # redirect tests in docs
-whereto>=0.3.0 # Apache-2.0
+whereto>=0.5.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/doc/source/contributor/testing.rst 
new/python_novaclient-18.12.0/doc/source/contributor/testing.rst
--- old/python_novaclient-18.11.0/doc/source/contributor/testing.rst    
2025-09-01 15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/doc/source/contributor/testing.rst    
2026-02-24 15:33:49.000000000 +0100
@@ -8,11 +8,11 @@
 ``tox -e pep8``
   Style guidelines enforcement.
 
-``tox -e py38``
-  Traditional unit testing (Python 3.8).
+``tox -e py310``
+  Traditional unit testing (Python 3.10).
 
 ``tox -e functional``
-  Live functional testing against an existing OpenStack instance. (Python 3.8)
+  Live functional testing against an existing OpenStack instance. (Python 3.10)
 
 ``tox -e cover``
   Generate a coverage report on unit testing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/novaclient/crypto.py 
new/python_novaclient-18.12.0/novaclient/crypto.py
--- old/python_novaclient-18.11.0/novaclient/crypto.py  2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/novaclient/crypto.py  2026-02-24 
15:33:49.000000000 +0100
@@ -14,7 +14,7 @@
 #    under the License.
 
 import base64
-import subprocess
+import subprocess  # nosec: B404
 
 
 class DecryptionFailure(Exception):
@@ -30,7 +30,7 @@
     cmd = ['openssl', 'rsautl', '-decrypt', '-inkey', private_key]
     proc = subprocess.Popen(cmd, stdin=subprocess.PIPE,
                             stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
+                            stderr=subprocess.PIPE)  # nosec: B603
     out, err = proc.communicate(unencoded)
     proc.stdin.close()
     if proc.returncode:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/novaclient/tests/unit/test_shell.py 
new/python_novaclient-18.12.0/novaclient/tests/unit/test_shell.py
--- old/python_novaclient-18.11.0/novaclient/tests/unit/test_shell.py   
2025-09-01 15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/novaclient/tests/unit/test_shell.py   
2026-02-24 15:33:49.000000000 +0100
@@ -17,7 +17,6 @@
 import sys
 from unittest import mock
 
-import ddt
 import fixtures
 from keystoneauth1 import fixture
 import requests_mock
@@ -352,7 +351,6 @@
         self.assertTrue(args.tic_tac)
 
 
[email protected]
 class ShellTest(utils.TestCase):
 
     _msg_no_tenant_project = ("You must provide a project name or project"
@@ -528,22 +526,23 @@
         else:
             self.fail('CommandError not raised')
 
-    @ddt.data(
-        (None, 'project_domain_id', FAKE_ENV['OS_PROJECT_DOMAIN_ID']),
-        ('OS_PROJECT_DOMAIN_ID', 'project_domain_id', ''),
-        (None, 'project_domain_name', FAKE_ENV['OS_PROJECT_DOMAIN_NAME']),
-        ('OS_PROJECT_DOMAIN_NAME', 'project_domain_name', ''),
-        (None, 'user_domain_id', FAKE_ENV['OS_USER_DOMAIN_ID']),
-        ('OS_USER_DOMAIN_ID', 'user_domain_id', ''),
-        (None, 'user_domain_name', FAKE_ENV['OS_USER_DOMAIN_NAME']),
-        ('OS_USER_DOMAIN_NAME', 'user_domain_name', '')
-    )
-    @ddt.unpack
-    def test_basic_attributes(self, exclude, client_arg, env_var):
-        self.make_env(exclude=exclude, fake_env=FAKE_ENV)
-        self.shell('list')
-        client_kwargs = self.mock_client.call_args_list[0][1]
-        self.assertEqual(env_var, client_kwargs[client_arg])
+    def test_basic_attributes(self):
+        for exclude, client_arg, env_var in (
+            (None, 'project_domain_id', FAKE_ENV['OS_PROJECT_DOMAIN_ID']),
+            ('OS_PROJECT_DOMAIN_ID', 'project_domain_id', ''),
+            (None, 'project_domain_name', FAKE_ENV['OS_PROJECT_DOMAIN_NAME']),
+            ('OS_PROJECT_DOMAIN_NAME', 'project_domain_name', ''),
+            (None, 'user_domain_id', FAKE_ENV['OS_USER_DOMAIN_ID']),
+            ('OS_USER_DOMAIN_ID', 'user_domain_id', ''),
+            (None, 'user_domain_name', FAKE_ENV['OS_USER_DOMAIN_NAME']),
+            ('OS_USER_DOMAIN_NAME', 'user_domain_name', '')
+        ):
+            with self.subTest(f'{exclude},{client_arg},{env_var}'):
+                self.mock_client.reset_mock()
+                self.make_env(exclude=exclude, fake_env=FAKE_ENV)
+                self.shell('list')
+                client_kwargs = self.mock_client.call_args_list[0][1]
+                self.assertEqual(env_var, client_kwargs[client_arg])
 
     @requests_mock.Mocker()
     def test_nova_endpoint_type(self, m_requests):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/novaclient/v2/shell.py 
new/python_novaclient-18.12.0/novaclient/v2/shell.py
--- old/python_novaclient-18.11.0/novaclient/v2/shell.py        2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/novaclient/v2/shell.py        2026-02-24 
15:33:49.000000000 +0100
@@ -4208,7 +4208,7 @@
     cmd = "ssh -%d -p%d %s %s@%s %s" % (version, args.port, identity,
                                         args.login, ip_address, args.extra)
     logger.debug("Executing cmd '%s'", cmd)
-    os.system(cmd)
+    os.system(cmd)  # nosec: B605
 
 
 # NOTE(mriedem): In the 2.50 microversion, the os-quota-class-sets API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/python_novaclient.egg-info/PKG-INFO 
new/python_novaclient-18.12.0/python_novaclient.egg-info/PKG-INFO
--- old/python_novaclient-18.11.0/python_novaclient.egg-info/PKG-INFO   
2025-09-01 15:31:17.000000000 +0200
+++ new/python_novaclient-18.12.0/python_novaclient.egg-info/PKG-INFO   
2026-02-24 15:34:39.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: python-novaclient
-Version: 18.11.0
+Version: 18.12.0
 Summary: Client library for OpenStack Compute API
 Home-page: https://docs.openstack.org/python-novaclient/latest
 Author: OpenStack
@@ -31,6 +31,16 @@
 Requires-Dist: oslo.utils>=3.33.0
 Requires-Dist: PrettyTable>=0.7.2
 Requires-Dist: stevedore>=2.0.1
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: description
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-dist
+Dynamic: requires-python
+Dynamic: summary
 
 ========================
 Team and repository tags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/python_novaclient.egg-info/SOURCES.txt 
new/python_novaclient-18.12.0/python_novaclient.egg-info/SOURCES.txt
--- old/python_novaclient-18.11.0/python_novaclient.egg-info/SOURCES.txt        
2025-09-01 15:31:17.000000000 +0200
+++ new/python_novaclient-18.12.0/python_novaclient.egg-info/SOURCES.txt        
2026-02-24 15:34:39.000000000 +0100
@@ -317,6 +317,7 @@
 releasenotes/source/2024.1.rst
 releasenotes/source/2024.2.rst
 releasenotes/source/2025.1.rst
+releasenotes/source/2025.2.rst
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/liberty.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/python_novaclient.egg-info/pbr.json 
new/python_novaclient-18.12.0/python_novaclient.egg-info/pbr.json
--- old/python_novaclient-18.11.0/python_novaclient.egg-info/pbr.json   
2025-09-01 15:31:17.000000000 +0200
+++ new/python_novaclient-18.12.0/python_novaclient.egg-info/pbr.json   
2026-02-24 15:34:39.000000000 +0100
@@ -1 +1 @@
-{"git_version": "45a4ab5e", "is_release": true}
\ No newline at end of file
+{"git_version": "e00ed698", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/releasenotes/notes/remove_api_v_1_1-88b3f18ce1423b46.yaml
 
new/python_novaclient-18.12.0/releasenotes/notes/remove_api_v_1_1-88b3f18ce1423b46.yaml
--- 
old/python_novaclient-18.11.0/releasenotes/notes/remove_api_v_1_1-88b3f18ce1423b46.yaml
     2025-09-01 15:30:51.000000000 +0200
+++ 
new/python_novaclient-18.12.0/releasenotes/notes/remove_api_v_1_1-88b3f18ce1423b46.yaml
     2026-02-24 15:33:49.000000000 +0100
@@ -2,4 +2,3 @@
 upgrade:
   - remove version 1.1 API support as we only support v2 and v2.1
     API in nova side now.
-    
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/releasenotes/source/2024.1.rst 
new/python_novaclient-18.12.0/releasenotes/source/2024.1.rst
--- old/python_novaclient-18.11.0/releasenotes/source/2024.1.rst        
2025-09-01 15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/releasenotes/source/2024.1.rst        
2026-02-24 15:33:49.000000000 +0100
@@ -3,4 +3,4 @@
 ===========================
 
 .. release-notes::
-   :branch: stable/2024.1
+   :branch: unmaintained/2024.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/releasenotes/source/2025.2.rst 
new/python_novaclient-18.12.0/releasenotes/source/2025.2.rst
--- old/python_novaclient-18.11.0/releasenotes/source/2025.2.rst        
1970-01-01 01:00:00.000000000 +0100
+++ new/python_novaclient-18.12.0/releasenotes/source/2025.2.rst        
2026-02-24 15:33:49.000000000 +0100
@@ -0,0 +1,6 @@
+===========================
+2025.2 Series Release Notes
+===========================
+
+.. release-notes::
+   :branch: stable/2025.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python_novaclient-18.11.0/releasenotes/source/index.rst 
new/python_novaclient-18.12.0/releasenotes/source/index.rst
--- old/python_novaclient-18.11.0/releasenotes/source/index.rst 2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/releasenotes/source/index.rst 2026-02-24 
15:33:49.000000000 +0100
@@ -8,6 +8,7 @@
    :maxdepth: 2
 
    unreleased
+   2025.2
    2025.1
    2024.2
    2024.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/test-requirements.txt 
new/python_novaclient-18.12.0/test-requirements.txt
--- old/python_novaclient-18.11.0/test-requirements.txt 2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/test-requirements.txt 2026-02-24 
15:33:49.000000000 +0100
@@ -1,7 +1,4 @@
-hacking>=6.1.0,<6.2.0  # Apache-2.0
-bandit>=1.1.0 # Apache-2.0
 coverage>=4.4.1 # Apache-2.0
-ddt>=1.0.1 # MIT
 fixtures>=3.0.0 # Apache-2.0/BSD
 requests-mock>=1.2.0 # Apache-2.0
 openstacksdk>=0.11.2 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/tools/nova.bash_completion 
new/python_novaclient-18.12.0/tools/nova.bash_completion
--- old/python_novaclient-18.11.0/tools/nova.bash_completion    2025-09-01 
15:30:51.000000000 +0200
+++ new/python_novaclient-18.12.0/tools/nova.bash_completion    2026-02-24 
15:33:49.000000000 +0100
@@ -3,25 +3,25 @@
 _nova_opts_exp="" # lazy init
 _nova()
 {
-       local cur prev nbc cflags
-       COMPREPLY=()
-       cur="${COMP_WORDS[COMP_CWORD]}"
-       prev="${COMP_WORDS[COMP_CWORD-1]}"
+    local cur prev nbc cflags
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
 
-       if [ "x$_nova_opts" == "x" ] ; then
-               nbc="`nova bash-completion | sed -e "s/  *-h  */ /" -e "s/  *-i 
 */ /"`"
-               _nova_opts="`echo "$nbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/  
*/ /g"`"
-               _nova_flags="`echo " $nbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" 
-e "s/  */ /g"`"
-               _nova_opts_exp="`echo "$_nova_opts" | tr ' ' '|'`"
-       fi
+    if [ "x$_nova_opts" == "x" ] ; then
+        nbc="`nova bash-completion | sed -e "s/  *-h  */ /" -e "s/  *-i  */ 
/"`"
+        _nova_opts="`echo "$nbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/  */ /g"`"
+        _nova_flags="`echo " $nbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" -e "s/ 
 */ /g"`"
+        _nova_opts_exp="`echo "$_nova_opts" | tr ' ' '|'`"
+    fi
 
-       if [[ " ${COMP_WORDS[@]} " =~ " "($_nova_opts_exp)" " && "$prev" != 
"help" ]] ; then
-               COMPLETION_CACHE=~/.novaclient/*/*-cache
-               cflags="$_nova_flags "$(cat $COMPLETION_CACHE 2> /dev/null | tr 
'\n' ' ')
-               COMPREPLY=($(compgen -W "${cflags}" -- ${cur}))
-       else
-               COMPREPLY=($(compgen -W "${_nova_opts}" -- ${cur}))
-       fi
-       return 0
+    if [[ " ${COMP_WORDS[@]} " =~ " "($_nova_opts_exp)" " && "$prev" != "help" 
]] ; then
+        COMPLETION_CACHE=~/.novaclient/*/*-cache
+        cflags="$_nova_flags "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' 
')
+        COMPREPLY=($(compgen -W "${cflags}" -- ${cur}))
+    else
+        COMPREPLY=($(compgen -W "${_nova_opts}" -- ${cur}))
+    fi
+    return 0
 }
 complete -F _nova nova
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python_novaclient-18.11.0/tox.ini 
new/python_novaclient-18.12.0/tox.ini
--- old/python_novaclient-18.11.0/tox.ini       2025-09-01 15:30:51.000000000 
+0200
+++ new/python_novaclient-18.12.0/tox.ini       2026-02-24 15:33:49.000000000 
+0100
@@ -1,12 +1,11 @@
 [tox]
 envlist = py3,pep8,docs
-minversion = 3.18.0
-ignore_basepython_conflict = true
+minversion = 4.6.0
 
 [testenv]
-basepython = python3
+description =
+  Run unit tests.
 usedevelop = true
-# tox is silly... these need to be separated by a newline....
 allowlist_externals =
   find
   rm
@@ -23,10 +22,20 @@
   stestr run {posargs}
 
 [testenv:pep8]
-commands = flake8 {posargs}
+description =
+  Run style checks.
+deps =
+  pre-commit
+commands =
+  pre-commit run --all-files --show-diff-on-failure
 
 [testenv:bandit]
-commands = bandit -r novaclient -n5 -x tests
+description =
+  Run security checks.
+deps =
+  pre-commit
+commands =
+  pre-commit run --all-files --show-diff-on-failure bandit
 
 [testenv:venv]
 deps =
@@ -37,6 +46,8 @@
 commands = {posargs}
 
 [testenv:docs]
+description =
+  Build documentation in HTML format.
 deps =
   
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
@@ -47,6 +58,8 @@
   whereto doc/build/html/.htaccess doc/test/redirect-tests.txt
 
 [testenv:pdf-docs]
+description =
+  Build documentation in PDF format.
 deps = {[testenv:docs]deps}
 commands =
   rm -rf doc/build/pdf
@@ -54,19 +67,26 @@
   make -C doc/build/pdf
 
 [testenv:releasenotes]
+description =
+  Build release notes.
 deps =
   
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
 commands =
   sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
-[testenv:functional{,-py39,-py310,-py311,-py312}]
-passenv = OS_*
+[testenv:functional{,-py310,-py311,-py312,-py313}]
+description =
+  Run functional tests.
+passenv =
+  OS_*
 commands =
   stestr --test-path=./novaclient/tests/functional run --concurrency=1 
{posargs}
   python novaclient/tests/functional/hooks/check_resources.py
 
 [testenv:cover]
+description =
+  Run unit tests and print coverage information.
 setenv =
   PYTHON=coverage run --source novaclient --parallel-mode
 commands =
@@ -93,11 +113,12 @@
 import_exceptions = novaclient.i18n
 
 [testenv:bindep]
+description =
+  Check for installed binary dependencies.
 # Do not install any requirements. We want this to be fast and work even if
 # system dependencies are missing, since it's used to tell you what system
 # dependencies are missing! This also means that bindep must be installed
 # separately, outside of the requirements files.
 deps = bindep
-skipsdist=True
-usedevelop=False
+skip_install = true
 commands = bindep test

Reply via email to