EngineServiceLoader
What it is
- A small loader that builds an
IEngine.Servicescontainer based on which services are required by loaded modules. - It consults an
EngineConfigurationto instantiate services and wires them viaservices.wire_services().
Public API
class EngineServiceLoader__init__(configuration: EngineConfiguration)- Stores the engine configuration used to load service instances.
load_services(module_dependencies: Dict[str, ModuleDependencies]) -> IEngine.Services- Collects requested service types from each module’s
ModuleDependencies.services. - Loads only the required services from
EngineConfiguration.services.*.load(). - Calls
wire_services()on the resultingIEngine.Servicescontainer.
- Collects requested service types from each module’s
_should_load_service(service_type: type, services_to_load: List[type]) -> bool- Helper to decide whether a given service should be loaded.
- Also loads implicit dependencies defined in
SERVICES_DEPENDENCIES.
Configuration/Dependencies
- Requires an
EngineConfigurationinstance that exposes loaders under:configuration.services.object_storage.load()configuration.services.triple_store.load()configuration.services.vector_store.load()configuration.services.secret.load()configuration.services.bus.load()configuration.services.kv.load()
- Uses module requirements from
ModuleDependencies.services(a list of service types). - Implicit service dependency map:
TripleStoreServicedepends onBusService- If
TripleStoreServiceis requested,BusServicewill also be loaded (even if not explicitly requested).
- If
- Logs the resolved unique service types list via
naas_abi_core.logger.debug.
Usage
from naas_abi_core.engine.engine_loaders.EngineServiceLoader import EngineServiceLoader
from naas_abi_core.engine.engine_configuration.EngineConfiguration import EngineConfiguration
# module_dependencies must map module names to ModuleDependencies instances,
# each containing a `.services` list of service types to request.
module_dependencies = {
# "my_module": ModuleDependencies(services=[...], ...)
}
configuration = EngineConfiguration(...) # must be properly constructed for your environment
loader = EngineServiceLoader(configuration)
services = loader.load_services(module_dependencies)
# services is an IEngine.Services container with requested services loaded (others are None).
Caveats
- Any service not requested (directly or via
SERVICES_DEPENDENCIES) is set toNoneinIEngine.Services. - Only the dependency
TripleStoreService -> BusServiceis handled; no other dependency relationships are defined in this file.