diff --git a/global-requirements.txt b/global-requirements.txt index 2a00c5736..a0913e3c8 100644 --- a/global-requirements.txt +++ b/global-requirements.txt @@ -244,6 +244,7 @@ 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 diff --git a/openstack_requirements/tests/test_check.py b/openstack_requirements/tests/test_check.py index ef34a74e9..d74b4925e 100644 --- a/openstack_requirements/tests/test_check.py +++ b/openstack_requirements/tests/test_check.py @@ -49,11 +49,11 @@ def test_extras__setup_cfg(self): test_reqs = req_list.reqs_by_file['setup.cfg (.[test] extra)'] dev_reqs = req_list.reqs_by_file['setup.cfg (.[dev] extra)'] - self.assertEqual(len(test_reqs), 2) + self.assertEqual(2, len(test_reqs)) self.assertIn('pytest', test_reqs) self.assertIn('flake8', test_reqs) - self.assertEqual(len(dev_reqs), 2) + self.assertEqual(2, len(dev_reqs)) self.assertIn('black', dev_reqs) self.assertIn('mypy', dev_reqs) diff --git a/openstack_requirements/tests/test_check_constraints.py b/openstack_requirements/tests/test_check_constraints.py index f8d8d6da1..311944a56 100644 --- a/openstack_requirements/tests/test_check_constraints.py +++ b/openstack_requirements/tests/test_check_constraints.py @@ -49,7 +49,7 @@ def setUp(self): ) def test_good_project(self, mock_project_read): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 0) + self.assertEqual(0, ret) @mock.patch( 'openstack_requirements.cmds.check_exists.read_requirements_file', @@ -85,7 +85,7 @@ def remove_req_read_reqs_file(filename): mock.patch(read_req_path, remove_req_read_reqs_file), ): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 1) + self.assertEqual(1, ret) self.assertIn(expected_out, mock_stdout.getvalue()) @mock.patch( @@ -115,7 +115,7 @@ def test_project_missing_from_gr(self): mock.patch('sys.stdout', mock_stdout), ): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 1) + self.assertEqual(1, ret) self.assertIn(expected_out, mock_stdout.getvalue()) @mock.patch( @@ -167,7 +167,7 @@ def remove_req_read_reqs_file(filename): mock.patch(read_req_path, remove_req_read_reqs_file), ): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 1) + self.assertEqual(1, ret) for expected in expected_outs: self.assertIn(expected, mock_stdout.getvalue()) @@ -195,7 +195,7 @@ def test_project_req_bigger_then_uc(self): mock.patch('sys.stdout', mock_stdout), ): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 1) + self.assertEqual(1, ret) self.assertIn(expected_out, mock_stdout.getvalue()) @mock.patch( @@ -224,5 +224,5 @@ def test_project_req_not_include_uc_version(self): mock.patch('sys.stdout', mock_stdout), ): ret = check_exists.main([common.project_fixture.root]) - self.assertEqual(ret, 1) + self.assertEqual(1, ret) self.assertIn(expected_out, mock_stdout.getvalue()) diff --git a/openstack_requirements/tests/test_project.py b/openstack_requirements/tests/test_project.py index d61831bdd..a90146d66 100644 --- a/openstack_requirements/tests/test_project.py +++ b/openstack_requirements/tests/test_project.py @@ -28,31 +28,31 @@ class TestReadProject(testtools.TestCase): def test_pyproject_toml(self): root = self.useFixture(common.pep_518_fixture).root proj = project.read(root) - self.assertEqual(proj['root'], root) + self.assertEqual(root, proj['root']) self.assertEqual( - list(sorted(proj['requirements'])), ['pyproject.toml'], + list(sorted(proj['requirements'])), ) def test_setup_cfg(self): root = self.useFixture(common.pbr_fixture).root proj = project.read(root) - self.assertEqual(proj['root'], root) + self.assertEqual(root, proj['root']) self.assertEqual( - list(sorted(proj['requirements'])), ['requirements.txt', 'test-requirements.txt'], + list(sorted(proj['requirements'])), ) def test_empty(self): root = self.useFixture(fixtures.TempDir()).path proj = project.read(root) self.assertEqual( - proj, { 'root': root, 'requirements': {}, 'extras': {}, }, + proj, ) @@ -75,6 +75,19 @@ def test_pyproject_toml(self): expected = {'1': ['foo'], '2': ['foo', 'bar']} self.assertEqual(expected, project._read_pyproject_toml_extras(root)) + def test_pyproject_toml__no_extras(self): + root = self.useFixture(fixtures.TempDir()).path + with open(os.path.join(root, 'pyproject.toml'), 'w') as fh: + fh.write( + textwrap.dedent(""" + """) + ) + self.assertIsNone(project._read_pyproject_toml_extras(root)) + + def test_no_pyproject_toml(self): + root = self.useFixture(fixtures.TempDir()).path + self.assertIsNone(project._read_pyproject_toml_extras(root)) + def test_setup_cfg(self): root = self.useFixture(fixtures.TempDir()).path with open(os.path.join(root, 'setup.cfg'), 'w') as fh: @@ -91,7 +104,7 @@ def test_setup_cfg(self): expected = {'1': ['foo'], '2': ['foo # fred', 'bar']} self.assertEqual(expected, project._read_setup_cfg_extras(root)) - def test_none(self): + def test_setup_cfg__no_extras(self): root = self.useFixture(fixtures.TempDir()).path with open(os.path.join(root, 'setup.cfg'), 'w') as fh: fh.write( diff --git a/upper-constraints.txt b/upper-constraints.txt index d3e7a54ce..3ad73d84c 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -20,7 +20,7 @@ tzdata===2026.2 smmap===5.0.3 confget===5.1.2 XStatic-Angular-Bootstrap===2.5.0.1 -WebOb===1.8.9 +WebOb===1.8.10 sphinxcontrib-actdiag===3.0.0 pecan===1.8.0 os-api-ref===3.2.0 @@ -58,7 +58,7 @@ python-mistralclient===6.2.0 oslo.context===6.4.0 rcssmin===1.2.2 pycadf===4.0.1 -grpcio===1.80.0 +grpcio===1.81.0 sniffio===1.3.1 fixtures===4.3.2 neutron-lib===4.0.0 @@ -69,7 +69,7 @@ storage-interfaces===1.0.5 pydantic===2.13.4 pystache===0.6.8 XStatic-Font-Awesome===6.2.1.2 -aiohttp===3.13.5 +aiohttp===3.14.0 waitress===3.0.2 os-refresh-config===14.0.1 pysnmp===7.1.27 @@ -82,7 +82,7 @@ ddt===1.7.2 pyserial===3.5 moto===5.2.1 infi.dtypes.wwn===0.1.1 -awscrt===0.33.0 +awscrt===0.34.1 pcre2===0.6.0 python-freezerclient===6.3.0 python-vitrageclient===5.4.0 @@ -94,7 +94,7 @@ cheroot===11.1.2 XStatic-Angular===1.8.2.3 zuul-sphinx===0.8.1 ply===3.11 -google-api-core===2.30.3 +google-api-core===2.31.0 requests-toolbelt===1.0.0 simplejson===4.1.1 python-swiftclient===4.10.0 @@ -113,6 +113,7 @@ prometheus_client===0.25.0 jaraco.classes===3.4.0 debtcollector===3.1.0 responses===0.26.1 +prompt_toolkit===3.0.52 croniter===6.2.2 horizon===25.7.3 octavia-lib===3.11.0 @@ -121,7 +122,7 @@ MarkupSafe===3.0.3 doc8===2.0.0 pymongo===4.17.0 python-cloudkittyclient===6.1.0 -soupsieve===2.8.3 +soupsieve===2.8.4 sqlparse===0.5.5 oslotest===6.1.1 jsonpointer===3.1.1 @@ -132,7 +133,7 @@ pyghmi===1.6.16 sphinxcontrib-blockdiag===3.0.0 aiosqlite===0.22.1 gnocchiclient===7.2.0 -wcwidth===0.7.0 +wcwidth===0.8.0 sphinxcontrib.datatemplates===0.11.0 jsonpath-rw===1.4.0 prettytable===3.17.0 @@ -144,7 +145,7 @@ semantic-version===2.10.0 ConfigArgParse===1.7.5 async-timeout===5.0.1 virtualbmc===3.3.0 -SQLAlchemy===2.0.49 +SQLAlchemy===2.0.50 pyroute2===0.8.1 google-auth===2.53.0 kazoo===2.11.0 @@ -190,7 +191,7 @@ gunicorn===26.0.0 storpool===7.3.0 textfsm===2.1.0 python-3parclient===4.4 -libvirt-python===12.3.0 +libvirt-python===12.4.0 python-zunclient===5.4.0 tzlocal===5.3.1 sysv_ipc===1.2.0 @@ -212,7 +213,7 @@ XStatic-objectpath===1.2.1.1 python-manilaclient===6.1.0 sphinxcontrib-serializinghtml===2.0.0 requests===2.34.2 -snowballstemmer===3.0.1 +snowballstemmer===3.1.1 Jinja2===3.1.6 XStatic-Bootstrap-SCSS===3.4.1.1 pyzabbix===1.3.1 @@ -246,7 +247,7 @@ ldappool===3.0.0 hpack===4.1.0 joblib===1.5.3 roman-numerals===4.1.0 -google-api-python-client===2.196.0 +google-api-python-client===2.197.0 castellan===5.7.0 oslo.versionedobjects===3.10.2 enmerkar===0.7.1 @@ -256,7 +257,8 @@ autobahn===25.12.2 SQLAlchemy-Utils===0.42.1 retryz===0.1.9 pluggy===1.6.0 -coverage===7.14.0 +coverage===7.14.1 +pyee===13.0.1 freezegun===1.5.5 mdurl===0.1.2 toml===0.10.2 @@ -295,10 +297,11 @@ dfs_sdk===1.2.27 sphinxcontrib-seqdiag===3.0.0 os-win===5.9.0 capacity===1.3.14 +playwright===1.60.0 markdown-it-py===4.2.0 retrying===1.4.2 -python-discovery===1.3.1 -platformdirs===4.9.6 +python-discovery===1.4.0 +platformdirs===4.10.0 pydotplus===2.0.2 boto3===1.35.99 jeepney===0.9.0 @@ -336,7 +339,7 @@ packaging===26.2 opentelemetry-exporter-otlp-proto-grpc===1.42.1 psutil===7.2.2 txaio===25.12.2 -elasticsearch===9.4.0 +elasticsearch===9.4.1 asgiref===3.11.1 XStatic-JQuery.TableSorter===2.14.5.3 pifpaf===3.4.0 @@ -357,7 +360,7 @@ SecretStorage===3.5.0 XStatic-Rickshaw===1.5.1.3 iso8601===2.1.0 tooz===8.1.0 -idna===3.16 +idna===3.18 yamlloader===1.6.0 protobuf===6.33.6 sushy===5.11.0 @@ -371,7 +374,7 @@ python-octaviaclient===3.14.0 pysaml2===7.5.4 requests-oauthlib===2.0.0 oslo.reports===3.8.0 -bitmath===2.0.1 +bitmath===2.1.1 ceilometermiddleware===3.11.0 testrepository===0.0.22 sympy===1.14.0 @@ -387,14 +390,14 @@ Sphinx===9.0.4 oslo.config===10.4.0 openstackdocstheme===3.6.0 osc-placement===4.8.0 -rpds-py===0.30.0 +rpds-py===2026.5.1 zake===0.2.2 flux===1.4.0 flexparser===0.4 krb5===0.9.0 PyMySQL===1.2.0 uhashring===2.4 -kubernetes===36.0.0 +kubernetes===36.0.2 httplib2===0.31.2 betamax===0.9.0 construct===2.10.70 @@ -402,11 +405,11 @@ pytest-metadata===3.1.1 pyparsing===3.3.2 geomet===1.1.0 opentelemetry-exporter-otlp-proto-common===1.42.1 -distlib===0.4.0 +distlib===0.4.1 ast_serialize===0.5.0 dogpile.cache===1.5.0 python-barbicanclient===7.4.0 -salt===3007.14 +salt===3008.0 opentelemetry-semantic-conventions===0.63b1 blinker===1.9.0 WSME===0.12.1 @@ -417,14 +420,14 @@ botocore===1.35.99 xmltodict===1.0.4 pyasn1===0.6.3 oslo.rootwrap===7.9.0 -Django===5.2.14 +Django===5.2.15 pexpect===4.9.0 -elastic-transport===9.4.0 -cmd2===3.5.1 +elastic-transport===9.4.1 +cmd2===4.0.0 python-json-logger===4.1.0 -redis===7.4.0 +redis===8.0.0 jmespath===1.1.0 -cbor2===6.1.1 +cbor2===6.1.2 click===8.4.1 XStatic-smart-table===1.4.13.3 kuryr-lib===3.4.1 @@ -439,7 +442,7 @@ openstacksdk===4.14.0 infi.dtypes.nqn===0.1.0 six===1.17.0 h2===4.3.0 -dulwich===1.2.4 +dulwich===1.2.6 sentinels===1.1.1 kombu===5.6.2 distro===1.9.0 @@ -535,8 +538,9 @@ greenlet===3.5.1 XStatic-Angular-Vis===4.16.0.1 iniconfig===2.3.0 referencing===0.37.0 -confluent-kafka===2.14.0 +confluent-kafka===2.14.2 backports.tarfile===1.2.0 +narwhals===2.22.1 xvfbwrapper===0.2.23 influxdb-client===1.50.0 tosca-parser===2.14.0 @@ -551,8 +555,8 @@ fasteners===0.20 importlib_metadata===9.0.0 sortedcontainers===2.4.0 microversion_parse===2.1.0 -python-linstor===1.27.1 -filelock===3.29.0 +python-linstor===1.28.1 +filelock===3.29.1 python-tackerclient===2.5.0 python-heatclient===5.2.0 oslo.utils===10.1.0 @@ -561,7 +565,7 @@ 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.3 +virtualenv===21.4.2 colorama===0.4.6 confetti===2.5.3 ironic-lib===7.0.0 @@ -571,4 +575,4 @@ opentelemetry-proto===1.42.1 XStatic-D3===3.5.17.1 actdiag===3.0.0 sphinxcontrib-applehelp===2.0.0 -scikit-learn===1.8.0 +scikit-learn===1.9.0