Source code for triplemodel.plugins

"""Extension hooks for custom literals, resources, and predicate resolution."""

from __future__ import annotations

import warnings
from typing import Callable, TypeVar, cast

from triplemodel.fields.resolver import FieldPredicateResolver, default_resolver
from triplemodel.protocols import PredicateResolver, register_rdf_resource
from triplemodel.terms.registry import (
    LiteralRegistry,
    default_registry,
    register_literal_type,
)

T = TypeVar("T", bound=PredicateResolver)


[docs] def register_predicate_resolver( resolver: T | Callable[[], T], ) -> T: """Install a package-wide predicate resolver (replaces :data:`default_resolver`).""" if isinstance(resolver, type): instance = resolver() elif callable(resolver): instance = cast(Callable[[], T], resolver)() else: instance = resolver if not isinstance(instance, FieldPredicateResolver): raise TypeError( "register_predicate_resolver expects a FieldPredicateResolver instance or factory." ) import triplemodel.fields.resolver as resolver_mod resolver_mod.default_resolver = instance from triplemodel.metadata.predicate_map import clear_predicate_map_cache clear_predicate_map_cache() return instance
def _removed_plugin_api(name: str, *_args: object, **_kwargs: object) -> None: warnings.warn( f"triplemodel.plugins.{name} was removed in 0.10.0 (pyoxigraph has no plugin registry).", DeprecationWarning, stacklevel=2, ) raise NotImplementedError( f"{name} is not available with the pyoxigraph engine (removed in TripleModel 0.10.0)." )
[docs] def register_parser(name: str, module_path: str, class_name: str) -> None: """Removed in 0.10.0 — pyoxigraph has no parser plugin registry.""" _removed_plugin_api("register_parser", name, module_path, class_name)
[docs] def register_serializer(name: str, module_path: str, class_name: str) -> None: """Removed in 0.10.0 — pyoxigraph has no serializer plugin registry.""" _removed_plugin_api("register_serializer", name, module_path, class_name)
[docs] def register_store(name: str, module_path: str, class_name: str) -> None: """Removed in 0.10.0 — use :class:`pyoxigraph.Store` directly.""" _removed_plugin_api("register_store", name, module_path, class_name)
__all__ = [ "LiteralRegistry", "default_registry", "default_resolver", "register_literal_type", "register_parser", "register_predicate_resolver", "register_rdf_resource", "register_serializer", "register_store", ]