ArchiveBox/archivebox/pkgs/abx-spec-searchbackend/abx_spec_searchbackend.py
Nick Sweeting c8e186f21b
Some checks failed
Run linters / lint (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build Debian package / build (push) Has been cancelled
Build Docker image / buildx (push) Has been cancelled
Deploy static content to Pages / deploy (push) Has been cancelled
Build Homebrew package / build (push) Has been cancelled
Build GitHub Pages website / build (push) Has been cancelled
Build Pip package / build (push) Has been cancelled
Run tests / python_tests (ubuntu-22.04, 3.11) (push) Has been cancelled
Run tests / docker_tests (push) Has been cancelled
Build GitHub Pages website / deploy (push) Has been cancelled
fix plugin loading order, admin, abx-pkg
2024-11-16 06:44:12 -08:00

43 lines
961 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:
__order__ = 10
@staticmethod
@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)