Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bb869cb
Add tempest plugins to the denylist
kpawar89 Oct 10, 2025
7f008f9
Replace pkg_resources
stephenfin Dec 20, 2023
139c872
docs: Remove cruft from conf.py file
stephenfin Sep 18, 2025
73ce453
Migrate setup configuration to pyproject.toml
stephenfin Sep 18, 2025
3e7039d
Add ruff
stephenfin Sep 18, 2025
1691dcb
Deprecate support for legacy requirement files
stephenfin Sep 18, 2025
f7ff019
Rework extras tracking
stephenfin Sep 18, 2025
3209647
Stop storing setup.cfg, setup.py
stephenfin Sep 18, 2025
9b79bc4
Add pyproject.toml support
stephenfin Sep 18, 2025
6759ad0
Updated from generate-constraints
Oct 25, 2025
ced14b8
Release cap for bcrypt
gtema May 9, 2025
b440fdb
Merge "Updated from generate-constraints"
Oct 27, 2025
ebb2c96
Add networking generic switch to requirements
alegacy Oct 14, 2025
a97a1f8
Merge "Replace pkg_resources"
Oct 27, 2025
e82feb3
Merge "docs: Remove cruft from conf.py file"
Oct 27, 2025
80c2d39
Merge "Migrate setup configuration to pyproject.toml"
Oct 27, 2025
dff1086
Merge "Add ruff"
Oct 27, 2025
f84b88d
Merge "Deprecate support for legacy requirement files"
Oct 27, 2025
a4cfa5e
Merge "Rework extras tracking"
Oct 27, 2025
b975e23
Merge "Stop storing setup.cfg, setup.py"
Oct 27, 2025
09928d2
Merge "Add pyproject.toml support"
Oct 27, 2025
daf6251
Merge "Add networking generic switch to requirements"
Oct 28, 2025
b1a9b56
Merge "Release cap for bcrypt"
Oct 28, 2025
99ad43d
Fix broken extras check
kajinamit Oct 28, 2025
b4c9e30
Fix keyname used to store extras
stephenfin Oct 28, 2025
1505061
Store pyproject.toml data as strings
stephenfin Oct 28, 2025
41dd43d
Add tests for parsing requirements
stephenfin Oct 28, 2025
cbafcca
Add awscurl
thomasgoirand Oct 27, 2025
d23b95c
Merge "Fix broken extras check"
Oct 28, 2025
dcd90bb
Merge "Fix keyname used to store extras"
Oct 28, 2025
08cb768
Merge "Store pyproject.toml data as strings"
Oct 28, 2025
6098eb1
Merge "Add tests for parsing requirements"
Oct 28, 2025
e2d30f1
update constraint for os-service-types to new release 1.8.1
Oct 30, 2025
0b54287
update constraint for pbr to new release 7.0.2
Oct 30, 2025
7fc289f
Merge "update constraint for pbr to new release 7.0.2"
Oct 31, 2025
0c02464
Merge "Add tempest plugins to the denylist"
Oct 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .zuul.d/project-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
- ^.*requirements-py[2,3].txt$
- ^doc/requirements.txt$
- ^lower-constraints.txt$
- ^pyproject.toml$

- job:
name: requirements-check-self
Expand Down
1 change: 0 additions & 1 deletion babel-test/babel-input.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

"""Test input for Babel"""


from oslo.i18n import _
from oslo.i18n import _LE
from oslo_log import log as logging
Expand Down
25 changes: 25 additions & 0 deletions denylist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,31 @@ molecule-plugins
# Once any stable branch move to 'Extended Maintenance' and we pin the
# older Tempest to test them then we can move it from here to u-c file.
tempest
barbican_tempest_plugin
blazar_tempest_plugin
cinder_tempest-plugin
cloudkitty_tempest_plugin
cyborg_tempest-plugin
designate_tempest-plugin
freezer_tempest_plugin
glance_tempest-plugin
heat_tempest-plugin
ironic_tempest-plugin
keystone_tempest_plugin
magnum_tempest_plugin
manila_tempest-plugin
mistral_tempest_tests
monasca_tempest-plugin
neutron_tempest-plugin
octavia_tempest-plugin
telemetry_tempest_plugin
trove_tempest_plugin
venus_tempest-plugin
vitrage_tempest-plugin
watcher_tempest-plugin
whitebox_tempest-plugin
zaqar_tempest_plugin
zun_tempest-plugin

# annoying from setuptools
pkg_resources
Expand Down
64 changes: 36 additions & 28 deletions detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,72 +20,77 @@
import urllib.parse as urlparse
import urllib.request as urlreq

import pkg_resources
import packaging.requirement

try:
PYPI_LOCATION = os.environ['PYPI_LOCATION']
except KeyError:
PYPI_LOCATION = 'http://pypi.org/project'


KEEP_KEYS = frozenset([
'author',
'author_email',
'maintainer',
'maintainer_email',
'license',
'summary',
'home_page',
])
KEEP_KEYS = frozenset(
[
'author',
'author_email',
'maintainer',
'maintainer_email',
'license',
'summary',
'home_page',
]
)


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):
# Try to find it with various names...
attempted = []
for name in iter_names(req):
url = PYPI_LOCATION + "/%s/json" % (urlparse.quote(name))
url = PYPI_LOCATION + f"/{urlparse.quote(name)}/json"
if url in attempted:
continue
with contextlib.closing(urlreq.urlopen(url)) as uh:
if uh.getcode() != 200:
attempted.append(url)
continue
return json.loads(uh.read())
attempted = [" * %s" % u for u in attempted]
raise IOError("Could not find '%s' on pypi\nAttempted urls:\n%s"
% (req.key, "\n".join(attempted)))
attempted = [f" * {u}" for u in attempted]
raise OSError(
"Could not find '{}' on pypi\nAttempted urls:\n{}".format(
req.key, "\n".join(attempted)
)
)


def main():
if len(sys.argv) == 1:
print("%s requirement-file ..." % (sys.argv[0]), file=sys.stderr)
print(f"{sys.argv[0]} requirement-file ...", file=sys.stderr)
sys.exit(1)
for filename in sys.argv[1:]:
print("Analyzing file: %s" % (filename))
print(f"Analyzing file: {filename}")
details = {}
with open(filename, "rb") as fh:
for line in fh.read().splitlines():
line = line.strip()
if line.startswith("#") or not line:
continue
req = pkg_resources.Requirement.parse(line)
print(" - processing: %s" % (req))
req = packaging.requirement.Requirement(line)
print(f" - processing: {req}")
try:
raw_req_data = release_data(req)
except IOError:
except OSError:
traceback.print_exc()
details[req.key] = None
else:
req_info = {}
for (k, v) in raw_req_data.get('info', {}).items():
for k, v in raw_req_data.get('info', {}).items():
if k not in KEEP_KEYS:
continue
req_info[k] = v
Expand All @@ -94,9 +99,12 @@ def main():
'info': req_info,
}
filename, _ext = os.path.splitext(filename)
with open("%s.json" % (filename), "wb") as fh:
fh.write(json.dumps(details, sort_keys=True, indent=4,
separators=(",", ": ")))
with open(f"{filename}.json", "wb") as fh:
fh.write(
json.dumps(
details, sort_keys=True, indent=4, separators=(",", ": ")
)
)


if __name__ == '__main__':
Expand Down
Loading