From a42c19b9f2f2f1858b7bfe05218e9003fa89adf7 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Fri, 7 Aug 2026 11:01:03 +0100 Subject: [PATCH 01/12] ruff: Enable B, RUF rules The B (flake8-bugbear) and RUF (ruff) rule sets are enabled in the default ruff rules in 0.16.0 and with good reason: they're rather useful. Enable them here also. Change-Id: I478baf973eef7c45acd626f2d5433446ab62977d Signed-off-by: Stephen Finucane --- openstack_requirements/cmds/check_exists.py | 10 ++++++---- openstack_requirements/cmds/edit_constraint.py | 2 +- openstack_requirements/cmds/generate.py | 10 ++++------ openstack_requirements/project_config.py | 3 +-- playbooks/files/project-requirements-change.py | 6 +++--- pyproject.toml | 14 ++++++++++---- 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/openstack_requirements/cmds/check_exists.py b/openstack_requirements/cmds/check_exists.py index 95a989cbc..c74c36b6c 100644 --- a/openstack_requirements/cmds/check_exists.py +++ b/openstack_requirements/cmds/check_exists.py @@ -10,9 +10,9 @@ # License for the specific language governing permissions and limitations # under the License. -"""Check to see if a package from a project's requrements file exist in g-r or -u-c. +"""Check for a package dependency. +Check to see if a package from a project's dependencies exists in g-r or u-c. """ import argparse @@ -28,7 +28,9 @@ def main(args=None): parser = argparse.ArgumentParser() parser.add_argument( - 'project', default='', help='path to the project source root folder.' + 'project', + default='', + help='path to the project source root folder.', ) parser.add_argument( '-u', @@ -115,7 +117,7 @@ def main(args=None): print( f'Specifier {spec.version} from {name} is ' f'failing check from global-requirements ' - f'specifiers {str(spec_gr)}' + f'specifiers {spec_gr!s}' ) error_count += 1 continue diff --git a/openstack_requirements/cmds/edit_constraint.py b/openstack_requirements/cmds/edit_constraint.py index a92f495cc..4fa40c9da 100644 --- a/openstack_requirements/cmds/edit_constraint.py +++ b/openstack_requirements/cmds/edit_constraint.py @@ -66,7 +66,7 @@ def main(argv=None, stdout=None): if stdout is None: stdout = sys.stdout _validate_options(options, args) - args = args + [""] + args = [*args, ""] content = open(args[0]).read() reqs = requirement.parse(content, permit_urls=True) out_reqs = edit(reqs, args[1], args[2]) diff --git a/openstack_requirements/cmds/generate.py b/openstack_requirements/cmds/generate.py index edee037a7..4cba3bba9 100644 --- a/openstack_requirements/cmds/generate.py +++ b/openstack_requirements/cmds/generate.py @@ -113,7 +113,7 @@ def _freeze(requirements, python): b'\n'.join(output).decode('utf-8'), exc, ) - ) + ) from exc finally: # log job results with tempfile.NamedTemporaryFile( @@ -162,7 +162,7 @@ def _combine_freezes(freezes, denylist=None): # version ranges for these for idx, (version, py_versions) in enumerate( sorted(versions.items()) - ): # noqa: E501 + ): if idx == 0: # lower-bound marker = f"python_version<='{py_versions[-1]}'" elif idx + 1 != len(versions): # intermediate version(s) @@ -174,9 +174,7 @@ def _combine_freezes(freezes, denylist=None): elif list(versions.values())[0] != reference_versions: # markers for packages with a single version - these are usually # version specific so we use strict python versions for these - for idx, (version, py_versions) in enumerate( - sorted(versions.items()) - ): # noqa: E501 + for version, py_versions in sorted(versions.items()): for py_version in sorted(py_versions): marker = f"python_version=='{py_version}'" yield f'{package}==={version};{marker}\n' @@ -294,7 +292,7 @@ def main(argv=None, stdout=None): 'installed' ), ) - options, args = parser.parse_args(argv) + options, _ = parser.parse_args(argv) if stdout is None: stdout = sys.stdout _validate_options(options) diff --git a/openstack_requirements/project_config.py b/openstack_requirements/project_config.py index 71831df0d..cda3a3b13 100644 --- a/openstack_requirements/project_config.py +++ b/openstack_requirements/project_config.py @@ -15,8 +15,7 @@ import requests import yaml - -ZUUL_PROJECTS_URL = 'https://git.openstack.org/cgit/openstack-infra/project-config/plain/zuul.d/projects.yaml' # noqa +ZUUL_PROJECTS_URL = 'https://git.openstack.org/cgit/openstack-infra/project-config/plain/zuul.d/projects.yaml' ZUUL_PROJECTS_FILENAME = 'openstack-infra/project-config/zuul.d/projects.yaml' diff --git a/playbooks/files/project-requirements-change.py b/playbooks/files/project-requirements-change.py index f063515d5..204685ebe 100755 --- a/playbooks/files/project-requirements-change.py +++ b/playbooks/files/project-requirements-change.py @@ -24,9 +24,9 @@ import sys import tempfile -from openstack_requirements import check # noqa -from openstack_requirements import project # noqa -from openstack_requirements import requirement # noqa +from openstack_requirements import check +from openstack_requirements import project +from openstack_requirements import requirement def run_command(cmd): diff --git a/pyproject.toml b/pyproject.toml index 5df4dd082..7a7a2e246 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,8 +49,14 @@ quote-style = "preserve" docstring-code-format = true [tool.ruff.lint] -select = ["E", "F", "UP"] +select = ["B", "E", "F", "RUF", "UP"] +ignore = [ + # next(iter(x)) is harder to read than list(x)[0] + "RUF015", +] -# [tool.ruff.lint.per-file-ignores] -# "openstack/tests/*" = ["S"] -# "examples/*" = ["S"] +[tool.ruff.lint.per-file-ignores] +"openstack_requirements/tests/*" = [ + # don't want to annotate testscenarios scenarios + "RUF012" +] From 04f21218f67545618da881c4b5c00681067393fa Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 6 Oct 2026 14:33:54 +0100 Subject: [PATCH 02/12] Remove SQLAlchemy-Utils This is effectively no longer maintained, and all users of it in OpenStack have been reworked to remove their usage. Change-Id: I9151714f3d96b8f40ff14fb0a9b7bbce473c59e7 Signed-off-by: Stephen Finucane Depends-on: https://review.opendev.org/c/openstack/cinder/+/1009029 Depends-on: https://review.opendev.org/c/openstack/octavia/+/1009045 --- global-requirements.txt | 1 - upper-constraints.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index 5455bccac..8ce7af942 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -165,7 +165,6 @@ scipy # BSD semantic-version # BSD setproctitle # BSD SQLAlchemy # MIT -SQLAlchemy-Utils # BSD License sshtunnel # MIT statsd # MIT suds-community # LGPLv3+ diff --git a/upper-constraints.txt b/upper-constraints.txt index a647ffea6..6c71b34ce 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -272,7 +272,6 @@ webcolors===25.10.0 aodhclient===3.12.0 autobahn===26.7.1 truststore===0.10.4 -SQLAlchemy-Utils===0.42.1 retryz===0.1.9 pluggy===1.6.0 coverage===7.16.1 From f8b074c18f570bbf7858b4fb0128291791e1761a Mon Sep 17 00:00:00 2001 From: Clay Gerrard Date: Tue, 25 Aug 2026 21:34:11 -0500 Subject: [PATCH 03/12] Add anycrc to global requirements Swift uses anycrc for CRC calculation when other native implementations are not available. The new S3 checksum changes also use it to combine per-part CRC32, CRC32C, and CRC64-NVME values for FULL_OBJECT multipart uploads. This calculates the final checksum without reading the part data again. Add anycrc 2.0.0 to upper-constraints.txt. This version requires Python 3.8 or later and bitarray==3.8.0, so include the bitarray constraint. Swift will manage its minimum dependency version and Python 3.7 test constraints separately. * Is the library actively maintained? Yes. Upstream has made releases from 2024 through 2026. The latest release is 2.0.0, published on 2026-03-24. * Is the library good code? Yes, for the interfaces that Swift uses. It provides Cython bindings to native C code. The version 2.0.0 tests cover known CRC values, incremental updates, CRC combination, bit-level operations, and model aliases. Swift uses the calc() and combine() interfaces for CRC32, CRC32C, and CRC64-NVME. * Is the library license compatible? Yes. Anycrc uses the Zlib license. The global requirement line includes the license as a comment. * Is the library already packaged in the distros we target? It is not in current Debian stable, Trixie, or Ubuntu 26.04 LTS, Resolute. Debian testing and unstable provide python3-anycrc 1.3.6. The Ubuntu development release also provides this package. The Debian OpenStack packaging team maintains the Debian package. * Is this function already covered by another library in global requirements? No. Python zlib supplies CRC32 calculation but does not provide the required general combine interface. Swift can use ISA-L for some CRC calculations when it is present, but no Python library in global requirements provides the combine operation that Swift needs for CRC32, CRC32C, and CRC64-NVME. Anycrc provides calculation and combination for all three models. * Is the library required for an OpenStack project? Which? Yes. OpenStack Swift requires it for the new S3 FULL_OBJECT multipart checksum persistence support. * Is the library managed by the OpenStack release process? No. It is an external library, so the OpenStack release model does not apply. * Do I need to update anything else? This change adds anycrc 2.0.0 and its bitarray 3.8.0 dependency to upper-constraints.txt. A separate Swift change will declare anycrc>=1.3.3, add version 1.3.3 to lower constraints, and pin the Python 3.7 test environment to version 1.3.3. Modern Python test jobs will use the global constraint. Needed-By: https://review.opendev.org/c/openstack/swift/+/1002386 Related-Change: https://review.opendev.org/c/openstack/swift/+/993193 Change-Id: Ia4b77ec936d84b7f8d4c18e23d569fa01bc234de Co-Authored-by: Jianjian Huo Signed-off-by: Clay Gerrard Signed-off-by: Jianjian Huo Assisted-by: OpenAI Codex : GPT-6 --- global-requirements.txt | 1 + upper-constraints.txt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/global-requirements.txt b/global-requirements.txt index 0dec17c5f..cbe55c0f4 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -13,6 +13,7 @@ aiomysql # MIT License aiosqlite # MIT License alembic!=1.2.0,!=1.6.3 # MIT amqp!=2.1.4,!=5.0.4 # BSD +anycrc # Zlib appdirs # MIT License apscheduler # MIT License autobahn # MIT License diff --git a/upper-constraints.txt b/upper-constraints.txt index 3f356dd55..2852306a5 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -6,6 +6,8 @@ # *STRONGLY* encouraged to rely on curated distributions of OpenStack # or manage security patching of dependencies themselves. voluptuous===0.16.0 +anycrc===2.0.0 +bitarray===3.8.0 chardet===6.0.0.post1 enum-compat===0.0.3 netmiko===4.7.0 From c154700be1379e2d967b1cf3ec8574b2e9fbd9b8 Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Mon, 12 Oct 2026 09:13:57 +0000 Subject: [PATCH 04/12] update constraint for keystoneauth1 to new release 5.18.1 meta: version: 5.18.1 meta: team: OpenStackSDK meta: diff-start: - meta: series: indri meta: branch: master meta: release-type: release meta: pypi: yes meta: first: no meta: release:Author: Stephen Finucane meta: release:Commit: Stephen Finucane meta: release:Change-Id: Id712de0b0df0733bc4ca7f4e5f2550b8bf54eecd meta: release:Code-Review+2: Elod Illes meta: release:Workflow+1: Elod Illes Change-Id: I22191c1e3eed0dd310baf1a0e33e73de26dc6cb1 Signed-off-by: OpenStack Proposal Bot Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/update_constraints.sh --- upper-constraints.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upper-constraints.txt b/upper-constraints.txt index 190d18649..ddb0f8469 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -525,7 +525,7 @@ propcache===0.5.4 cachetools===7.2.0 flexcache===0.3 sphinxcontrib-qthelp===2.0.0 -keystoneauth1===5.18.0 +keystoneauth1===5.18.1 statsd===4.0.1 proto-plus===1.29.0 python-keystoneclient===6.0.0 From a8d74ede4b94f2096cfdff43a03af107be8a5a66 Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Sat, 10 Oct 2026 09:35:29 +0000 Subject: [PATCH 05/12] Updated from generate-constraints Fixes applied to automated upper-constraints.txt update: Pin versions for packages that are not ready for updating: - pyroute2: Nova/os-vif issues - pyparsing: due to regression in 3.3.3[1] - salt: pin to 3008.0 and revert induced packaging downgrade[2] - dnspython: Changed error msgs need adoption in designate [1] https://github.com/pyparsing/pyparsing/issues/672 [2] https://github.com/saltstack/salt/issues/70350 Co-Authored-by: Dr. Jens Harbott Co-Authored-by: Takashi Kajinami Change-Id: I983001378a251ea200ea49f877e5323975e83b34 Signed-off-by: OpenStack Proposal Bot Generated-By: openstack/project-config:playbooks/proposal/propose_update.sh --- upper-constraints.txt | 106 +++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 52 deletions(-) diff --git a/upper-constraints.txt b/upper-constraints.txt index bd26eac53..9a755dc92 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -9,14 +9,14 @@ voluptuous===0.16.0 chardet===6.0.0.post1 enum-compat===0.0.3 netmiko===4.8.0 -sshtunnel===0.4.0 +sshtunnel===0.5.1 PasteDeploy===3.1.0 Routes===2.5.1 rtslib-fb===2.2.4 oslo.limit===2.12.0 restructuredtext_lint===2.0.2 yarl===1.25.1 -tzdata===2026.4 +tzdata===2026.5 smmap===5.0.3 confget===5.1.2 XStatic-Angular-Bootstrap===2.5.0.1 @@ -38,7 +38,7 @@ rst2txt===1.1.0 setproctitle===1.3.8 pytest===9.1.1 a2wsgi===1.10.10 -python-slugify===9.1.2 +python-slugify===9.1.3 cursive===0.3.1 oslo.service===4.8.0 django-appconf===1.2.0 @@ -69,10 +69,10 @@ annotated-doc===0.0.5 jaraco.text===4.3.0 oslo.metrics===0.17.0 storage-interfaces===1.0.5 -pydantic===2.13.5 +pydantic===2.14.0 pystache===0.6.8 XStatic-Font-Awesome===6.2.1.2 -aiohttp===3.14.3 +aiohttp===3.14.4 waitress===3.0.2 os-refresh-config===14.1.0 pysnmp===7.1.30 @@ -80,7 +80,7 @@ Mako===1.4.3 sphinxcontrib-htmlhelp===2.1.0 XStatic-jQuery===3.7.1.1 sphinx-copybutton===0.5.2 -beartype===0.22.9 +beartype===0.23.0 jaraco.collections===5.2.1 ddt===1.7.2 pyserial===3.5 @@ -89,7 +89,7 @@ infi.dtypes.wwn===0.2.0 awscrt===0.37.0 pcre2===0.7.1 python-freezerclient===6.5.0 -py-pure-client===1.95.0 +py-pure-client===1.96.0 krest===1.3.8 psycopg2===2.9.13 networkx===3.6.1 @@ -97,7 +97,7 @@ cheroot===11.1.2 XStatic-Angular===1.8.2.3 zuul-sphinx===0.8.1 ply===3.11 -google-api-core===2.40.0 +google-api-core===2.42.0 requests-toolbelt===1.0.0 simplejson===4.2.0 python-swiftclient===4.11.0 @@ -108,7 +108,7 @@ monasca-common===3.8.0 hyperframe===6.1.0 zeroconf===0.151.5 scipy===1.17.1 -opentelemetry-exporter-otlp===1.45.0 +opentelemetry-exporter-otlp===1.45.1 python-gnupg===0.5.7 rsd-lib===1.2.0 XStatic-Jasmine===2.4.1.3 @@ -127,21 +127,21 @@ python-watcherclient===4.11.0 MarkupSafe===3.0.4 cloudpickle===3.1.2 doc8===2.0.0 -pymongo===4.18.2 +pymongo===4.18.3 python-cloudkittyclient===6.2.0 soupsieve===2.10 sqlparse===0.6.0 oslotest===6.1.1 -jsonpointer===3.1.1 +jsonpointer===3.2.0 defusedxml===0.7.1 -opentelemetry-sdk===1.45.0 +opentelemetry-sdk===1.45.1 netaddr===1.3.0 pyghmi===1.6.19 sphinxcontrib-blockdiag===3.0.0 aiosqlite===0.22.1 priority===2.0.0 gnocchiclient===7.2.0 -wcwidth===0.9.1 +wcwidth===0.9.2 sphinxcontrib.datatemplates===0.11.0 jsonpath-rw===1.4.0 prettytable===3.18.0 @@ -153,11 +153,11 @@ semantic-version===2.10.0 ConfigArgParse===1.8.0 async-timeout===5.0.1 virtualbmc===3.3.0 -SQLAlchemy===2.0.54 +SQLAlchemy===2.1.4 pyroute2===0.8.1 -google-auth===2.59.1 +google-auth===2.61.0 kazoo===2.11.0 -pyspnego===0.12.3 +pyspnego===0.12.4 trio-websocket===0.12.2 XStatic-roboto-fontface===0.8.0.1 pyudev===0.24.5 @@ -184,7 +184,7 @@ networking-generic-switch===10.2.0 pywbem===1.9.1 python-subunit===1.4.6 tornado===6.5.10 -pycparser===3.0 +pycparser===3.11 mock===5.2.0 PyYAML===6.0.3 beautifulsoup4===4.15.0 @@ -195,7 +195,7 @@ URLObject===3.0.0 psycopg2-binary===2.9.13 glance_store===5.7.0 openstack-release-test===8.6.0 -pycryptodomex===3.23.0 +pycryptodomex===3.24.0 requests-mock===1.12.1 os-apply-config===14.1.0 xxhash===4.0.1 @@ -230,7 +230,7 @@ Jinja2===3.1.6 XStatic-Bootstrap-SCSS===3.4.1.1 pyzabbix===1.3.1 ptyprocess===0.7.0 -amqp===5.4.0 +amqp===5.4.1 ruamel.yaml===0.19.1 websockify===0.13.0 CherryPy===18.10.0 @@ -254,9 +254,9 @@ passlib===1.7.4 cliff===4.16.0 os-brick===7.1.1 valkey===6.1.1 -scp===0.16.1 +scp===0.16.2 lark===1.3.1 -opentelemetry-exporter-prometheus===0.66b0 +opentelemetry-exporter-prometheus===0.66b1 python-zaqarclient===4.7.0 ldappool===3.0.0 hpack===4.2.0 @@ -265,8 +265,9 @@ roman-numerals===4.1.0 google-api-python-client===2.201.0 castellan===5.8.0 oslo.versionedobjects===3.12.0 +ssh-python===1.2.0.post1 enmerkar===0.7.1 -typer===0.27.2 +typer===0.27.3 webcolors===25.10.0 aodhclient===3.12.0 autobahn===26.7.1 @@ -278,11 +279,11 @@ pyee===13.0.1 freezegun===1.5.5 mdurl===0.1.2 toml===0.10.2 -pycdlib===1.21.0 +pycdlib===1.22.0 pyperclip===1.11.0 cassandra-driver===3.30.1 XStatic-Angular-Schema-Form===0.8.13.1 -opentelemetry-exporter-otlp-proto-http===1.45.0 +opentelemetry-exporter-otlp-proto-http===1.45.1 gabbi===4.2.3 nwdiag===3.0.0 XStatic-bootswatch===3.3.7.1 @@ -298,13 +299,13 @@ os_vif===5.3.0 qrcode===8.2 oslo.middleware===8.2.0 XStatic-mdi===1.6.50.3 -pydantic_core===2.46.5 +pydantic_core===2.50.0 uritemplate===4.2.0 docutils===0.21.2 threadpoolctl===3.7.0 os-ken===4.2.2 ujson===6.0.0 -selenium===4.50.0 +selenium===4.51.0 pytest-subtests===0.15.0 mistral-lib===3.6.0 dogtag-pki===11.2.1 @@ -316,8 +317,8 @@ capacity===1.3.14 playwright===1.63.0 markdown-it-py===4.2.0 retrying===1.4.2 -python-discovery===1.6.1 -platformdirs===4.12.2 +python-discovery===1.6.2 +platformdirs===4.12.4 pydotplus===2.0.2 boto3===1.35.99 jeepney===0.9.0 @@ -328,7 +329,7 @@ oslo.serialization===5.11.0 warlock===2.1.0 exabgp===5.0.13 aiomysql===0.3.2 -sphinxcontrib-httpdomain===2.0.0 +sphinxcontrib-httpdomain===2.1.0 metalsmith===2.5.0 s3transfer===0.10.4 text-unidecode===1.3 @@ -337,7 +338,7 @@ oslo.vmware===4.10.1 autopage===0.6.0 gitdb===4.0.12 python-monascaclient===2.8.0 -opentelemetry-api===1.45.0 +opentelemetry-api===1.45.1 frozenlist===1.8.0 automaton===3.5.0 os-service-types===1.9.0 @@ -352,7 +353,7 @@ enum34===1.1.10 infinisdk===289.1.4 rich-argparse===1.8.0 packaging===26.3 -opentelemetry-exporter-otlp-proto-grpc===1.45.0 +opentelemetry-exporter-otlp-proto-grpc===1.45.1 psutil===7.2.2 txaio===26.6.1 elasticsearch===9.5.1 @@ -362,7 +363,7 @@ pifpaf===3.4.0 blockdiag===3.0.0 testtools===2.9.1 infi.dtypes.iqn===0.4.0 -jsonpath-ng===1.8.0 +jsonpath-ng===1.10.0 XStatic-tv4===1.2.7.1 XStatic-JSEncrypt===2.3.1.2 python-cinderclient===9.10.0 @@ -407,28 +408,29 @@ Sphinx===9.0.4 oslo.config===10.7.0 openstackdocstheme===3.6.0 osc-placement===4.9.1 -rpds-py===2026.6.3 +rpds-py===2026.9.1 zake===0.2.2 flux===1.4.0 flexparser===0.4 krb5===0.10.0 PyMySQL===1.2.3 uhashring===2.5 -kubernetes===36.0.3 +kubernetes===37.0.1 httplib2===0.32.0 -opentelemetry-exporter-otlp-common===0.66b0 +opentelemetry-exporter-otlp-common===0.66b1 betamax===0.9.0 construct===2.10.70 pytest-metadata===3.1.1 pyparsing===3.3.2 geomet===1.1.0 -opentelemetry-exporter-otlp-proto-common===1.45.0 +opentelemetry-exporter-otlp-proto-common===1.45.1 +aiohttp-retry===2.9.1 distlib===0.4.3 -ast_serialize===0.12.0 +ast_serialize===0.12.1 dogpile.cache===1.5.0 python-barbicanclient===7.6.0 salt===3008.0 -opentelemetry-semantic-conventions===0.66b0 +opentelemetry-semantic-conventions===0.66b1 blinker===1.9.0 WSME===0.13.0 oslo.upgradecheck===2.8.0 @@ -439,7 +441,7 @@ botocore===1.35.99 xmltodict===1.0.4 pyasn1===0.6.4 oslo.rootwrap===7.10.0 -Django===5.2.17 +Django===5.2.18 pexpect===4.9.0 elastic-transport===9.4.2 cmd2===4.2.4 @@ -450,7 +452,7 @@ cbor2===6.1.5 click===8.5.0 XStatic-smart-table===1.4.13.3 kuryr-lib===3.5.0 -jsonpatch===1.33 +jsonpatch===1.34 respx===0.23.1 libsass===0.23.0 os-testr===3.0.0 @@ -463,7 +465,7 @@ infi.dtypes.nqn===0.1.0 looseversion===1.3.0 six===1.17.0 h2===4.4.1 -dulwich===1.2.15 +dulwich===1.2.17 sentinels===1.1.1 kombu===5.6.2 distro===1.9.0 @@ -474,7 +476,7 @@ requestsexceptions===1.4.0 testresources===2.1.2 falcon===4.4.0 tomlkit===0.15.1 -opentelemetry-exporter-http-transport===0.66b0 +opentelemetry-exporter-http-transport===0.66b1 etcd3gw===2.7.0 timelib===0.3.0 Flask-RESTful===0.3.10 @@ -499,7 +501,7 @@ oslo.policy===6.0.1 hvac===2.4.0 pyeclib===1.8.0 rfc3986===2.0.0 -tenacity===9.1.4 +tenacity===9.2.1 invoke===3.0.3 python-designateclient===7.0.0 pytest-cov===7.1.0 @@ -521,7 +523,7 @@ cachez===0.1.2 XStatic-Bootstrap-Datepicker===1.4.0.1 netifaces===0.11.0 propcache===0.5.4 -cachetools===7.2.0 +cachetools===7.2.1 flexcache===0.3 sphinxcontrib-qthelp===2.0.0 keystoneauth1===5.18.0 @@ -557,15 +559,15 @@ sphinxcontrib-programoutput===0.20 storpool.spopenstack===3.2.0 dnspython===2.8.0 oauthlib===4.0.0 -zipp===4.1.0 +zipp===4.1.1 greenlet===3.5.6 XStatic-Angular-Vis===4.16.0.1 -iniconfig===2.3.0 +iniconfig===2.3.1 referencing===0.37.0 -confluent-kafka===2.15.1 +confluent-kafka===2.16.0 backports.tarfile===1.2.0 -narwhals===2.26.0 -xvfbwrapper===0.2.34 +narwhals===2.27.1 +xvfbwrapper===0.2.35 influxdb-client===1.50.0 tosca-parser===2.15.0 python-consul2===0.1.5 @@ -579,7 +581,7 @@ importlib_metadata===9.0.1 sortedcontainers===2.4.0 microversion_parse===2.1.0 python-linstor===1.29.1 -filelock===4.0.9 +filelock===4.1.0 python-tackerclient===2.6.0 python-heatclient===5.3.0 oslo.utils===10.2.0 @@ -593,8 +595,8 @@ colorama===0.4.6 confetti===2.5.3 ironic-lib===7.0.0 aiohappyeyeballs===2.7.1 -pytz===2026.4 -opentelemetry-proto===1.45.0 +pytz===2026.5 +opentelemetry-proto===1.45.1 XStatic-D3===3.5.17.1 actdiag===3.0.0 sphinxcontrib-applehelp===2.0.0 From 3ea865eac756fc82ea83933ab5e2ce0c9700eb16 Mon Sep 17 00:00:00 2001 From: Thomas Bechtold Date: Sun, 11 Oct 2026 07:32:39 +0200 Subject: [PATCH 06/12] Drop appdirs, os-win, pika and requestsexceptions None of the projects in projects.txt depend on these anymore, and nothing in upper-constraints requires them: - appdirs: openstacksdk replaced it with platformdirs [1]. - os-win: the project is retired [2]. - pika: the oslo.messaging pika driver was removed in Rocky [3]. - requestsexceptions: removed from openstacksdk [4] and retired [5], so also drop it from projects.txt. [1] https://review.opendev.org/q/I4c2b60ca0da29da1f605b4c0b5e77f8e1071a19c [2] https://review.opendev.org/c/openstack/os-win/+/894411 [3] https://review.opendev.org/q/I52ea5ccb7e7c247abd95e2d8d50dac4c4ad11246 [4] https://review.opendev.org/q/Ib901b203d056e0660191ee27018456c91fb6f74f [5] https://review.opendev.org/c/openstack/requestsexceptions/+/979809 Assisted-By: Claude Code claude-opus-5-5 Signed-off-by: Thomas Bechtold Change-Id: Ic51e7229c9d1cbfa596991b3614cad5ee9d0c804 --- global-requirements.txt | 4 ---- projects.txt | 1 - upper-constraints.txt | 4 ---- 3 files changed, 9 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index ff904d505..3d22f1c30 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -14,7 +14,6 @@ aiosqlite # MIT License alembic!=1.2.0,!=1.6.3 # MIT amqp!=2.1.4,!=5.0.4 # BSD anycrc # Zlib -appdirs # MIT License apscheduler # MIT License autobahn # MIT License automaton # Apache-2.0 @@ -117,7 +116,6 @@ Paste # MIT PasteDeploy # MIT pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,!=1.4.0 # BSD pexpect!=3.3 # ISC License -pika # BSD Pillow # PIL License Pint # BSD platformdirs # MIT License @@ -155,7 +153,6 @@ qrcode # BSD rbd-iscsi-client # Apache-2.0 requests!=2.20.0,!=2.24.0 # Apache-2.0 requests-kerberos # ISC -requestsexceptions # Apache-2.0 rfc3986 # Apache-2.0 Routes # MIT rtslib-fb # Apache-2.0 @@ -352,7 +349,6 @@ os-resource-classes # Apache-2.0 os-service-types # Apache-2.0 os-traits # Apache-2.0 os-vif!=1.8.0,!=1.12.0,!=3.0.0 # Apache-2.0 -os-win # Apache-2.0 osc-lib # Apache-2.0 osc-placement # Apache-2.0 oslo.cache!=1.31.1,!=2.1.0 # Apache-2.0 diff --git a/projects.txt b/projects.txt index c01307ca2..7093d5af4 100644 --- a/projects.txt +++ b/projects.txt @@ -1,6 +1,5 @@ openstack/hacking openstack/pbr -openstack/requestsexceptions openstack/shade openstack/ansible-config_template openstack/ansible-hardening diff --git a/upper-constraints.txt b/upper-constraints.txt index 0b2abbf07..58fc49204 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -246,7 +246,6 @@ django-debreach===2.1.0 sphinx-feature-classification===2.1.0 XStatic-JQuery-Migrate===3.3.2.2 pytest-html===4.2.0 -appdirs===1.4.4 google-auth-httplib2===0.4.4 daiquiri===3.4.0 apache-libcloud===3.9.1 @@ -314,7 +313,6 @@ dogtag-pki===11.2.1 XStatic-Angular-UUID===0.0.4.1 dfs_sdk===1.2.27 sphinxcontrib-seqdiag===3.0.0 -os-win===5.9.0 capacity===1.3.14 playwright===1.63.0 markdown-it-py===4.2.0 @@ -385,7 +383,6 @@ yamlloader===1.6.0 protobuf===7.36.2 sushy===5.14.0 python-neutronclient===14.0.0 -pika===1.4.4 oslo.cache===4.3.0 WebTest===3.0.7 os-collect-config===14.1.0 @@ -474,7 +471,6 @@ distro===1.9.0 zstd===1.5.7.2 yaql===3.2.0 durationpy===0.11 -requestsexceptions===1.4.0 testresources===2.1.2 falcon===4.4.0 tomlkit===0.15.1 From 969fdaa0f7bc80ed569210a2abff31bfe51e39f4 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 14 Oct 2026 18:55:12 +0900 Subject: [PATCH 07/12] Stop requirements sync for ironic-inspector The project was deprecated and discontinued, in favor of built-in inspection functionality in cinder. Also stop sync for python-ironic-inspector-client due to the same reason. Change-Id: I814e6e146073ff5c601a80a7b9eb0bae2f3cd1d3 Signed-off-by: Takashi Kajinami --- projects.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/projects.txt b/projects.txt index c01307ca2..ad4c085a4 100644 --- a/projects.txt +++ b/projects.txt @@ -39,7 +39,6 @@ openstack/heat-translator openstack/horizon openstack/i18n openstack/ironic -openstack/ironic-inspector openstack/ironic-python-agent openstack/ironic-tempest-plugin openstack/ironic-ui @@ -173,7 +172,6 @@ openstack/python-designateclient openstack/python-freezerclient openstack/python-glanceclient openstack/python-heatclient -openstack/python-ironic-inspector-client openstack/python-ironicclient openstack/python-keystoneclient openstack/python-magnumclient From d4ae85f6672ad75a64b388c225adcfe139ce5136 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Fri, 16 Oct 2026 02:29:55 +0900 Subject: [PATCH 08/12] Revert "Pin boto3 and botocore to 1.35.99" This reverts commit 756a1a94446d58ba06c907c1ec578182d0be8943. Reason for revert: glance_store already introduced the options to avoid immediate problem caused by this bump. Depends-on: https://review.opendev.org/c/openstack/glance_store/+/959201 Change-Id: I52e0fb80560e37fb2012011a7fd3c56403d07346 Signed-off-by: Takashi Kajinami --- global-requirements.txt | 7 ++----- upper-constraints.txt | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index 3d22f1c30..db22f6edd 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -24,11 +24,8 @@ bcrypt # Apache-2.0 beautifulsoup4 # MIT betamax # Apache-2.0 boto # MIT -# Capped until https://bugs.launchpad.net/glance/+bug/2121144 is resolved -boto3<1.36 # Apache-2.0 -botocore<1.36 # Apache-2.0 -# indirect from boto3/botocore -s3transfer<0.11 # Apache-2.0 +boto3 # Apache-2.0 +botocore # Apache-2.0 cachetools # MIT License cassandra-driver!=3.6.0 # Apache-2.0 cffi # MIT diff --git a/upper-constraints.txt b/upper-constraints.txt index 58fc49204..354836fac 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -320,7 +320,7 @@ retrying===1.4.2 python-discovery===1.6.2 platformdirs===4.12.4 pydotplus===2.0.2 -boto3===1.35.99 +boto3===1.40.1 jeepney===0.9.0 stestr===4.2.1 pillow===12.3.0 @@ -331,7 +331,7 @@ exabgp===5.0.13 aiomysql===0.3.2 sphinxcontrib-httpdomain===2.1.0 metalsmith===2.5.0 -s3transfer===0.10.4 +s3transfer===0.13.1 text-unidecode===1.3 sphinxcontrib-svg2pdfconverter===2.1.0 oslo.vmware===4.10.1 @@ -436,7 +436,7 @@ oslo.upgradecheck===2.8.0 sherlock===0.4.1 tempora===5.13.0 stevedore===5.9.1 -botocore===1.35.99 +botocore===1.40.1 xmltodict===1.0.4 pyasn1===0.6.4 oslo.rootwrap===7.10.0 From a5f0bc483808b1df58e1b0109933b41107818680 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sun, 17 May 2026 00:28:33 +0900 Subject: [PATCH 09/12] Fix runtime dependencies classified as test dependencies Some of the libraries listed in the test requirements are actually required at runtime. Change-Id: If0579b87eed1b4b0d8522b09281715dcf8ecb83b Signed-off-by: Takashi Kajinami --- global-requirements.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index 3d22f1c30..6efca0376 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -92,6 +92,7 @@ jsonschema # MIT kazoo # Apache-2.0 kombu!=4.0.2 # BSD kubernetes # Apache-2.0 +ldappool # MPL libsass # MIT libvirt-python!=4.1.0,!=4.2.0 # LGPLv2+ lxml!=3.7.0 # BSD @@ -109,6 +110,7 @@ opentelemetry-exporter-otlp-proto-grpc # Apache-2.0 opentelemetry-exporter-otlp-proto-http # Apache-2.0 opentelemetry-sdk # Apache-2.0 ovs # Apache-2.0 +ovsdbapp # Apache-2.0 packaging!=20.5,!=20.6,!=20.7 # Apache-2.0 paramiko!=2.9.0,!=2.9.1 # LGPLv2.1+ passlib # BSD @@ -123,6 +125,7 @@ PrettyTable!=3.4.0 # BSD prometheus-client # Apache-2.0 protobuf # BSD License (3 clause) psutil # BSD +psycopg2 # LGPL/ZPL pyasn1!=0.2.3 # BSD pyasn1-modules # BSD pycadf!=2.0.0 # Apache-2.0 @@ -149,10 +152,13 @@ pytz # MIT pyudev # LGPLv2.1+ PyYAML # MIT pyzabbix # LGPL +pyzmq # LGPL+BSD qrcode # BSD rbd-iscsi-client # Apache-2.0 +redis!=4.0.0 # MIT requests!=2.20.0,!=2.24.0 # Apache-2.0 requests-kerberos # ISC +retrying!=1.3.0 # Apache-2.0 rfc3986 # Apache-2.0 Routes # MIT rtslib-fb # Apache-2.0 @@ -166,17 +172,24 @@ SQLAlchemy # MIT sshtunnel # MIT statsd # MIT suds-community # LGPLv3+ +sushy!=1.9.0 # Apache-2.0 sympy # BSD systemd-python # LGPLv2+ sysv-ipc # BSD License +tabulate # MIT +tenacity # Apache-2.0 uhashring # BSD urllib3 # MIT +valkey # MIT voluptuous # BSD License warlock # Apache-2.0 WebOb # MIT websocket-client # LGPLv2+ websockify # LGPLv3 +Werkzeug!=2.2.0 # BSD License +wrapt # BSD License xattr;sys_platform!='win32' # MIT +xmltodict # MIT XStatic # MIT License XStatic-Angular # MIT License XStatic-Angular-Bootstrap # MIT License @@ -229,7 +242,6 @@ freezegun # Apache-2.0 # NOTE(tkajinam): block 2.5.0 because of https://github.com/cdent/gabbi/issues/309 gabbi!=2.5.0 # Apache-2.0 keyring # MIT/PSF -ldappool # MPL # Do not make mock conditional on Python version: we depend on newer code than # in [most] releases of the Python std library. # https://github.com/testing-cabal/mock/issues/487 for 4.0.[0-1] denylist @@ -240,10 +252,8 @@ nodeenv # BSD openstack-doc-tools # Apache-2.0 os-testr # Apache-2.0 oslotest # Apache-2.0 -ovsdbapp # Apache-2.0 pifpaf # Apache-2.0 playwright # Apache-2.0 -psycopg2 # LGPL/ZPL psycopg2-binary # LGPL/ZPL pytest # MIT pytest-cov # MIT @@ -252,32 +262,22 @@ pytest-html #MPL-2.0 pytest-subtests # MIT pytest-xdist # MIT python-subunit # Apache-2.0/BSD -pyzmq # LGPL+BSD -redis!=4.0.0 # MIT requests-mock # Apache-2.0 respx # BSD-3-Clause -retrying!=1.3.0 # Apache-2.0 sadisplay # BSD selenium # Apache-2.0 stestr!=2.3.0,!=3.0.0 # Apache-2.0 -sushy!=1.9.0 # Apache-2.0 -tabulate # MIT -tenacity # Apache-2.0 testrepository # Apache-2.0/BSD testresources # Apache-2.0/BSD testscenarios # Apache-2.0/BSD testtools # MIT typing-extensions # PSF tzdata # MIT -valkey # MIT virtualbmc # Apache-2.0 virtualenv!=16.3.0 # MIT WebTest # MIT -Werkzeug!=2.2.0 # BSD License whereto # Apache-2.0 -wrapt # BSD License wsgi-intercept # MIT License -xmltodict # MIT xvfbwrapper #license: MIT ## section:docs From d601713801e3d3f5425e192ca01d268371e9527a Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 14 Oct 2026 18:48:06 +0900 Subject: [PATCH 10/12] Remove sadisplay It was used in documentation build in Octavia but the usage has been removed. The library has been inactive for 8 years and is not compatible with SQLAlchemy 2.1. Depends-on: https://review.opendev.org/c/openstack/octavia/+/1010353 Change-Id: Id1f1e6243d91e574435bd699044d59adfe0045c1 Signed-off-by: Takashi Kajinami --- global-requirements.txt | 1 - upper-constraints.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index 6efca0376..674b9c0df 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -264,7 +264,6 @@ pytest-xdist # MIT python-subunit # Apache-2.0/BSD requests-mock # Apache-2.0 respx # BSD-3-Clause -sadisplay # BSD selenium # Apache-2.0 stestr!=2.3.0,!=3.0.0 # Apache-2.0 testrepository # Apache-2.0/BSD diff --git a/upper-constraints.txt b/upper-constraints.txt index 58fc49204..69f4b1666 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -348,7 +348,6 @@ wsgi_intercept===1.13.1 jsonschema-specifications===2025.9.1 testscenarios===0.7.0 sphinxcontrib-pecanwsme===0.11.0 -sadisplay===0.4.9 enum34===1.1.10 infinisdk===289.1.4 rich-argparse===1.8.0 From f4a36ca9deeaddc7f6aac6648a7cab31edb90709 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sat, 17 Oct 2026 01:17:12 +0900 Subject: [PATCH 11/12] Remove zake zake was archived and is not comatible with recent setuptools. We removed any dependency on it. Also fix where py-consul is defined. It is now actively maintained and was added to replace python-consul[1]. [1] c18899585bc434315e34603e9bed55342ae43329 Change-Id: I26c44a49c4d22877b7c159ee1ed28be1d67dd031 Signed-off-by: Takashi Kajinami --- global-requirements.txt | 3 +-- upper-constraints.txt | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/global-requirements.txt b/global-requirements.txt index 6efca0376..d7cdff4ec 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -255,6 +255,7 @@ oslotest # Apache-2.0 pifpaf # Apache-2.0 playwright # Apache-2.0 psycopg2-binary # LGPL/ZPL +py-consul # MIT License pytest # MIT pytest-cov # MIT pytest-django # BSD (3 clause) @@ -482,8 +483,6 @@ wheel # MIT jsonpath-rw # Apache-2.0 jsonpath-rw-ext # Apache-2.0 -py-consul # MIT License python-consul2 # MIT License simplejson # MIT six # MIT -zake # Apache-2.0 diff --git a/upper-constraints.txt b/upper-constraints.txt index 58fc49204..d01d51f4d 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -408,7 +408,6 @@ oslo.config===10.7.0 openstackdocstheme===3.6.0 osc-placement===4.9.1 rpds-py===2026.9.1 -zake===0.2.2 flux===1.4.0 flexparser===0.4 krb5===0.10.0 From 928729f1f24e15b8c6da3fe382da75b267f38f66 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 14 Oct 2026 18:56:53 +0900 Subject: [PATCH 12/12] Add cursive for requirements sync cursive was migrated back to the OpenStack namespace and now is maintained between barbican and olso. Add it to the list following castellan maintained in the same way. Change-Id: Ie997f30fc174d63ee68c36497350c37df2d270e6 Signed-off-by: Takashi Kajinami --- projects.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/projects.txt b/projects.txt index c01307ca2..213db025d 100644 --- a/projects.txt +++ b/projects.txt @@ -17,6 +17,7 @@ openstack/castellan openstack/cinder openstack/cinder-tempest-plugin openstack/cliff +openstack/cursive openstack/debtcollector openstack/designate openstack/designate-dashboard