Source code for openff.nagl.toolkits.registry

from typing import List, Optional

from openff.toolkit.utils.toolkit_registry import (
    ToolkitRegistry as _ToolkitRegistry,
    ToolkitUnavailableException,
)

from openff.nagl.toolkits._base import (
    NAGLToolkitWrapperMeta,
    NAGLToolkitWrapperBase,
    ToolkitWrapperType,
)


[docs]class NAGLToolkitRegistry(_ToolkitRegistry): def __init__( self, toolkit_precedence: Optional[List[ToolkitWrapperType]] = None, exception_if_unavailable: bool = True, _register_imported_toolkit_wrappers: bool = False, ): self._toolkits = [] toolkits_to_register = [] if _register_imported_toolkit_wrappers: if toolkit_precedence is None: toolkit_precedence = ["openeye", "rdkit"] for toolkit in toolkit_precedence: try: toolkit_class = NAGLToolkitWrapperMeta._get_class(toolkit) except (KeyError, ValueError): pass else: toolkits_to_register.append(toolkit_class) else: if toolkit_precedence is not None: toolkits_to_register = toolkit_precedence if toolkits_to_register: for toolkit in toolkits_to_register: self.register_toolkit( toolkit, exception_if_unavailable=exception_if_unavailable )
[docs] def deregister_toolkit(self, toolkit_wrapper: ToolkitWrapperType): """ Remove a ToolkitWrapper from the list of toolkits in this ToolkitRegistry .. warning :: This API is experimental and subject to change. Parameters ---------- toolkit_wrapper : instance or subclass of ToolkitWrapper The toolkit wrapper to remove from the registry Raises ------ InvalidToolkitError If toolkit_wrapper is not a ToolkitWrapper or subclass ToolkitUnavailableException If toolkit_wrapper is not found in the registry """ toolkit_wrapper = NAGLToolkitWrapperMeta._get_class(toolkit_wrapper) toolkits_to_remove = [] for toolkit in self._toolkits: if type(toolkit) == toolkit_wrapper: toolkits_to_remove.append(toolkit) if not toolkits_to_remove: msg = ( f"Did not find {toolkit_wrapper.name} in registry. " f"Currently registered toolkits are {self._toolkits}" ) raise ToolkitUnavailableException(msg) for toolkit_to_remove in toolkits_to_remove: self._toolkits.remove(toolkit_to_remove)
[docs] def add_toolkit(self, toolkit_wrapper: ToolkitWrapperType): """ Append a ToolkitWrapper onto the list of toolkits in this ToolkitRegistry .. warning :: This API is experimental and subject to change. Parameters ---------- toolkit_wrapper : openff.toolkit.utils.ToolkitWrapper The ToolkitWrapper object to add to the list of registered toolkits Raises ------ InvalidToolkitError If toolkit_wrapper is not a ToolkitWrapper or subclass """ toolkit_wrapper = NAGLToolkitWrapperMeta._get_class(toolkit_wrapper) self._toolkits.append(toolkit_wrapper)