Source code for qcfractal.services.services

"""
Manipulates available services.
"""

from .gridoptimization_service import GridOptimizationService
from .torsiondrive_service import TorsionDriveService

__all__ = ["initialize_service", "construct_service"]


def _service_chooser(name):
    """
    Choose the correct service.
    """
    name = name.lower()
    if name == "torsiondrive":
        return TorsionDriveService
    elif name == "gridoptimization":
        return GridOptimizationService
    else:
        raise KeyError("Name {} not recognized.".format(name.title()))


[docs]def initialize_service(storage_socket, logger, service_input, tag=None, priority=None): """Initializes a service from a API call. Parameters ---------- storage_socket : StorageSocket A StorageSocket to the currently active database logger A logger for use by the service service_input The service to be initialized. tag : Optional Optional tag to user with the service. Defaults to None priority : The priority of the service. Returns ------- Service Returns an instantiated service """ name = service_input.procedure return _service_chooser(name).initialize_from_api(storage_socket, logger, service_input, tag=tag, priority=priority)
[docs]def construct_service(storage_socket, logger, data): """Initializes a service from a JSON blob. Parameters ---------- storage_socket : StorageSocket A StorageSocket to the currently active database logger A logger for use by the service data : dict The associated JSON blob with the service Returns ------- Service Returns an instantiated service """ name = data["service"] return _service_chooser(name)(**data, storage_socket=storage_socket, logger=logger)