Skip to content

Commit

Permalink
Feature: Task.to_dict
Browse files Browse the repository at this point in the history
  • Loading branch information
psrok1 committed May 25, 2023
1 parent e76a0a8 commit 612ce4f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
2 changes: 1 addition & 1 deletion karton/core/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "5.1.0"
__version__ = "5.2.0"
53 changes: 32 additions & 21 deletions karton/core/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,37 @@ def merge_persistent_payload(self, other_task: "Task") -> None:
# Delete conflicting non-persistent payload
del self.payload[name]

def to_dict(self) -> Dict[str, Any]:
"""
Transform task data into dictionary
:return: Task data dictionary
:meta private:
"""
def serialize_resources(obj):
if type(obj) is dict:
return {k: serialize_resources(v) for k, v in obj.items()}
elif type(obj) is list or type(obj) is tuple:
return [serialize_resources(v) for v in obj]
elif isinstance(obj, ResourceBase):
return {"__karton_resource__": obj.to_dict()}
else:
return obj

return {
"uid": self.uid,
"root_uid": self.root_uid,
"parent_uid": self.parent_uid,
"orig_uid": self.orig_uid,
"status": self.status.value,
"priority": self.priority.value,
"last_update": self.last_update,
"payload": serialize_resources(self.payload),
"payload_persistent": serialize_resources(self.payload_persistent),
"headers": self.headers,
"error": self.error,
}

def serialize(self, indent: Optional[int] = None) -> str:
"""
Serialize task data into JSON string
Expand All @@ -235,28 +266,8 @@ def serialize(self, indent: Optional[int] = None) -> str:
:meta private:
"""

class KartonResourceEncoder(json.JSONEncoder):
def default(kself, obj: Any):
if isinstance(obj, ResourceBase):
return {"__karton_resource__": obj.to_dict()}
return json.JSONEncoder.default(kself, obj)

return json.dumps(
{
"uid": self.uid,
"root_uid": self.root_uid,
"parent_uid": self.parent_uid,
"orig_uid": self.orig_uid,
"status": self.status.value,
"priority": self.priority.value,
"last_update": self.last_update,
"payload": self.payload,
"payload_persistent": self.payload_persistent,
"headers": self.headers,
"error": self.error,
},
cls=KartonResourceEncoder,
self.to_dict(),
indent=indent,
sort_keys=True,
)
Expand Down

0 comments on commit 612ce4f

Please sign in to comment.