diff --git a/orquesta/specs/native/v1/models.py b/orquesta/specs/native/v1/models.py index 1712dfac..534d167b 100644 --- a/orquesta/specs/native/v1/models.py +++ b/orquesta/specs/native/v1/models.py @@ -164,6 +164,7 @@ def render(self, in_ctx): action_specs.append(action_spec) else: + item_ctx_value = ctx_util.copy_context(in_ctx) items_spec = self.get_items_spec() if " in " not in items_spec.items: @@ -189,7 +190,7 @@ def render(self, in_ctx): elif item_keys and len(item_keys) == 1: item = {item_keys[0]: item} - item_ctx_value = ctx_util.set_current_item(in_ctx, item) + item_ctx_value = ctx_util.set_current_item(item_ctx_value, item) action_spec = { "action": expr_base.evaluate(self.action, item_ctx_value), diff --git a/orquesta/utils/context.py b/orquesta/utils/context.py index b720e0ae..fc0a075f 100644 --- a/orquesta/utils/context.py +++ b/orquesta/utils/context.py @@ -40,11 +40,19 @@ def set_current_task(context, task): return ctx -def set_current_item(context, item): +def copy_context(context): if context and not isinstance(context, dict): raise TypeError("The context is not type of dict.") ctx = json_util.deepcopy(context) if context else dict() + return ctx + + +def set_current_item(context, item): + if context and not isinstance(context, dict): + raise TypeError("The context is not type of dict.") + + ctx = {**context} ctx["__current_item"] = item return ctx