Source code for hyrax.verbs.verb_registry

import logging
from abc import ABC

[docs] logger = logging.getLogger(__name__)
[docs] class Verb(ABC): # noqa: B024 """Base class for all hyrax verbs""" # Verbs get to define how their parser gets added to the main parser # This is given in case verbs do not define any keyword args for # subparser.add_parser()
[docs] add_parser_kwargs: dict[str, str] = {}
[docs] def __init__(self, config): """ .. py:method:: __init__ Overall initialization for all verbs that saves the config """
[docs] self.config = config
# Verbs with no class are assumed to have a function in hyrax.py which # performs their function. All other verbs should be defined by named classes # in hyrax.verbs and use the @hyrax_verb decorator
[docs] VERB_REGISTRY: dict[str, type[Verb] | None] = { "train": None, "infer": None, "download": None, "prepare": None, "rebuild_manifest": None, }
[docs] def hyrax_verb(cls: type[Verb]) -> type[Verb]: """Decorator to register a hyrax verb""" from hyrax.plugin_utils import update_registry update_registry(VERB_REGISTRY, cls.cli_name, cls) # type: ignore[attr-defined] return cls
[docs] def all_verbs() -> list[str]: """Returns all verbs that are currently registered""" return [verb for verb in VERB_REGISTRY]
[docs] def all_class_verbs() -> list[str]: """Returns all verbs that are currently registered with a class-based implementation""" return [verb for verb in VERB_REGISTRY if VERB_REGISTRY.get(verb) is not None]
[docs] def is_verb_class(cli_name: str) -> bool: """Returns true if the verb has a class based implementation Parameters ---------- cli_name : str The name of the verb on the command line interface Returns ------- bool True if the verb has a class-based implementation """ return cli_name in VERB_REGISTRY and VERB_REGISTRY.get(cli_name) is not None
[docs] def fetch_verb_class(cli_name: str) -> type[Verb] | None: """Gives the class object for the named verb Parameters ---------- cli_name : str The name of the verb on the command line interface Returns ------- Optional[type[Verb]] The verb class or None if no such verb class exists. """ return VERB_REGISTRY.get(cli_name)