RRC / src /racing_reports /api /schemas.py
pablogrois's picture
Reportes de equipo: filtro por condición (ganando/empatando/perdiendo)
d1dbbf2
Raw
History Blame Contribute Delete
2.38 kB
"""Pydantic schemas para la API JSON."""
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field
class HealthResponse(BaseModel):
ok: bool
nn_enabled: bool
preprocessed_cached: bool = False
git_commit: str | None = None
class MatchCandidate(BaseModel):
match_id: str
date: str
home_team: str
away_team: str
status: str # "played" | "future" | "no_data"
class FigureSummary(BaseModel):
name: str
title: str
section: str
png_url: str
svg_url: str | None = None
interactive_url: str | None = None
class TableSummary(BaseModel):
name: str
title: str
section: str
csv_url: str
preview_html: str = ""
class BundleSummary(BaseModel):
report_type: str
html_url: str
figures: list[FigureSummary]
tables: list[TableSummary]
warnings: list[str] = Field(default_factory=list)
meta: dict[str, Any] = Field(default_factory=dict)
class JobStatus(BaseModel):
id: str
kind: str
title: str
status: str
message: str
progress: int
error: str
warnings: list[str] = Field(default_factory=list)
bundles: dict[str, BundleSummary] = Field(default_factory=dict)
manifest_url: str | None = None
class FilterPayload(BaseModel):
date_from: str | None = None
date_to: str | None = None
last_n: int | None = None
side: str | None = None # "home" | "away" | "both" (legacy, == side_a)
side_a: str | None = None # local/visitante del equipo A
side_b: str | None = None # local/visitante del equipo B
state_a: str | None = None # condición A: "Ganando"|"Empatando"|"Perdiendo"|"both"
state_b: str | None = None # condición B
rival: str | None = None
block_type: str | None = None # "low" | "medium" | "high"
metric: str | None = None
class RunRequest(BaseModel):
league: str
season: str
team_a: str = ""
team_b: str = ""
match_id: str = ""
match_date: str = ""
filters: FilterPayload = Field(default_factory=FilterPayload)
only: list[str] = Field(default_factory=list) # nombres de figuras/tablas específicas
class RunResponse(BaseModel):
job_id: str
status_url: str
class CatalogResponse(BaseModel):
report_type: str
figures: list[dict[str, Any]]
tables: list[dict[str, Any]]