Skip to content

Eventing internals

Message envelope and metadata classes for the event transport layer. These classes define how domain events and commands are serialized, routed, and traced through the system.

MessageEnvelope

MessageEnvelope(*args: Any, **kwargs: Any)

Bases: BaseValueObject

Message envelope containing integrity and versioning information.

Source code in src/protean/core/value_object.py
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
def __init__(self, *args: Any, **kwargs: Any) -> None:
    # Support template dict pattern: VO({"key": "val"}, key2="val2")
    # Keyword args take precedence over template dict values.
    if args:
        merged: dict[str, Any] = {}
        for template in args:
            if not isinstance(template, dict):
                raise AssertionError(
                    f"Positional argument {template} passed must be a dict. "
                    f"This argument serves as a template for loading common "
                    f"values.",
                )
            merged.update(template)
        merged.update(kwargs)
        kwargs = merged
    try:
        super().__init__(**kwargs)
    except PydanticValidationError as e:
        raise ValidationError(convert_pydantic_errors(e))

compute_checksum classmethod

compute_checksum(payload: dict) -> str

Compute checksum for message integrity validation.

Source code in src/protean/utils/eventing.py
51
52
53
54
55
@classmethod
def compute_checksum(cls, payload: dict) -> str:
    """Compute checksum for message integrity validation."""
    json_data = json.dumps(payload, sort_keys=True, separators=(",", ":"))
    return hashlib.sha256(json_data.encode("utf-8")).hexdigest()

Metadata

Metadata(*args: Any, **kwargs: Any)

Bases: BaseValueObject

Complete metadata for a domain message (event or command).

ATTRIBUTE DESCRIPTION
headers

Transport-level metadata (id, type, stream, time, traceparent).

TYPE: MessageHeaders

envelope

Integrity and versioning (specversion, checksum).

TYPE: MessageEnvelope | None

domain

Domain-level metadata (fqn, kind, correlation/causation IDs, etc.).

TYPE: DomainMeta | None

event_store

Store-level metadata (positions), set after persistence.

TYPE: EventStoreMeta | None

extensions

User-provided metadata populated by message enrichment hooks. Registered via domain.register_event_enricher() or domain.register_command_enricher(). Persisted alongside all other metadata and survives serialization round-trips.

TYPE: dict[str, Any]

Source code in src/protean/core/value_object.py
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
def __init__(self, *args: Any, **kwargs: Any) -> None:
    # Support template dict pattern: VO({"key": "val"}, key2="val2")
    # Keyword args take precedence over template dict values.
    if args:
        merged: dict[str, Any] = {}
        for template in args:
            if not isinstance(template, dict):
                raise AssertionError(
                    f"Positional argument {template} passed must be a dict. "
                    f"This argument serves as a template for loading common "
                    f"values.",
                )
            merged.update(template)
        merged.update(kwargs)
        kwargs = merged
    try:
        super().__init__(**kwargs)
    except PydanticValidationError as e:
        raise ValidationError(convert_pydantic_errors(e))