IEngine
What it is
- Defines a lightweight engine interface with:
- A
Servicescontainer for core infrastructure services (KV, bus, storage, etc.). - A
modulesregistry.
- A
- Includes a
ServicesAwareprotocol for services that need to receive the fullServicesset.
Public API
ServicesAware (Protocol)
set_services(services: IEngine.Services) -> None- Implement to receive a reference to the engine’s
Servicescontainer.
- Implement to receive a reference to the engine’s
IEngine
services: IEngine.Services(property)- Access the engine’s service container.
modules: Dict[str, BaseModule](property)- Access registered modules by name.
IEngine.Services
Container for optional service instances, with guarded accessors.
Constructor
IEngine.Services(..., object_storage=None, triple_store=None, vector_store=None, secret=None, bus=None, kv=None, email=None, cache=None)- Stores references to provided service instances (each may be
None).
- Stores references to provided service instances (each may be
Service accessors (raise AssertionError if not initialized)
kv -> KeyValueServiceobject_storage -> ObjectStorageServicetriple_store -> TripleStoreServicevector_store -> VectorStoreServicesecret -> Secretbus -> BusServiceemail -> EmailServicecache -> CacheService
Availability checks
triple_store_available() -> boolcache_available() -> bool
Bulk access
all -> List[Union[...]](property)- Returns a list of all service slots (may include
None) in this order:- object_storage
- triple_store
- vector_store
- secret
- bus
- kv
- cache
- Returns a list of all service slots (may include
Wiring
wire_services() -> None- Iterates over
all; for each non-Noneservice that satisfiesisinstance(service, ServicesAware), callsservice.set_services(self).
- Iterates over
Configuration/Dependencies
- Imports service types from
naas_abi_core.services.*:BusService,CacheService,EmailService,KeyValueServiceObjectStorageService,Secret,TripleStoreService,VectorStoreService
modulesvalues areBaseModule(imported only underTYPE_CHECKING).
Usage
from naas_abi_core.engine.IEngine import IEngine, ServicesAware
class MyService(ServicesAware):
def set_services(self, services: IEngine.Services) -> None:
# Example: store a reference for later use
self.services = services
# Instantiate services container with whatever concrete services you have (or None)
services = IEngine.Services(
kv=None,
object_storage=None,
triple_store=None,
vector_store=None,
secret=None,
bus=None,
email=None,
cache=None,
)
# Wire cross-service references for ServicesAware implementations
services.wire_services()
Caveats
- Accessing a service property (e.g.,
services.kv) when it was not provided raisesAssertionErrorwith a clear message. wire_services()only wires objects that passisinstance(service, ServicesAware); plain objects without that protocol method are ignored.