from dataclasses import dataclass, field
from typing import Any, Dict, List, Union
@dataclass
class Task:
kind: str
label: str
attributes: Dict
task: Dict
description: str = ""
task_id: Union[str, None] = field(default=None, init=False)
optimization: Union[Dict[str, Any], None] = field(default=None)
dependencies: Dict = field(default_factory=dict)
soft_dependencies: List = field(default_factory=list)
if_dependencies: List = field(default_factory=list)
def __post_init__(self):
self.attributes["kind"] = self.kind
def to_json(self):
rv = {
"kind": self.kind,
"label": self.label,
"description": self.description,
"attributes": self.attributes,
"dependencies": self.dependencies,
"soft_dependencies": self.soft_dependencies,
"if_dependencies": self.if_dependencies,
"optimization": self.optimization,
"task": self.task,
}
if self.task_id:
rv["task_id"] = self.task_id
return rv
@classmethod
def from_json(cls, task_dict):
rv = cls(
kind=task_dict["kind"],
label=task_dict["label"],
description=task_dict.get("description", ""),
attributes=task_dict["attributes"],
task=task_dict["task"],
optimization=task_dict["optimization"],
dependencies=task_dict.get("dependencies"),
soft_dependencies=task_dict.get("soft_dependencies"),
if_dependencies=task_dict.get("if_dependencies"),
)
if "task_id" in task_dict:
rv.task_id = task_dict["task_id"]
return rv