Spaces:
Running
Running
| """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]] | |