Skip to main content

ducto.events module

Typed event emitter for credit lifecycle events.

Events are emitted by CreditManager after each store operation. The emitter is optional — inject into CreditManager constructor, no-op if omitted.

Usage:

from ducto.events import CreditEventEmitter

emitter = CreditEventEmitter()
emitter.on("credits.deducted", lambda event: print(event))
manager = CreditManager(store=store, emitter=emitter)

class ducto.events.CreditEvent(, type: str, timestamp: datetime, user_id: str, data: dict[str, Any] | None = None)

Bases: BaseModel

A typed credit lifecycle event.

data : dict[str, Any] | None

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

timestamp : datetime

type : CreditEventType

user_id : str

class ducto.events.CreditEventEmitter

Bases: object

Typed pub/sub event emitter for credit events.

Handlers are registered by event type string and called synchronously when the event is emitted. No-op when no handlers are registered.

clear_all() → None

Remove all handlers for all types.

clear_type(event_type: str) → None

Remove all handlers for a specific type.

emit(event: CreditEvent) → None

Emit an event to all registered handlers.

off(event_type: str, handler: Callable[[CreditEvent], None]) → None

Remove a previously registered handler.

on(event_type: str, handler: Callable[[CreditEvent], None]) → None

Register a handler for a specific event type.