Replace pkg_resources

This will be removed after 2025-11-30. Get ahead of that breakage.

Change-Id: Ib97eea1037fac541c8ebadc526ae9c3bb160f685
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane
2023-12-20 16:00:06 +00:00
parent fdff4d7149
commit 7f008f902d
6 changed files with 28 additions and 26 deletions

View File

@@ -20,7 +20,7 @@ import traceback
import urllib.parse as urlparse
import urllib.request as urlreq
import pkg_resources
import packaging.requirement
try:
PYPI_LOCATION = os.environ['PYPI_LOCATION']
@@ -40,11 +40,11 @@ KEEP_KEYS = frozenset([
def iter_names(req):
for k in (req.key, req.project_name):
yield k
yield k.title()
yield k.replace("-", "_")
yield k.replace("-", "_").title()
yield req.name
yield req.name.lower()
yield req.name.title()
yield req.name.replace("-", "_")
yield req.name.replace("-", "_").title()
def release_data(req):
@@ -76,7 +76,7 @@ def main():
line = line.strip()
if line.startswith("#") or not line:
continue
req = pkg_resources.Requirement.parse(line)
req = packaging.requirement.Requirement(line)
print(" - processing: %s" % (req))
try:
raw_req_data = release_data(req)

View File

@@ -12,6 +12,8 @@
from packaging import specifiers
from openstack_requirements import requirement
# FIXME(dhellmann): These items were not in the constraints list but
# should not be denylisted. We don't know yet what versions they
@@ -102,7 +104,7 @@ def check_compatible(global_reqs, constraints):
failures = []
for pkg_constraints in constraints.values():
for constraint, _ in pkg_constraints:
name = constraint.package
name = requirement.canonical_name(constraint.package)
version = constraint.specifiers[3:]
satisfied(global_reqs, name, version, failures)
return failures

View File

@@ -15,9 +15,10 @@
# This module has no IO at all, and none should be added.
import collections
import packaging.requirements
import packaging.specifiers
import packaging.utils
import packaging.version
import pkg_resources
import re
@@ -70,7 +71,7 @@ url_re = re.compile(
def canonical_name(req_name):
"""Return the canonical form of req_name."""
return pkg_resources.safe_name(req_name).lower()
return packaging.utils.canonicalize_name(req_name)
def parse(content, permit_urls=False):
@@ -116,7 +117,7 @@ def parse_line(req_line, permit_urls=False):
hash_pos = hash_pos + parse_start
else:
# Trigger an early failure before we look for ':'
pkg_resources.Requirement.parse(req_line)
packaging.requirements.Requirement(req_line)
else:
parse_start = 0
location = ''
@@ -138,8 +139,8 @@ def parse_line(req_line, permit_urls=False):
specifier = ''
elif req_line:
# Pulled out a requirement
parsed = pkg_resources.Requirement.parse(req_line)
name = parsed.project_name
parsed = packaging.requirements.Requirement(req_line)
name = parsed.name
extras = parsed.extras
specifier = str(parsed.specifier)
else:

View File

@@ -154,7 +154,7 @@ class TestToReqs(testtools.TestCase):
""")
reqs = requirement.parse(content)
self.assertEqual(
set(['oslo.config', 'oslo.concurrency', 'oslo.context']),
{'oslo-config', 'oslo-concurrency', 'oslo-context'},
set(reqs.keys()),
)
@@ -166,16 +166,16 @@ class TestToReqs(testtools.TestCase):
""")
reqs = requirement.parse(content)
self.assertEqual(
set(['oslo.config', 'oslo.concurrency', 'oslo.db']),
{'oslo-config', 'oslo-concurrency', 'oslo-db'},
set(reqs.keys()),
)
self.assertEqual(reqs['oslo.config'][0][0].extras, frozenset(()))
self.assertEqual(reqs['oslo.concurrency'][0][0].extras,
self.assertEqual(reqs['oslo-config'][0][0].extras, frozenset(()))
self.assertEqual(reqs['oslo-concurrency'][0][0].extras,
frozenset(('fixtures',)))
self.assertEqual(reqs['oslo.db'][0][0].extras,
self.assertEqual(reqs['oslo-db'][0][0].extras,
frozenset(('fixtures', 'mysql')))
self.assertCountEqual(reqs,
['oslo.config', 'oslo.concurrency', 'oslo.db'])
['oslo-config', 'oslo-concurrency', 'oslo-db'])
class TestCanonicalName(testtools.TestCase):

View File

@@ -12,11 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
import argparse
import re
import pkg_resources
import packaging.requirements
overrides = dict()
# List of overrides needed. Ignore version in pip-freeze and use the one here
@@ -38,7 +37,7 @@ def cap(requirements, frozen):
output = []
for line in requirements:
try:
req = pkg_resources.Requirement.parse(line)
req = packaging.requirements.Requirement(line)
specifier = str(req.specifier)
if any(op in specifier for op in ['==', '~=', '<']):
# if already capped, continue
@@ -67,7 +66,7 @@ def cap(requirements, frozen):
def pin(line, new_cap):
"""Add new cap into existing line
Don't use pkg_resources so we can preserve the comments.
Don't use packaging.requirements so we can preserve the comments.
"""
end = None
use_comma = False
@@ -109,7 +108,7 @@ def freeze(lines):
for line in lines:
try:
req = pkg_resources.Requirement.parse(line)
req = packaging.requirements.Requirement(line)
freeze[req.project_name] = req.specifier
except ValueError:
# not a valid requirement, can be a comment, blank line etc

View File

@@ -38,7 +38,7 @@ import json
import sys
import urllib.request as urlreq
import pkg_resources
import packaging.requirements
class Release(object):
@@ -62,7 +62,7 @@ def _parse_pypi_released(datestr):
def _package_name(line):
return pkg_resources.Requirement.parse(line).project_name
return packaging.requirements.Requirement(line).name
def get_requirements():