Add event-payload context resolver

This commit is contained in:
2026-06-18 14:01:11 +02:00
parent b84e474ac5
commit 0554014083
5 changed files with 351 additions and 4 deletions

View File

@@ -11,6 +11,7 @@ activities that need DB access.
from __future__ import annotations
import json
import uuid
from datetime import datetime, timezone
from typing import Any
@@ -65,6 +66,24 @@ def _bind_resolver_result(bind_key: str, result: Any) -> Any:
return result
def _parse_event_envelope(event_envelope_json: str | None) -> dict[str, Any] | None:
"""Parse an event envelope JSON string for context resolvers."""
if not event_envelope_json:
return None
try:
payload = json.loads(event_envelope_json)
except (TypeError, json.JSONDecodeError) as exc:
activity.logger.warning("Invalid event envelope JSON - %s", exc)
return None
if not isinstance(payload, dict):
activity.logger.warning(
"Invalid event envelope JSON - expected object, got %s",
type(payload).__name__,
)
return None
return payload
# ── Activities ─────────────────────────────────────────────────────────────────
@activity.defn
@@ -124,6 +143,7 @@ async def resolve_context(
from activity_core.context_resolvers.base import CONTEXT_RESOLVER_REGISTRY
snapshot: dict = {}
event_envelope = _parse_event_envelope(event_envelope_json)
for source in context_sources:
source_type = source.get("type", "")
query = source.get("query", "")
@@ -152,7 +172,7 @@ async def resolve_context(
continue
try:
resolved = resolver_cls().resolve(query, None, params)
resolved = resolver_cls().resolve(query, event_envelope, params)
snapshot[bind_key] = _bind_resolver_result(bind_key, resolved)
except Exception as exc:
if required: