def __compile( cls, klass: "WorkflowTemplate", name: str, bases: Tuple[Type["WorkflowTemplate"], ...], props: Dict[str, Any], **kwargs, ): tasks: List[V1alpha1DAGTask] = [] templates: List[V1alpha1Template] = [] scopes: Dict[str, List[Any]] = {} # get scopes first for key, prop in props.items(): scope = getattr(prop, "__scope__", None) if scope is None: continue scoped_objects = [prop] scoped_objects.extend(scopes.get(scope, [])) scopes[scope] = scoped_objects for key, prop in props.items(): model = getattr(prop, "__model__", None) if model is None: continue template: Optional[V1alpha1Template] = None # V1alpha1Template if issubclass(model, V1alpha1Template): template = prop # closures require special treatment if hasattr(template, "__closure__") and template.script is not None: template = cls.__compile_closure(template, scopes) templates.append(template) # V1alpha1DAGTask elif issubclass(model, V1alpha1DAGTask): task = prop tasks.append(task) if tasks: main_template = V1alpha1Template(name="main") main_template.dag = V1alpha1DAGTemplate(tasks=tasks) templates.insert(0, main_template) spec_dict: dict = klass.spec spec_dict["entrypoint"] = spec_dict.get("entrypoint", "main") spec_dict["templates"] = templates klass.spec: V1alpha1WorkflowTemplateSpec = V1alpha1WorkflowTemplateSpec( **spec_dict)
def __compile( cls, klass: "Workflow", name: str, bases: Tuple[Type["Workflow"], ...], props: Dict[str, Any], **kwargs, ): tasks: List[V1alpha1DAGTask] = [] templates: List[V1alpha1Template] = [] for key, prop in props.items(): model = getattr(prop, "__model__", None) if model is None: continue template: Optional[V1alpha1Template] = None # V1alpha1Template if issubclass(model, V1alpha1Template): template = prop templates.append(template) # V1alpha1DAGTask elif issubclass(model, V1alpha1DAGTask): task = prop tasks.append(task) if tasks: main_template = V1alpha1Template(name="main") main_template.dag = V1alpha1DAGTemplate(tasks=tasks) templates.insert(0, main_template) spec_dict: dict = klass.spec spec_dict["entrypoint"] = props.get("entrypoint", "main") spec_dict["templates"] = templates klass.spec: V1alpha1WorkflowSpec = V1alpha1WorkflowSpec(**spec_dict)