增强配置系统
This commit is contained in:
@@ -1,30 +1,33 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Annotated, Any, Dict, List, Literal, Union
|
||||
from typing import Annotated, Any, Dict, List, Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field, PlainSerializer, PlainValidator
|
||||
|
||||
from ..datasource.type_registry import register_datasource_config_model, validate_registered_datasource_config
|
||||
|
||||
|
||||
class JsonlDataSourceConfig(BaseModel):
|
||||
class BaseDataSourceConfig(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid", validate_assignment=True)
|
||||
|
||||
type: str
|
||||
target_project_ids: List[str] = Field(default_factory=list)
|
||||
handler_configs: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class JsonlDataSourceConfig(BaseDataSourceConfig):
|
||||
|
||||
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)
|
||||
class DbDataSourceConfig(BaseDataSourceConfig):
|
||||
|
||||
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)
|
||||
class ApiDataSourceConfig(BaseDataSourceConfig):
|
||||
|
||||
type: Literal["api"] = "api"
|
||||
api_base_url: str = ""
|
||||
@@ -36,10 +39,18 @@ class ApiDataSourceConfig(BaseModel):
|
||||
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"),
|
||||
BaseDataSourceConfig,
|
||||
PlainValidator(validate_registered_datasource_config),
|
||||
PlainSerializer(
|
||||
lambda value: value.model_dump(mode="python") if isinstance(value, BaseModel) else value,
|
||||
return_type=dict[str, Any],
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
register_datasource_config_model("jsonl", JsonlDataSourceConfig)
|
||||
register_datasource_config_model("db", DbDataSourceConfig)
|
||||
register_datasource_config_model("api", ApiDataSourceConfig)
|
||||
|
||||
Reference in New Issue
Block a user