scripts/audit_dependency_sources.py
Rama main · réplica de lectura del repositorio original.
"""Reject direct URL/VCS project dependencies that bypass index review."""
from __future__ import annotations
import argparse,tomllib
from pathlib import Path
from scripts.audit_common import print_failures,require_root
def audit_dependencies(deps:object)->list[str]:
if not isinstance(deps,list):return ['project.dependencies must be a list']
out=[]
for item in deps:
if not isinstance(item,str):out.append('project dependency entries must be strings');continue
low=item.lower()
if ' @ ' in item or low.startswith(('git+','file:','http://','https://')):out.append(f'direct dependency source is not allowed: {item}')
return out
def audit(root:Path)->list[str]:
root=require_root(root)
try:
with (root/'pyproject.toml').open('rb') as f:data=tomllib.load(f)
except (OSError,tomllib.TOMLDecodeError) as exc:return [f'could not parse pyproject.toml: {exc}']
project=data.get('project');return ['pyproject.toml is missing [project]'] if not isinstance(project,dict) else audit_dependencies(project.get('dependencies',[]))
def main(argv=None):
p=argparse.ArgumentParser(description=__doc__);p.add_argument('root',nargs='?',default='.');return print_failures(audit(Path(p.parse_args(argv).root)))
if __name__=='__main__':raise SystemExit(main())