amarorn / pipelines /cli.py
beAnalytic's picture
feat: sync main with feature/superbet-live-inplay
16c19b8 verified
Raw
History Blame Contribute Delete
1.84 kB
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()