cmboulanger's picture
disaster-recovery deploy of pdf-tei-editor
6a49f21 verified
Raw
History Blame Contribute Delete
1.5 kB
"""
Document Search plugin.
Provides full-text search across all documents accessible to the current user.
"""
import logging
from pathlib import Path
from typing import Any, Callable
from fastapi_app.lib.plugins.frontend_extension_registry import FrontendExtensionRegistry
from fastapi_app.lib.plugins.plugin_base import Plugin, PluginContext
logger = logging.getLogger(__name__)
class DocumentSearchPlugin(Plugin):
"""Plugin that provides full-text search across accessible documents."""
@property
def metadata(self) -> dict[str, Any]:
return {
"id": "document-search",
"name": "Document Search",
"description": "Search across all accessible documents",
"category": "search",
"version": "1.0.0",
"required_roles": ["user"],
"endpoints": [],
}
def get_endpoints(self) -> dict[str, Callable]:
return {"search": self.search}
async def initialize(self, context: PluginContext) -> None:
fe_registry = FrontendExtensionRegistry.get_instance()
extension_file = Path(__file__).parent / "extensions" / "document-search.js"
if extension_file.exists():
fe_registry.register_extension(extension_file, self.metadata["id"])
logger.info("Registered document-search frontend extension")
async def search(self, context: PluginContext, params: dict) -> dict:
return {"outputUrl": "/api/plugins/document-search/view"}