Source code for veupath_chatbot.transport.http.schemas.sites

"""Sites request/response DTOs."""

from pydantic import BaseModel, Field, RootModel

from veupath_chatbot.platform.types import JSONArray, JSONObject, JSONValue


[docs] class SiteResponse(BaseModel): """VEuPathDB site information.""" id: str name: str display_name: str = Field(alias="displayName") base_url: str = Field(alias="baseUrl") project_id: str = Field(alias="projectId") is_portal: bool = Field(alias="isPortal") model_config = {"populate_by_name": True}
[docs] class RecordTypeResponse(BaseModel): """Record type information.""" name: str display_name: str = Field(alias="displayName") description: str | None = None model_config = {"populate_by_name": True}
[docs] class SearchResponse(BaseModel): """Search information.""" name: str display_name: str = Field(alias="displayName") description: str | None = None record_type: str = Field(alias="recordType") model_config = {"populate_by_name": True}
[docs] class DependentParamsRequest(BaseModel): """Dependent parameter values request.""" parameter_name: str = Field(alias="parameterName") context_values: JSONObject = Field(default_factory=dict, alias="contextValues") model_config = {"populate_by_name": True}
[docs] class SearchDetailsResponse(BaseModel): """Search details payload (UI-facing).""" search_data: JSONObject | None = Field(default=None, alias="searchData") validation: JSONObject | None = None search_config: JSONObject | None = Field(default=None, alias="searchConfig") parameters: JSONArray | None = None param_map: JSONObject | None = Field(default=None, alias="paramMap") question: JSONObject | None = None model_config = {"populate_by_name": True, "extra": "allow"}
[docs] class DependentParamsResponse(RootModel[JSONArray]): """Dependent parameter values response."""
[docs] class SearchValidationRequest(BaseModel): """Search parameter validation request.""" context_values: JSONObject = Field(default_factory=dict, alias="contextValues") model_config = {"populate_by_name": True}
[docs] class ParamSpecsRequest(BaseModel): """Parameter specs request (optionally contextual).""" context_values: JSONObject = Field(default_factory=dict, alias="contextValues") model_config = {"populate_by_name": True}
[docs] class SearchValidationErrors(BaseModel): general: list[str] = Field(default_factory=list) by_key: dict[str, list[str]] = Field(default_factory=dict, alias="byKey") model_config = {"populate_by_name": True}
[docs] class SearchValidationPayload(BaseModel): is_valid: bool = Field(alias="isValid") normalized_context_values: JSONObject = Field( default_factory=dict, alias="normalizedContextValues" ) errors: SearchValidationErrors = Field(default_factory=SearchValidationErrors) model_config = {"populate_by_name": True}
[docs] class SearchValidationResponse(BaseModel): """Stable validation response for UI consumption.""" validation: SearchValidationPayload model_config = {"populate_by_name": True}
[docs] class ParamSpecResponse(BaseModel): """Normalized parameter spec (UI-friendly).""" name: str display_name: str | None = Field(default=None, alias="displayName") type: str allow_empty_value: bool = Field(default=False, alias="allowEmptyValue") allow_multiple_values: bool | None = Field( default=None, alias="allowMultipleValues" ) multi_pick: bool | None = Field(default=None, alias="multiPick") min_selected_count: int | None = Field(default=None, alias="minSelectedCount") max_selected_count: int | None = Field(default=None, alias="maxSelectedCount") count_only_leaves: bool = Field(default=False, alias="countOnlyLeaves") initial_display_value: JSONValue | None = Field( default=None, alias="initialDisplayValue" ) vocabulary: JSONValue | None = None min_value: float | None = Field(default=None, alias="min") max_value: float | None = Field(default=None, alias="max") is_number: bool = Field(default=False, alias="isNumber") increment: float | None = None display_type: str | None = Field(default=None, alias="displayType") is_visible: bool = Field(default=True, alias="isVisible") group: str | None = None dependent_params: list[str] = Field(default_factory=list, alias="dependentParams") help: str | None = None model_config = {"populate_by_name": True}