Files
requirements/tools/lint.py
Stephen Finucane 3e7039df7d Add ruff
Change-Id: I82f8f1ec3f350c8ac7d1578292001fe61d06249d
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-10-23 10:26:01 +01:00

78 lines
2.2 KiB
Python
Executable File

#! /usr/bin/env python
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
GLOBAL_REQS = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
'..',
'global-requirements.txt',
)
def sort() -> None:
"""Sort global-requirements, respecting sections."""
section_headers: dict[str, str] = {}
section_deps: dict[str, list[tuple[str, str | None]]] = {}
section: str = ''
deps: list[tuple[str, str | None]] = []
comment: str = ''
with open(GLOBAL_REQS) as fh:
for line in fh.readlines():
if not line.strip():
continue
if line.startswith('## section:'):
if section:
section_deps[section] = sorted(
deps, key=lambda x: x[0].lower()
)
deps = []
section = line.removeprefix('## section:')
section_headers[section] = line
continue
if line.startswith('##'):
section_headers[section] += line
continue
if line.startswith('#'):
comment += line
continue
deps.append((line, comment or None))
comment = ''
section_deps[section] = sorted(deps, key=lambda x: x[0].lower())
with open(GLOBAL_REQS, 'w') as fh:
for i, section in enumerate(section_deps):
if i != 0:
fh.write('\n')
fh.write(section_headers[section])
fh.write('\n')
for dep, dep_comment in section_deps[section]:
if dep_comment:
fh.write(dep_comment)
fh.write(dep)
if __name__ == '__main__':
sort()