diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml index b4f7ddebe..8faaa0b0c 100644 --- a/.zuul.d/jobs.yaml +++ b/.zuul.d/jobs.yaml @@ -40,7 +40,9 @@ Run test for requirements project. Uses tox with the ``py311-check-uc`` environment. - files: ^upper-constraints.*txt$ + files: + - ^upper-constraints.*txt$ + - ^tox.ini vars: tox_envlist: py311-check-uc - job: @@ -50,7 +52,9 @@ Run test for requirements project. Uses tox with the ``py312-check-uc`` environment. - files: ^upper-constraints.*txt$ + files: + - ^upper-constraints.*txt$ + - ^tox.ini vars: tox_envlist: py312-check-uc - job: @@ -60,7 +64,9 @@ Run test for requirements project. Uses tox with the ``py313-check-uc`` environment. - files: ^upper-constraints.*txt$ + files: + - ^upper-constraints.*txt$ + - ^tox.ini vars: tox_envlist: py313-check-uc diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml index 36283f22f..c49856cff 100644 --- a/.zuul.d/project.yaml +++ b/.zuul.d/project.yaml @@ -14,7 +14,6 @@ - requirements-tox-babel - requirements-tox-bindep: voting: false - - requirements-tox-py310-check-uc - requirements-tox-py311-check-uc - requirements-tox-py312-check-uc - requirements-tox-py313-check-uc @@ -74,7 +73,6 @@ - openstack-tox-validate - requirements-check-self - requirements-tox-babel - - requirements-tox-py310-check-uc - requirements-tox-py311-check-uc - requirements-tox-py312-check-uc - requirements-tox-py313-check-uc diff --git a/denylist.txt b/denylist.txt index 247cb099f..e66e3481e 100644 --- a/denylist.txt +++ b/denylist.txt @@ -10,6 +10,7 @@ flake8-import-order flake8-logging-format hacking isort +librt mccabe mypy pep257 diff --git a/global-requirements.txt b/global-requirements.txt index ff11c4157..2a00c5736 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -46,7 +46,7 @@ defusedxml # PSF django-compressor # MIT django-debreach # BSD django-formtools # BSD -Django<4.3 # BSD +Django<6 # BSD # eventlet is not compatibile with 2.0.0: https://github.com/eventlet/eventlet/issues/619 dnspython!=2.0.0,!=2.2.0 # http://www.dnspython.org/LICENSE dogpile.cache!=0.9.1,!=1.1.7 # BSD @@ -225,7 +225,6 @@ bashate # Apache-2.0 beartype # MIT coverage!=4.4 # Apache-2.0 ddt # MIT -django-nose # BSD docker # Apache-2.0 fixtures # Apache-2.0/BSD freezegun # Apache-2.0 @@ -240,7 +239,6 @@ mock!=4.0.0,!=4.0.1 # BSD moto # Apache-2.0 mypy # MIT nodeenv # BSD -nose # LGPL openstack-doc-tools # Apache-2.0 os-testr # Apache-2.0 oslotest # Apache-2.0 diff --git a/pyproject.toml b/pyproject.toml index 13374bbe9..d9feeda36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ authors = [ readme = {file = "README.rst", content-type = "text/x-rst"} license = {text = "Apache-2.0"} dynamic = ["version", "dependencies"] -requires-python = ">=3.9" +requires-python = ">=3.11" classifiers = [ "Environment :: OpenStack", "Intended Audience :: Developers", @@ -19,8 +19,6 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", diff --git a/tox.ini b/tox.ini index de65927e0..8e8081098 100644 --- a/tox.ini +++ b/tox.ini @@ -11,12 +11,7 @@ deps = commands = stestr run {posargs} -[testenv:py310-check-uc] -basepython = python3.10 -skip_install = true -# For now we need something due to an issue in the tox_install_sibling_packages -# AnseibleModule -deps = setuptools +[check-uc] commands = python -m pip install --dry-run -r{toxinidir}/upper-constraints.txt [testenv:py311-check-uc] @@ -25,7 +20,7 @@ skip_install = true # For now we need something due to an issue in the tox_install_sibling_packages # AnseibleModule deps = setuptools -commands = {[testenv:py310-check-uc]commands} +commands = {[check-uc]commands} [testenv:py312-check-uc] basepython = python3.12 @@ -33,7 +28,7 @@ skip_install = true # For now we need something due to an issue in the tox_install_sibling_packages # AnseibleModule deps = setuptools -commands = {[testenv:py310-check-uc]commands} +commands = {[check-uc]commands} [testenv:py313-check-uc] basepython = python3.13 @@ -41,7 +36,7 @@ skip_install = true # For now we need something due to an issue in the tox_install_sibling_packages # AnseibleModule deps = setuptools -commands = {[testenv:py310-check-uc]commands} +commands = {[check-uc]commands} [testenv:venv] commands = {posargs} @@ -54,7 +49,7 @@ description = Regenerates upper-constraints.txt deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt -commands = generate-constraints {posargs: -d denylist.txt -r global-requirements.txt -p python3.9 -p python3.10 -p python3.11 -p python3.12 -p python3.13 > upper-constraints.txt} +commands = generate-constraints {posargs: -d denylist.txt -r global-requirements.txt -p python3.11 -p python3.12 -p python3.13 > upper-constraints.txt} [testenv:validate] allowlist_externals = diff --git a/upper-constraints.txt b/upper-constraints.txt index e80ed467b..bb2c0698a 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -6,14 +6,14 @@ # *STRONGLY* encouraged to rely on curated distributions of OpenStack # or manage security patching of dependencies themselves. voluptuous===0.16.0 -chardet===5.2.0 +chardet===6.0.0.post1 enum-compat===0.0.3 netmiko===4.6.0 sshtunnel===0.4.0 PasteDeploy===3.1.0 Routes===2.5.1 rtslib-fb===2.2.4 -oslo.limit===2.10.0 +oslo.limit===2.11.0 restructuredtext_lint===2.0.2 tzdata===2026.2 smmap===5.0.3 @@ -24,7 +24,7 @@ sphinxcontrib-actdiag===3.0.0 pecan===1.8.0 os-api-ref===3.2.0 python-ldap===3.4.5 -oslo.concurrency===7.4.1 +oslo.concurrency===7.5.0 websocket-client===1.9.0 osprofiler===4.4.0 os-resource-classes===1.1.0 @@ -38,7 +38,7 @@ setproctitle===1.3.7 pytest===9.0.3 python-slugify===8.0.4 cursive===0.2.3 -oslo.service===4.5.1 +oslo.service===4.6.0 django-appconf===1.2.0 ntc_templates===9.1.0 sphinxcontrib-nwdiag===2.0.0 @@ -49,25 +49,24 @@ munch===4.0.0 waiting===1.5.0 attrs===26.1.0 jwcrypto===1.5.7 -Pint===0.24.4 -oslo.i18n===6.7.2 +Pint===0.25.3 +oslo.i18n===6.8.0 jsonpath-rw-ext===1.2.2 python-mistralclient===6.2.0 -oslo.context===6.3.0 +oslo.context===6.4.0 rcssmin===1.2.2 pycadf===4.0.1 grpcio===1.80.0 sniffio===1.3.1 fixtures===4.3.2 -neutron-lib===3.25.0 +neutron-lib===4.0.0 XStatic-FileSaver===1.3.2.1 jaraco.functools===4.4.0 -oslo.metrics===0.15.1 +oslo.metrics===0.16.0 storage-interfaces===1.0.5 -pydantic===2.13.3 +pydantic===2.13.4 pystache===0.6.8 XStatic-Font-Awesome===6.2.1.2 -nose===1.3.7 waitress===3.0.2 os-refresh-config===14.0.1 pysnmp===7.1.26 @@ -75,18 +74,19 @@ Mako===1.3.12 sphinxcontrib-htmlhelp===2.1.0 XStatic-jQuery===3.7.1.1 sphinx-copybutton===0.5.2 +beartype===0.22.9 ddt===1.7.2 pyserial===3.5 -moto===5.1.22 +moto===5.2.1 infi.dtypes.wwn===0.1.1 awscrt===0.32.2 pcre2===0.6.0 -python-freezerclient===6.2.0 +python-freezerclient===6.3.0 python-vitrageclient===5.4.0 -py-pure-client===1.87.0 +py-pure-client===1.88.0 krest===1.3.8 psycopg2===2.9.12 -networkx===3.4.2 +networkx===3.6.1 cheroot===11.1.2 XStatic-Angular===1.8.2.3 zuul-sphinx===0.8.1 @@ -100,17 +100,16 @@ typing-inspection===0.4.2 monasca-common===3.8.0 hyperframe===6.1.0 zeroconf===0.148.0 -scipy===1.15.3 +scipy===1.17.1 opentelemetry-exporter-otlp===1.41.1 rsd-lib===1.2.0 XStatic-Jasmine===2.4.1.3 -googleapis-common-protos===1.74.0 -python-glanceclient===4.11.0 +googleapis-common-protos===1.75.0 +python-glanceclient===4.12.0 prometheus_client===0.25.0 jaraco.classes===3.4.0 debtcollector===3.1.0 responses===0.26.0 -backports.strenum===1.3.1;python_version=='3.10' croniter===6.2.2 horizon===25.7.3 octavia-lib===3.11.0 @@ -130,13 +129,13 @@ pyghmi===1.6.16 sphinxcontrib-blockdiag===3.0.0 aiosqlite===0.22.1 gnocchiclient===7.2.0 -wcwidth===0.6.0 +wcwidth===0.7.0 sphinxcontrib.datatemplates===0.11.0 jsonpath-rw===1.4.0 prettytable===3.17.0 vine===5.1.0 pathspec===1.1.1 -taskflow===6.2.0 +taskflow===6.3.0 arrow===1.4.0 semantic-version===2.10.0 ConfigArgParse===1.7.5 @@ -144,7 +143,7 @@ async-timeout===5.0.1 virtualbmc===3.3.0 SQLAlchemy===2.0.49 pyroute2===0.8.1 -google-auth===2.50.0 +google-auth===2.52.0 kazoo===2.11.0 pyspnego===0.12.1 trio-websocket===0.12.2 @@ -152,25 +151,25 @@ XStatic-roboto-fontface===0.8.0.1 pyudev===0.24.4 eventlet===0.41.0 openstack-doc-tools===4.0.3 -oslo.messaging===17.3.0 +oslo.messaging===18.1.0 jira===3.10.5 PyJWT===2.12.1 typing_extensions===4.15.0 zVMCloudConnector===1.6.3 -paramiko===4.0.0 +paramiko===5.0.0 ifaddr===0.2.0 reno===4.1.0 ncclient===0.7.1 imagesize===2.0.0 pydot===4.0.1 -urllib3===2.6.3 +urllib3===2.7.0 graphviz===0.21 PyKMIP===0.10.0 python-observabilityclient===1.3.0 whereto===0.6.0 networking-generic-switch===9.1.0 pywbem===1.9.0 -python-subunit===1.4.5 +python-subunit===1.4.6 pycparser===3.0 mock===5.2.0 PyYAML===6.0.3 @@ -184,7 +183,7 @@ glance_store===5.4.0 openstack-release-test===8.4.0 requests-mock===1.12.1 os-apply-config===14.0.1 -gunicorn===25.3.0 +gunicorn===26.0.0 storpool===7.3.0 textfsm===2.1.0 python-3parclient===4.4 @@ -194,20 +193,20 @@ tzlocal===5.3.1 sysv_ipc===1.2.0 sphinxcontrib-jsmath===1.0.1 django_compressor===4.6.0 -awscurl===0.39 +awscurl===0.42 trio===0.33.0 -python-novaclient===18.12.0 +python-novaclient===18.13.0 pact===1.12.0 bcrypt===5.0.0 -exceptiongroup===1.3.1 os-client-config===2.3.0 XStatic-Angular-Gettext===2.4.1.1 Deprecated===1.3.1 h11===0.16.0 Pygments===2.20.0 XStatic-Hogan===2.0.0.5 +api_object_schema===2.0.0 XStatic-objectpath===1.2.1.1 -python-manilaclient===6.0.0 +python-manilaclient===6.1.0 sphinxcontrib-serializinghtml===2.0.0 requests===2.33.1 snowballstemmer===3.0.1 @@ -229,31 +228,32 @@ 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.3.1 +google-auth-httplib2===0.4.0 daiquiri===3.4.0 influxdb===5.3.2 funcparserlib===2.0.0a0 passlib===1.7.4 -cliff===4.13.3 -os-brick===7.0.0 +cliff===4.14.0 +os-brick===7.1.0 valkey===6.1.1 scp===0.15.0 lark===1.3.1 -python-zaqarclient===4.4.0 +python-zaqarclient===4.5.0 ldappool===3.0.0 hpack===4.1.0 joblib===1.5.3 -google-api-python-client===2.195.0 -castellan===5.6.0 +roman-numerals===4.1.0 +google-api-python-client===2.196.0 +castellan===5.7.0 oslo.versionedobjects===3.10.2 enmerkar===0.7.1 webcolors===25.10.0 -aodhclient===3.10.1 -autobahn===24.4.2 +aodhclient===3.11.0 +autobahn===25.12.2 SQLAlchemy-Utils===0.42.1 retryz===0.1.9 pluggy===1.6.0 -coverage===7.13.5 +coverage===7.14.0 freezegun===1.5.5 mdurl===0.1.2 toml===0.10.2 @@ -269,31 +269,32 @@ annotated-types===0.7.0 pytest-xdist===3.8.0 XStatic-JS-Yaml===3.13.1.2 XStatic-term.js===0.0.7.1 -oslo.log===8.1.0 +oslo.log===8.2.0 nodeenv===1.10.0 gossip===2.5.0 suds-community===1.2.0 os_vif===4.3.0 qrcode===8.2 -oslo.middleware===8.0.0 +oslo.middleware===8.1.0 XStatic-mdi===1.6.50.3 -pydantic_core===2.46.3 +pydantic_core===2.46.4 uritemplate===4.2.0 docutils===0.21.2 threadpoolctl===3.6.0 os-ken===4.2.0 -ujson===5.12.0 +ujson===5.12.1 selenium===4.43.0 pytest-subtests===0.15.0 mistral-lib===3.5.1 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 -markdown-it-py===4.0.0 +markdown-it-py===4.2.0 retrying===1.4.2 -python-discovery===1.2.2 +python-discovery===1.3.0 platformdirs===4.9.6 pydotplus===2.0.2 boto3===1.35.99 @@ -301,7 +302,7 @@ jeepney===0.9.0 stestr===4.2.1 pillow===12.2.0 infoblox-client===0.6.2 -oslo.serialization===5.9.1 +oslo.serialization===5.10.0 warlock===2.1.0 exabgp===5.0.9 aiomysql===0.3.2 @@ -330,9 +331,8 @@ rich-argparse===1.8.0 packaging===26.2 opentelemetry-exporter-otlp-proto-grpc===1.41.1 psutil===7.2.2 -txaio===25.9.2 -elasticsearch===9.3.0 -django-nose===1.4.7 +txaio===25.12.2 +elasticsearch===9.4.0 asgiref===3.11.1 XStatic-JQuery.TableSorter===2.14.5.3 pifpaf===3.4.0 @@ -343,34 +343,33 @@ jsonpath-ng===1.8.0 XStatic-tv4===1.2.7.1 XStatic-JSEncrypt===2.3.1.2 python-cinderclient===9.9.0 -keystonemiddleware===12.0.0 +keystonemiddleware===13.0.0 django-formtools===2.5.1 XStatic-Spin===1.2.5.3 rich===15.0.0 os-traits===3.6.0 -typepy===1.3.4 +typepy===1.3.5 SecretStorage===3.5.0 XStatic-Rickshaw===1.5.1.3 iso8601===2.1.0 tooz===8.1.0 -idna===3.13 +idna===3.14 yamlloader===1.6.0 protobuf===6.33.6 sushy===5.11.0 -python-neutronclient===11.8.0 -pika===1.3.2 +python-neutronclient===12.0.0 +pika===1.4.0 oslo.cache===4.1.1 WebTest===3.0.7 os-collect-config===14.0.1 -edgegrid-python===2.0.5 -python-octaviaclient===3.13.0 +edgegrid-python===2.0.6 +python-octaviaclient===3.14.0 pysaml2===7.5.4 requests-oauthlib===2.0.0 oslo.reports===3.8.0 bitmath===2.0.1 -ceilometermiddleware===3.10.0 +ceilometermiddleware===3.11.0 testrepository===0.0.22 -librt===0.9.0 sympy===1.14.0 Logbook===1.9.2 PyNaCl===1.6.2 @@ -378,10 +377,10 @@ osc-lib===4.6.0 python-consul===1.1.0 more-itertools===11.0.2 seqdiag===3.0.0 -numpy===2.2.6 +numpy===2.4.4 msgpack===1.1.2 -Sphinx===8.1.3 -oslo.config===10.3.0 +Sphinx===9.0.4 +oslo.config===10.4.0 openstackdocstheme===3.6.0 osc-placement===4.8.0 rpds-py===0.30.0 @@ -400,28 +399,28 @@ pyparsing===3.3.2 geomet===1.1.0 opentelemetry-exporter-otlp-proto-common===1.41.1 distlib===0.4.0 +ast_serialize===0.3.0 dogpile.cache===1.5.0 -python-barbicanclient===7.3.0 +python-barbicanclient===7.4.0 salt===3007.14 opentelemetry-semantic-conventions===0.62b1 -api-object-schema===2.0.0 blinker===1.9.0 WSME===0.12.1 -tomli===2.4.1 oslo.upgradecheck===2.7.1 sherlock===0.4.1 -stevedore===5.7.0 +stevedore===5.8.0 botocore===1.35.99 xmltodict===1.0.4 pyasn1===0.6.3 oslo.rootwrap===7.9.0 -Django===4.2.30 +Django===5.2.14 pexpect===4.9.0 -elastic-transport===9.2.1 +elastic-transport===9.4.0 cmd2===3.5.1 python-json-logger===4.1.0 redis===7.4.0 jmespath===1.1.0 +cbor2===6.0.1 click===8.3.3 XStatic-smart-table===1.4.13.3 kuryr-lib===3.4.1 @@ -432,12 +431,11 @@ cotyledon===2.2.0 xattr===1.3.0 systemd-python===235 python-memcached===1.62 -openstacksdk===4.12.0 +openstacksdk===4.13.0 infi.dtypes.nqn===0.1.0 six===1.17.0 h2===4.3.0 dulwich===1.2.1 -dfs-sdk===1.2.27 sentinels===1.1.1 kombu===5.6.2 distro===1.9.0 @@ -447,27 +445,27 @@ durationpy===0.10 requestsexceptions===1.4.0 testresources===2.1.2 falcon===4.2.0 -tomlkit===0.14.0 +tomlkit===0.15.0 etcd3gw===2.6.0 Flask-RESTful===0.3.10 -GitPython===3.1.49 -python-ironicclient===6.0.0 +GitPython===3.1.50 +python-ironicclient===6.1.0 babel===2.18.0 XStatic===1.0.3 XStatic-Angular-FileUpload===12.2.13.2 -python-openstackclient===9.0.0 +python-openstackclient===10.0.0 pyzmq===27.1.0 oslo.db===18.0.0 simplegeneric===0.8.1 yappi===1.7.6 -mbstrdecoder===1.1.4 +mbstrdecoder===1.1.5 wsproto===1.3.2 pymemcache===4.0.0 wrapt===2.1.2 PySocks===1.7.1 oslo.privsep===3.11.0 sphinxcontrib-apidoc===0.6.0 -oslo.policy===5.0.0 +oslo.policy===5.1.0 hvac===2.4.0 pyeclib===1.8.0 repoze.lru===0.7 @@ -492,12 +490,12 @@ python-troveclient===8.10.0 cachez===0.1.2 XStatic-Bootstrap-Datepicker===1.4.0.1 netifaces===0.11.0 -cachetools===7.1.0 +cachetools===7.1.1 flexcache===0.3 sphinxcontrib-qthelp===2.0.0 -keystoneauth1===5.13.1 +keystoneauth1===5.14.0 statsd===4.0.1 -proto-plus===1.27.2 +proto-plus===1.28.0 python-keystoneclient===5.8.0 diskimage-builder===3.41.0 heat-translator===3.4.0 @@ -514,7 +512,7 @@ configparser===7.2.0 decorator===5.2.1 DateTimeRange===2.3.2 cffi===2.0.0 -python-cyborgclient===2.7.0 +python-cyborgclient===2.8.0 futurist===3.3.0 jsonschema===4.26.0 sphinxcontrib-devhelp===2.0.0 @@ -525,6 +523,7 @@ sphinxcontrib-programoutput===0.19 storpool.spopenstack===3.2.0 dnspython===2.8.0 oauthlib===3.3.1 +py-ubjson===0.16.1 zipp===3.23.1 greenlet===3.5.0 XStatic-Angular-Vis===4.16.0.1 @@ -549,21 +548,20 @@ microversion_parse===2.1.0 python-linstor===1.27.1 filelock===3.29.0 python-tackerclient===2.5.0 -python-heatclient===5.1.0 +python-heatclient===5.2.0 oslo.utils===10.0.1 requests-kerberos===0.15.0 itsdangerous===2.2.0 XStatic-jquery-ui===1.13.0.2 monasca-statsd===2.7.0 python-dateutil===2.9.0.post0 -virtualenv===21.3.0 +virtualenv===21.3.1 colorama===0.4.6 confetti===2.5.3 ironic-lib===7.0.0 -pytz===2026.1.post1 +pytz===2026.2 opentelemetry-proto===1.41.1 XStatic-D3===3.5.17.1 actdiag===3.0.0 sphinxcontrib-applehelp===2.0.0 -scikit-learn===1.7.2 -beartype===0.22.9 +scikit-learn===1.8.0