Download cli.py from TecnoPopular/tecnopopular-audit: direct link, hf CLI and curl.
- Browser
- Download file 2.74 kB
-
https://huggingface.co/TecnoPopular/tecnopopular-audit/resolve/main/cli.py
- Command line
-
hf download hf://TecnoPopular/tecnopopular-audit/cli.py
-
curl -L -o cli.py https://huggingface.co/TecnoPopular/tecnopopular-audit/resolve/main/cli.py
2.74 kB
| #!/usr/bin/env python3 | |
| """ | |
| cli.py — Interface de Linha de Comando do Protocolo de Auditoria Civica TecnoPopular. | |
| Permite avaliar qualquer ferramenta civica via URL e gerar laudos tecnicos em JSON e Markdown. | |
| """ | |
| import argparse | |
| import json | |
| import sys | |
| from pathlib import Path | |
| from models import AuditRubric | |
| from evaluator import CivicEvaluator | |
| def main() -> int: | |
| parser = argparse.ArgumentParser( | |
| description="Protocolo de Auditoria Civica TecnoPopular (CTP-1.0) - Inspecao Tecnica" | |
| ) | |
| parser.add_argument("--url", required=True, help="URL pública da ferramenta cívica a ser auditada") | |
| parser.add_argument("--name", required=True, help="Nome legível da iniciativa") | |
| parser.add_argument("--id", default="", help="Slug / Identificador único (opcional)") | |
| parser.add_argument("--repo", default=None, help="URL do repositório público de código (opcional)") | |
| parser.add_argument("--sources", nargs="*", default=None, help="Fontes primárias declaradas (ex: TSE IBGE CGU)") | |
| parser.add_argument("--output-json", default="", help="Caminho para salvar o laudo em JSON") | |
| parser.add_argument("--output-md", default="", help="Caminho para salvar a síntese em Markdown") | |
| args = parser.parse_args() | |
| tool_id = args.id or args.name.lower().replace(" ", "-") | |
| evaluator = CivicEvaluator() | |
| print(f"[*] Iniciando auditoria técnica de: {args.name} ({args.url})") | |
| report = evaluator.audit_target( | |
| tool_id=tool_id, | |
| tool_name=args.name, | |
| target_url=args.url, | |
| declared_repo=args.repo, | |
| declared_sources=args.sources | |
| ) | |
| print("\n" + "=" * 70) | |
| print(f"LAUDO DE AUDITORIA CIVICA: {report.tool_name}") | |
| print("=" * 70) | |
| print(f"Status: {report.status.value.upper()}") | |
| print(f"Selo/Classificacao: {report.badge_label}") | |
| print(f"Score Total: {report.total_score:.1f} / 100") | |
| print(f"Bloqueador Critico: {'SIM' if report.has_critical_blocker else 'NAO'}") | |
| print("-" * 70) | |
| print("NOTAS POR DIMENSAO:") | |
| for dim, score in report.dimension_scores.items(): | |
| st = "APROVADO" if score.is_passing else "AJUSTE RECOMENDADO" | |
| print(f" - {dim.value:25} {score.raw_score:5.1f}/100 ({score.weighted_score:4.1f} pts) [{st}]") | |
| print("=" * 70) | |
| if args.output_json: | |
| p_json = Path(args.output_json) | |
| p_json.write_text(report.model_dump_json(indent=2), encoding="utf-8") | |
| print(f"[+] Laudo estruturado salvo em: {p_json}") | |
| if args.output_md: | |
| p_md = Path(args.output_md) | |
| p_md.write_text(report.summary_markdown, encoding="utf-8") | |
| print(f"[+] Sintese Markdown salva em: {p_md}") | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |