__package__ = 'archivebox.plugantic' from typing import Iterable, List from benedict import benedict from pydantic import Field from .base_hook import BaseHook, HookType class BaseSearchBackend(BaseHook): hook_type: HookType = 'SEARCHBACKEND' name: str = Field() # e.g. 'singlefile' @staticmethod def index(snapshot_id: str, texts: List[str]): return @staticmethod def flush(snapshot_ids: Iterable[str]): return @staticmethod def search(text: str) -> List[str]: raise NotImplementedError("search method must be implemented by subclass") def register(self, settings, parent_plugin=None): # self._plugin = parent_plugin # for debugging only, never rely on this! # Install queue into settings.SEARCH_BACKENDS settings.SEARCH_BACKENDS = getattr(settings, "SEARCH_BACKENDS", None) or benedict({}) settings.SEARCH_BACKENDS[self.id] = self # Record installed hook into settings.HOOKS super().register(settings, parent_plugin=parent_plugin)