import argparse import structlog from ingest.fixtures.store import load_fixtures from models.dataset import export_jsonl from pipelines.gold import run_gold_pipeline from pipelines.silver import run_silver_pipeline structlog.configure( processors=[ structlog.processors.TimeStamper(fmt="iso"), structlog.dev.ConsoleRenderer(), ] ) def main() -> None: parser = argparse.ArgumentParser(description="Executa pipeline silver → gold") parser.add_argument( "stage", choices=["silver", "gold", "all", "export"], help="Estágio do pipeline", ) parser.add_argument("--season", type=int, help="Temporada (ex: 2024)") parser.add_argument("--round", type=int, help="Rodada específica") parser.add_argument( "--competition", choices=["brasileirao", "copa"], default=None, help="Filtra fixtures por competição", ) args = parser.parse_args() if args.stage in ("silver", "all"): path = run_silver_pipeline() print(f"Silver: {path or 'sem dados'}") if args.stage in ("gold", "all"): fixtures = load_fixtures(season=args.season, competition=args.competition) if fixtures.empty: print("Gold: sem fixtures. Execute primeiro: import-brasileirao") else: path = run_gold_pipeline(season=args.season, round_number=args.round) labeled = fixtures["label"].notna().sum() if args.round is None else len(fixtures) print(f"Gold: {path or 'sem dados'} ({labeled} jogos com label)") if args.stage == "export": from pathlib import Path output = Path("data/training/bolao_train.jsonl") count = export_jsonl(output) print(f"Exportados {count} exemplos para treino em {output}") if __name__ == "__main__": main()