generated from coulomb/repo-seed
Add event-payload context resolver
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user