EngineConfiguration_BusService
What it is
Configuration models and loaders for wiring a BusService with a selectable bus adapter (rabbitmq, python_queue, or custom). Built on Pydantic for validation and a generic loader mechanism for custom adapters.
Public API
-
BusAdapterRabbitMQConfiguration (pydantic.BaseModel)- Purpose: Validates configuration for the RabbitMQ bus adapter.
- Fields:
rabbitmq_url: str(default:"amqp://abi:[email protected]:5672")
- Notes: Extra keys are forbidden (
extra="forbid").
-
BusAdapterPythonQueueConfiguration (pydantic.BaseModel)- Purpose: Validates configuration for the Python-queue bus adapter.
- Fields:
persistence_path: str | None(default:None)journal_mode: Literal["DELETE","TRUNCATE","PERSIST","MEMORY","WAL","OFF"](default:"WAL")busy_timeout_ms: int(default:5000)poll_interval_seconds: float(default:0.05)lock_timeout_seconds: float(default:1.0)
- Notes: Extra keys are forbidden (
extra="forbid").
-
BusAdapterConfiguration (GenericLoader)- Purpose: Selects and validates an adapter configuration; can also load a custom adapter via
GenericLoader. - Fields:
adapter: Literal["rabbitmq", "python_queue", "custom"]config: dict | None(default:None)
- Methods:
validate_adapter() -> BusAdapterConfiguration- Validates
configagainst the appropriate Pydantic model. - Enforces
config is not Nonewhenadapter != "custom". - For
python_queue, validation only occurs ifconfigis provided.
- Validates
load() -> IBusAdapterrabbitmq: lazy-imports and returnsRabbitMQAdapter(**config)python_queue: lazy-imports and returnsPythonQueueAdapter(**config)(requiresconfignotNone)custom: delegates toGenericLoader.load()- Otherwise: raises
ValueError
- Purpose: Selects and validates an adapter configuration; can also load a custom adapter via
-
BusServiceConfiguration (pydantic.BaseModel)- Purpose: Top-level configuration for constructing a
BusService. - Fields:
bus_adapter: BusAdapterConfiguration
- Methods:
load() -> BusService: returnsBusService(adapter=self.bus_adapter.load())
- Purpose: Top-level configuration for constructing a
Configuration/Dependencies
- Depends on:
pydantic(BaseModel,model_validator,ConfigDict)naas_abi_core.engine.engine_configuration.EngineConfiguration_GenericLoader.GenericLoader(forcustomadapter loading)naas_abi_core.engine.engine_configuration.utils.PydanticModelValidator.pydantic_model_validatornaas_abi_core.services.bus.BusService.BusServicenaas_abi_core.services.bus.BusPorts.IBusAdapter
- Adapter implementations are imported lazily during
BusAdapterConfiguration.load():RabbitMQAdapterfromnaas_abi_core.services.bus.adapters.secondary.RabbitMQAdapterPythonQueueAdapterfromnaas_abi_core.services.bus.adapters.secondary.PythonQueueAdapter
Usage
from naas_abi_core.engine.engine_configuration.EngineConfiguration_BusService import (
BusServiceConfiguration,
)
cfg = BusServiceConfiguration(
bus_adapter={
"adapter": "rabbitmq",
"config": {"rabbitmq_url": "amqp://abi:[email protected]:5672"},
}
)
bus_service = cfg.load()
Caveats
bus_adapter.configis required for any adapter other than"custom".- Despite comments stating the Python queue adapter “doesn't require configuration”,
load()asserts thatconfigis notNonefor"python_queue". If you use"python_queue", pass at least an empty dict:config={}. - Configuration models forbid unknown keys (
extra="forbid"); extra fields will fail validation.