Source code for pyobo.plugins

# -*- coding: utf-8 -*-

"""Tools for loading entry points."""

from functools import lru_cache
from typing import Callable, Iterable, Mapping, Optional

from .struct import Obo

__all__ = [
    "has_nomenclature_plugin",
    "run_nomenclature_plugin",
    "iter_nomenclature_plugins",
]


@lru_cache()
def _get_nomenclature_plugins() -> Mapping[str, Callable[[], Obo]]:
    from .sources import ontology_resolver

    return ontology_resolver.lookup_dict


[docs]def has_nomenclature_plugin(prefix: str) -> bool: """Check if there's a plugin for converting the prefix.""" from .sources import ontology_resolver try: ontology_resolver.lookup(prefix) except (KeyError, ValueError, TypeError): return False else: return True
[docs]def run_nomenclature_plugin(prefix: str, version: Optional[str] = None) -> Obo: """Get a converted PyOBO source.""" from .sources import ontology_resolver return ontology_resolver.make(prefix, data_version=version)
[docs]def iter_nomenclature_plugins() -> Iterable[Obo]: """Get all modules in the PyOBO sources.""" from .sources import ontology_resolver for _prefix, cls in sorted(ontology_resolver.lookup_dict.items()): yield cls()