feat: implement durable permission-aware search
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
@@ -31,6 +32,8 @@ class SearchResultResponse(BaseModel):
|
||||
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):
|
||||
@@ -43,6 +46,8 @@ 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):
|
||||
@@ -56,10 +61,58 @@ class SearchProviderListResponse(BaseModel):
|
||||
providers: list[SearchProviderResponse]
|
||||
|
||||
|
||||
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",
|
||||
"SearchChangeDispatchResponse",
|
||||
"SearchDiagnosticsResponse",
|
||||
"SearchIndexStateResponse",
|
||||
"SearchModuleReconcileResponse",
|
||||
"SearchRebuildResponse",
|
||||
"SearchResponse",
|
||||
"SearchResultResponse",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user