Files
govoplan-search/src/govoplan_search/backend/schemas.py
T

129 lines
3.2 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, Field
class SearchExternalReferenceResponse(BaseModel):
system: str
object_type: str
object_id: str
maturity: str
connector_id: str | None = None
canonical_url: str | None = None
version: str | None = None
etag: str | None = None
observed_at: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class SearchResultResponse(BaseModel):
provider_id: str
module_id: str
resource_type: str
resource_id: str
title: str
summary: str | None = None
url: str
score: float = 0.0
highlights: list[str] = Field(default_factory=list)
breadcrumbs: list[str] = Field(default_factory=list)
external_reference: SearchExternalReferenceResponse | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
source_revision: str | None = None
provenance: dict[str, Any] = Field(default_factory=dict)
class SearchProviderDiagnosticResponse(BaseModel):
provider_id: str
status: Literal["unavailable"]
message: str
class SearchResponse(BaseModel):
query: str
results: list[SearchResultResponse]
diagnostics: list[SearchProviderDiagnosticResponse] = Field(default_factory=list)
next_cursor: str | None = None
has_more: bool = False
class SearchProviderResponse(BaseModel):
id: str
module_id: str
resource_types: list[str]
order: int
class SearchResourceTypeResponse(BaseModel):
provider_id: str
module_id: str
resource_type: str
label: str
order: int
class SearchProviderListResponse(BaseModel):
providers: list[SearchProviderResponse]
resources: list[SearchResourceTypeResponse] = Field(default_factory=list)
class SearchIndexStateResponse(BaseModel):
provider_id: str
module_id: str
resource_type: str
index_version: int
status: str
checkpoint_cursor: str | None = None
high_watermark: str | None = None
last_change_cursor: str | None = None
indexed_documents: int = 0
rejected_documents: int = 0
rebuild_started_at: datetime | None = None
rebuild_completed_at: datetime | None = None
last_success_at: datetime | None = None
last_error: str | None = None
class SearchDiagnosticsResponse(BaseModel):
backend: str
trigram_available: bool
queue: dict[str, int] = Field(default_factory=dict)
queue_oldest_age_seconds: float | None = None
states: list[SearchIndexStateResponse] = Field(
default_factory=list
)
class SearchRebuildResponse(BaseModel):
state: SearchIndexStateResponse
class SearchChangeDispatchResponse(BaseModel):
selected: int
applied: int
retrying: int
quarantined: int
class SearchModuleReconcileResponse(BaseModel):
disabled_documents: int
enabled_documents: int
__all__ = [
"SearchProviderDiagnosticResponse",
"SearchProviderListResponse",
"SearchProviderResponse",
"SearchResourceTypeResponse",
"SearchChangeDispatchResponse",
"SearchDiagnosticsResponse",
"SearchIndexStateResponse",
"SearchModuleReconcileResponse",
"SearchRebuildResponse",
"SearchResponse",
"SearchResultResponse",
]