mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-24 03:36:55 -04:00

Some checks are pending
Build Debian package / build (push) Waiting to run
Build Docker image / buildx (push) Waiting to run
Build Homebrew package / build (push) Waiting to run
Run linters / lint (push) Waiting to run
Build Pip package / build (push) Waiting to run
Run tests / python_tests (ubuntu-22.04, 3.11) (push) Waiting to run
Run tests / docker_tests (push) Waiting to run
40 lines
919 B
Python
40 lines
919 B
Python
import abc
|
|
from typing import Iterable, List, Dict, cast
|
|
|
|
import abx
|
|
from abx_spec_config import ConfigPluginSpec
|
|
|
|
|
|
class BaseSearchBackend(abc.ABC):
|
|
name: str
|
|
|
|
@staticmethod
|
|
@abc.abstractmethod
|
|
def index(snapshot_id: str, texts: List[str]):
|
|
return
|
|
|
|
@staticmethod
|
|
@abc.abstractmethod
|
|
def flush(snapshot_ids: Iterable[str]):
|
|
return
|
|
|
|
@staticmethod
|
|
@abc.abstractmethod
|
|
def search(text: str) -> List[str]:
|
|
raise NotImplementedError("search method must be implemented by subclass")
|
|
|
|
|
|
class SearchBackendPluginSpec:
|
|
@abx.hookspec
|
|
@abx.hookimpl
|
|
def get_SEARCHBACKENDS() -> Dict[abx.PluginId, BaseSearchBackend]:
|
|
return {}
|
|
|
|
|
|
class ExpectedPluginSpec(SearchBackendPluginSpec, ConfigPluginSpec):
|
|
pass
|
|
|
|
PLUGIN_SPEC = SearchBackendPluginSpec
|
|
|
|
TypedPluginManager = abx.ABXPluginManager[ExpectedPluginSpec]
|
|
pm = cast(TypedPluginManager, abx.pm)
|