Skip to content

Commit 7a88e93

Browse files
authored
Merge pull request #172 from stackhpc/upstream/2025.1-2026-02-23
Synchronise 2025.1 with upstream
2 parents a294fe0 + 7b62011 commit 7a88e93

12 files changed

Lines changed: 38 additions & 109 deletions

File tree

detail.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import urllib.parse as urlparse
2121
import urllib.request as urlreq
2222

23-
import pkg_resources
23+
import packaging.requirement
2424

2525
try:
2626
PYPI_LOCATION = os.environ['PYPI_LOCATION']
@@ -40,11 +40,11 @@
4040

4141

4242
def iter_names(req):
43-
for k in (req.key, req.project_name):
44-
yield k
45-
yield k.title()
46-
yield k.replace("-", "_")
47-
yield k.replace("-", "_").title()
43+
yield req.name
44+
yield req.name.lower()
45+
yield req.name.title()
46+
yield req.name.replace("-", "_")
47+
yield req.name.replace("-", "_").title()
4848

4949

5050
def release_data(req):
@@ -76,7 +76,7 @@ def main():
7676
line = line.strip()
7777
if line.startswith("#") or not line:
7878
continue
79-
req = pkg_resources.Requirement.parse(line)
79+
req = packaging.requirement.Requirement(line)
8080
print(" - processing: %s" % (req))
8181
try:
8282
raw_req_data = release_data(req)

global-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ PyMySQL # MIT License
125125
pyOpenSSL # Apache-2.0
126126
pyparsing # MIT
127127
pyroute2!=0.5.4,!=0.5.5,!=0.7.1;sys_platform!='win32' # Apache-2.0 (+ dual licensed GPL2)
128-
pysaml2!=4.0.3,!=4.0.4,!=4.0.5,!=4.0.5rc1,!=4.1.0,!=4.2.0,!=4.3.0,!=4.4.0,!=4.6.0 # Apache-2.0
128+
pysaml2!=4.0.3,!=4.0.4,!=4.0.5rc1,!=4.0.5,!=4.1.0,!=4.2.0,!=4.3.0,!=4.4.0,!=4.6.0 # Apache-2.0
129129
pysnmp-lextudio # BSD
130130
pystache # MIT
131131
# Only required for sasl/binary protocol

openstack_requirements/cmds/check_conflicts.py

Lines changed: 0 additions & 75 deletions
This file was deleted.

openstack_requirements/constraints.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
from packaging import specifiers
1414

15+
from openstack_requirements import requirement
16+
1517

1618
# FIXME(dhellmann): These items were not in the constraints list but
1719
# should not be denylisted. We don't know yet what versions they
@@ -102,7 +104,7 @@ def satisfied(reqs, name, version, failures):
102104
failures = []
103105
for pkg_constraints in constraints.values():
104106
for constraint, _ in pkg_constraints:
105-
name = constraint.package
107+
name = requirement.canonical_name(constraint.package)
106108
version = constraint.specifiers[3:]
107109
satisfied(global_reqs, name, version, failures)
108110
return failures

openstack_requirements/requirement.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
# This module has no IO at all, and none should be added.
1616

1717
import collections
18-
import distutils.version
18+
import packaging.requirements
1919
import packaging.specifiers
20-
import pkg_resources
20+
import packaging.utils
21+
import packaging.version
2122
import re
2223

2324

@@ -37,7 +38,7 @@ def key_specifier(a):
3738
'===': 1, '==': 1, '~=': 1, '!=': 1,
3839
'<': 2, '<=': 2}
3940
a = a._spec
40-
return (weight[a[0]], distutils.version.LooseVersion(a[1]))
41+
return (weight[a[0]], packaging.version.parse(a[1]))
4142

4243

4344
class Requirement(collections.namedtuple('Requirement',
@@ -81,7 +82,7 @@ def to_line(self, marker_sep=';', line_prefix='', comment_prefix=' ',
8182

8283
def canonical_name(req_name):
8384
"""Return the canonical form of req_name."""
84-
return pkg_resources.safe_name(req_name).lower()
85+
return packaging.utils.canonicalize_name(req_name)
8586

8687

8788
def parse(content, permit_urls=False):
@@ -127,7 +128,7 @@ def parse_line(req_line, permit_urls=False):
127128
hash_pos = hash_pos + parse_start
128129
else:
129130
# Trigger an early failure before we look for ':'
130-
pkg_resources.Requirement.parse(req_line)
131+
packaging.requirements.Requirement(req_line)
131132
else:
132133
parse_start = 0
133134
location = ''
@@ -149,8 +150,8 @@ def parse_line(req_line, permit_urls=False):
149150
specifier = ''
150151
elif req_line:
151152
# Pulled out a requirement
152-
parsed = pkg_resources.Requirement.parse(req_line)
153-
name = parsed.project_name
153+
parsed = packaging.requirements.Requirement(req_line)
154+
name = parsed.name
154155
extras = parsed.extras
155156
specifier = str(parsed.specifier)
156157
else:

openstack_requirements/tests/test_requirement.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def test_multiline(self):
156156
""")
157157
reqs = requirement.parse(content)
158158
self.assertEqual(
159-
set(['oslo.config', 'oslo.concurrency', 'oslo.context']),
159+
{'oslo-config', 'oslo-concurrency', 'oslo-context'},
160160
set(reqs.keys()),
161161
)
162162

@@ -168,16 +168,16 @@ def test_extras(self):
168168
""")
169169
reqs = requirement.parse(content)
170170
self.assertEqual(
171-
set(['oslo.config', 'oslo.concurrency', 'oslo.db']),
171+
{'oslo-config', 'oslo-concurrency', 'oslo-db'},
172172
set(reqs.keys()),
173173
)
174-
self.assertEqual(reqs['oslo.config'][0][0].extras, frozenset(()))
175-
self.assertEqual(reqs['oslo.concurrency'][0][0].extras,
174+
self.assertEqual(reqs['oslo-config'][0][0].extras, frozenset(()))
175+
self.assertEqual(reqs['oslo-concurrency'][0][0].extras,
176176
frozenset(('fixtures',)))
177-
self.assertEqual(reqs['oslo.db'][0][0].extras,
177+
self.assertEqual(reqs['oslo-db'][0][0].extras,
178178
frozenset(('fixtures', 'mysql')))
179179
self.assertCountEqual(reqs,
180-
['oslo.config', 'oslo.concurrency', 'oslo.db'])
180+
['oslo-config', 'oslo-concurrency', 'oslo-db'])
181181

182182

183183
class TestCanonicalName(testtools.TestCase):

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[build-system]
2+
requires = ["pbr>=6.1.1","setuptools<82"]
3+
build-backend = "pbr.build"

setup.cfg

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ packages =
3030
console_scripts =
3131
edit-constraints = openstack_requirements.cmds.edit_constraint:main
3232
generate-constraints = openstack_requirements.cmds.generate:main
33-
check-conflicts = openstack_requirements.cmds.check_conflicts:main
3433
validate-constraints = openstack_requirements.cmds.validate:main
3534
validate-projects = openstack_requirements.cmds.validate_projects:main
3635
normalize-requirements = openstack_requirements.cmds.normalize_requirements:main

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
import setuptools
1818

1919
setuptools.setup(
20-
setup_requires=['pbr>=2.0.0'],
20+
setup_requires=['pbr>=2.0.0', 'setuptools<82'],
2121
pbr=True)

tools/cap.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414

15-
1615
import argparse
1716
import re
1817

19-
import pkg_resources
18+
import packaging.requirements
2019

2120
overrides = dict()
2221
# List of overrides needed. Ignore version in pip-freeze and use the one here
@@ -38,7 +37,7 @@ def cap(requirements, frozen):
3837
output = []
3938
for line in requirements:
4039
try:
41-
req = pkg_resources.Requirement.parse(line)
40+
req = packaging.requirements.Requirement(line)
4241
specifier = str(req.specifier)
4342
if any(op in specifier for op in ['==', '~=', '<']):
4443
# if already capped, continue
@@ -67,7 +66,7 @@ def cap(requirements, frozen):
6766
def pin(line, new_cap):
6867
"""Add new cap into existing line
6968
70-
Don't use pkg_resources so we can preserve the comments.
69+
Don't use packaging.requirements so we can preserve the comments.
7170
"""
7271
end = None
7372
use_comma = False
@@ -109,7 +108,7 @@ def freeze(lines):
109108

110109
for line in lines:
111110
try:
112-
req = pkg_resources.Requirement.parse(line)
111+
req = packaging.requirements.Requirement(line)
113112
freeze[req.project_name] = req.specifier
114113
except ValueError:
115114
# not a valid requirement, can be a comment, blank line etc

0 commit comments

Comments
 (0)