592:def create_datamodel_action_callable(action: DataModel) -> "Callable | None":
593-    data_elements = [_create_dataitem_callable(item) for item in action.data]
594-    data_elements.extend([create_script_action_callable(script) for script in action.scripts])
595-
596-    if not data_elements:
597-        return None
598-
599-    initialized = False
600-
601-    def datamodel(*args, **kwargs):
602-        nonlocal initialized
603-        if initialized:
604-            return
605-        initialized = True
606-
607-        for act in data_elements:
608-            act(**kwargs)
609-
610-    return datamodel
611-
612-
613-class ExecuteBlock(CallableAction):
614-    """Parses the children as <executable> content XML into a callable."""
615-
616-    def __init__(self, content: ExecutableContent):
617-        super().__init__()
618-        self.action = content
619-        self.action_callables = [create_action_callable(action) for action in content.actions]
620-
621-    def __call__(self, *args, **kwargs):
622-        for action in self.action_callables:
623-            action(*args, **kwargs)
624-
625-
626-class DoneDataCallable(CallableAction):
627-    """Evaluates <donedata> params/content and returns the data for done events."""
628-
629-    def __init__(self, donedata: DoneData):
630-        super().__init__()
631-        self.action = donedata
632-        self.donedata = donedata
