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}