Files
ecm_sync_system/sync_state_machine/config/datasource_config.py
T
2026-03-10 12:22:54 +08:00

46 lines
1.4 KiB
Python

from __future__ import annotations
from typing import Annotated, Any, Dict, List, Literal, Union
from pydantic import BaseModel, ConfigDict, Field
class JsonlDataSourceConfig(BaseModel):
model_config = ConfigDict(extra="forbid", validate_assignment=True)
type: Literal["jsonl"] = "jsonl"
jsonl_dir: str
read_only: bool = False
target_project_ids: List[str] = Field(default_factory=list)
handler_configs: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
class DbDataSourceConfig(BaseModel):
model_config = ConfigDict(extra="forbid", validate_assignment=True)
type: Literal["db"] = "db"
target_project_ids: List[str] = Field(default_factory=list)
handler_configs: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
class ApiDataSourceConfig(BaseModel):
model_config = ConfigDict(extra="forbid", validate_assignment=True)
type: Literal["api"] = "api"
api_base_url: str = ""
api_uid: str = ""
api_secret: str = ""
api_debug: bool = False
poll_max_retries: int = 10
poll_interval: float = 0.5
api_rate_limit_max_requests: int = 10
api_rate_limit_window_seconds: float = 10.0
target_project_ids: List[str] = Field(min_length=1)
handler_configs: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
DataSourceConfig = Annotated[
Union[JsonlDataSourceConfig, DbDataSourceConfig, ApiDataSourceConfig],
Field(discriminator="type"),
]