cp.nvim/scrapers/models.py

71 lines
1.2 KiB
Python

from pydantic import BaseModel, Field
class TestCase(BaseModel):
input: str
expected: str
class Config:
extra = "forbid"
class ProblemSummary(BaseModel):
id: str
name: str
class Config:
extra = "forbid"
class ContestSummary(BaseModel):
id: str
name: str
display_name: str | None = None
class Config:
extra = "forbid"
class ScrapingResult(BaseModel):
success: bool
error: str
class Config:
extra = "forbid"
class MetadataResult(ScrapingResult):
contest_id: str = ""
problems: list[ProblemSummary] = Field(default_factory=list)
class Config:
extra = "forbid"
class ContestListResult(ScrapingResult):
contests: list[ContestSummary] = Field(default_factory=list)
class Config:
extra = "forbid"
class TestsResult(ScrapingResult):
problem_id: str
url: str
tests: list[TestCase] = Field(default_factory=list)
timeout_ms: int
memory_mb: float
interactive: bool = False
class Config:
extra = "forbid"
class ScraperConfig(BaseModel):
timeout_seconds: int = 30
max_retries: int = 3
backoff_base: float = 2.0
rate_limit_delay: float = 1.0
class Config:
extra = "forbid"