Files
xiaobaifupan/next/backend/features/market/schemas.py
T

94 lines
2.0 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, Field
class TradeContextResponse(BaseModel):
requested_date: str
actual_date: str | None
previous_date: str | None
observed_at: datetime | None
state: str | None
carried_forward: bool
message: str
class MarketSummaryResponse(BaseModel):
context: TradeContextResponse
values: dict[str, Any] | None
class SearchResultResponse(BaseModel):
entity_type: Literal["stock", "sector", "theme", "index"]
identifier: str
code: str
name: str
sector: str | None
class SearchGroupResponse(BaseModel):
entity_type: Literal["stock", "sector", "theme", "index"]
label: str
items: list[SearchResultResponse]
class SearchResponse(BaseModel):
query: str
groups: list[SearchGroupResponse]
class ChartPointResponse(BaseModel):
time: str
open: float
high: float
low: float
close: float
volume: float
amount: float
average: float | None
class ChartResponse(BaseModel):
entity_type: str
identifier: str
code: str
name: str
interval: Literal["day", "minute"]
trade_date: str
observed_at: datetime
previous_close: float | None
range_start: str | None
range_end: str | None
points: list[ChartPointResponse]
class ReferenceSyncResponse(BaseModel):
calendar_days: int = Field(ge=1)
entities: int = Field(ge=1)
observed_at: datetime
class SnapshotSyncResponse(BaseModel):
trade_date: str
observed_at: datetime
coverage: float
stocks: int
limit_up: int
limit_down: int
broken: int
temperature: int
class MarketWorkspaceResponse(BaseModel):
trade_date: str | None
observed_at: datetime | None = None
carried_forward: bool = False
message: str = ""
overview: dict[str, Any] = Field(default_factory=dict)
sentiment: dict[str, Any] | None = None
history: list[dict[str, Any]] | None = None
items: list[dict[str, Any]] | None = None