fal 0.12.2__py3-none-any.whl → 0.12.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fal might be problematic. Click here for more details.
- fal/__init__.py +11 -2
- fal/api.py +130 -50
- fal/app.py +81 -134
- fal/apps.py +24 -6
- fal/auth/__init__.py +14 -2
- fal/auth/auth0.py +34 -25
- fal/cli.py +9 -4
- fal/env.py +0 -4
- fal/flags.py +1 -0
- fal/logging/__init__.py +0 -2
- fal/logging/trace.py +8 -1
- fal/sdk.py +33 -6
- fal/toolkit/__init__.py +16 -0
- fal/workflows.py +481 -0
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/METADATA +4 -7
- fal-0.12.4.dist-info/RECORD +88 -0
- openapi_fal_rest/__init__.py +1 -0
- openapi_fal_rest/api/workflows/__init__.py +0 -0
- openapi_fal_rest/api/workflows/create_or_update_workflow_workflows_post.py +172 -0
- openapi_fal_rest/api/workflows/delete_workflow_workflows_user_id_workflow_name_delete.py +175 -0
- openapi_fal_rest/api/workflows/execute_workflow_workflows_user_id_workflow_name_post.py +268 -0
- openapi_fal_rest/api/workflows/get_workflow_workflows_user_id_workflow_name_get.py +181 -0
- openapi_fal_rest/api/workflows/get_workflows_workflows_get.py +189 -0
- openapi_fal_rest/models/__init__.py +34 -0
- openapi_fal_rest/models/app_metadata_response_app_metadata.py +1 -0
- openapi_fal_rest/models/customer_details.py +15 -14
- openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_json_body_type_0.py +44 -0
- openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_response_200_type_0.py +44 -0
- openapi_fal_rest/models/page_workflow_item.py +107 -0
- openapi_fal_rest/models/typed_workflow.py +85 -0
- openapi_fal_rest/models/workflow_contents.py +98 -0
- openapi_fal_rest/models/workflow_contents_nodes.py +59 -0
- openapi_fal_rest/models/workflow_contents_output.py +44 -0
- openapi_fal_rest/models/workflow_detail.py +149 -0
- openapi_fal_rest/models/workflow_detail_contents_type_0.py +44 -0
- openapi_fal_rest/models/workflow_item.py +80 -0
- openapi_fal_rest/models/workflow_node.py +74 -0
- openapi_fal_rest/models/workflow_node_type.py +9 -0
- openapi_fal_rest/models/workflow_schema.py +73 -0
- openapi_fal_rest/models/workflow_schema_input.py +44 -0
- openapi_fal_rest/models/workflow_schema_output.py +44 -0
- openapi_fal_rest/types.py +1 -0
- fal/logging/datadog.py +0 -78
- fal-0.12.2.dist-info/RECORD +0 -67
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/WHEEL +0 -0
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
from ..types import UNSET, Unset
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ..models.workflow_item import WorkflowItem
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
T = TypeVar("T", bound="PageWorkflowItem")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@attr.s(auto_attribs=True)
|
|
15
|
+
class PageWorkflowItem:
|
|
16
|
+
"""
|
|
17
|
+
Attributes:
|
|
18
|
+
items (List['WorkflowItem']):
|
|
19
|
+
total (Union[Unset, int]):
|
|
20
|
+
page (Union[Unset, int]):
|
|
21
|
+
size (Union[Unset, int]):
|
|
22
|
+
pages (Union[Unset, int]):
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
items: List["WorkflowItem"]
|
|
26
|
+
total: Union[Unset, int] = UNSET
|
|
27
|
+
page: Union[Unset, int] = UNSET
|
|
28
|
+
size: Union[Unset, int] = UNSET
|
|
29
|
+
pages: Union[Unset, int] = UNSET
|
|
30
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
31
|
+
|
|
32
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
33
|
+
items = []
|
|
34
|
+
for items_item_data in self.items:
|
|
35
|
+
items_item = items_item_data.to_dict()
|
|
36
|
+
|
|
37
|
+
items.append(items_item)
|
|
38
|
+
|
|
39
|
+
total = self.total
|
|
40
|
+
page = self.page
|
|
41
|
+
size = self.size
|
|
42
|
+
pages = self.pages
|
|
43
|
+
|
|
44
|
+
field_dict: Dict[str, Any] = {}
|
|
45
|
+
field_dict.update(self.additional_properties)
|
|
46
|
+
field_dict.update(
|
|
47
|
+
{
|
|
48
|
+
"items": items,
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
if total is not UNSET:
|
|
52
|
+
field_dict["total"] = total
|
|
53
|
+
if page is not UNSET:
|
|
54
|
+
field_dict["page"] = page
|
|
55
|
+
if size is not UNSET:
|
|
56
|
+
field_dict["size"] = size
|
|
57
|
+
if pages is not UNSET:
|
|
58
|
+
field_dict["pages"] = pages
|
|
59
|
+
|
|
60
|
+
return field_dict
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
64
|
+
from ..models.workflow_item import WorkflowItem
|
|
65
|
+
|
|
66
|
+
d = src_dict.copy()
|
|
67
|
+
items = []
|
|
68
|
+
_items = d.pop("items")
|
|
69
|
+
for items_item_data in _items:
|
|
70
|
+
items_item = WorkflowItem.from_dict(items_item_data)
|
|
71
|
+
|
|
72
|
+
items.append(items_item)
|
|
73
|
+
|
|
74
|
+
total = d.pop("total", UNSET)
|
|
75
|
+
|
|
76
|
+
page = d.pop("page", UNSET)
|
|
77
|
+
|
|
78
|
+
size = d.pop("size", UNSET)
|
|
79
|
+
|
|
80
|
+
pages = d.pop("pages", UNSET)
|
|
81
|
+
|
|
82
|
+
page_workflow_item = cls(
|
|
83
|
+
items=items,
|
|
84
|
+
total=total,
|
|
85
|
+
page=page,
|
|
86
|
+
size=size,
|
|
87
|
+
pages=pages,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
page_workflow_item.additional_properties = d
|
|
91
|
+
return page_workflow_item
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def additional_keys(self) -> List[str]:
|
|
95
|
+
return list(self.additional_properties.keys())
|
|
96
|
+
|
|
97
|
+
def __getitem__(self, key: str) -> Any:
|
|
98
|
+
return self.additional_properties[key]
|
|
99
|
+
|
|
100
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
101
|
+
self.additional_properties[key] = value
|
|
102
|
+
|
|
103
|
+
def __delitem__(self, key: str) -> None:
|
|
104
|
+
del self.additional_properties[key]
|
|
105
|
+
|
|
106
|
+
def __contains__(self, key: str) -> bool:
|
|
107
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from ..models.workflow_contents import WorkflowContents
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
T = TypeVar("T", bound="TypedWorkflow")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@attr.s(auto_attribs=True)
|
|
13
|
+
class TypedWorkflow:
|
|
14
|
+
"""
|
|
15
|
+
Attributes:
|
|
16
|
+
name (str):
|
|
17
|
+
title (str):
|
|
18
|
+
contents (WorkflowContents):
|
|
19
|
+
is_public (bool):
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
name: str
|
|
23
|
+
title: str
|
|
24
|
+
contents: "WorkflowContents"
|
|
25
|
+
is_public: bool
|
|
26
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
27
|
+
|
|
28
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
29
|
+
name = self.name
|
|
30
|
+
title = self.title
|
|
31
|
+
contents = self.contents.to_dict()
|
|
32
|
+
|
|
33
|
+
is_public = self.is_public
|
|
34
|
+
|
|
35
|
+
field_dict: Dict[str, Any] = {}
|
|
36
|
+
field_dict.update(self.additional_properties)
|
|
37
|
+
field_dict.update(
|
|
38
|
+
{
|
|
39
|
+
"name": name,
|
|
40
|
+
"title": title,
|
|
41
|
+
"contents": contents,
|
|
42
|
+
"is_public": is_public,
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return field_dict
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
50
|
+
from ..models.workflow_contents import WorkflowContents
|
|
51
|
+
|
|
52
|
+
d = src_dict.copy()
|
|
53
|
+
name = d.pop("name")
|
|
54
|
+
|
|
55
|
+
title = d.pop("title")
|
|
56
|
+
|
|
57
|
+
contents = WorkflowContents.from_dict(d.pop("contents"))
|
|
58
|
+
|
|
59
|
+
is_public = d.pop("is_public")
|
|
60
|
+
|
|
61
|
+
typed_workflow = cls(
|
|
62
|
+
name=name,
|
|
63
|
+
title=title,
|
|
64
|
+
contents=contents,
|
|
65
|
+
is_public=is_public,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
typed_workflow.additional_properties = d
|
|
69
|
+
return typed_workflow
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def additional_keys(self) -> List[str]:
|
|
73
|
+
return list(self.additional_properties.keys())
|
|
74
|
+
|
|
75
|
+
def __getitem__(self, key: str) -> Any:
|
|
76
|
+
return self.additional_properties[key]
|
|
77
|
+
|
|
78
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
79
|
+
self.additional_properties[key] = value
|
|
80
|
+
|
|
81
|
+
def __delitem__(self, key: str) -> None:
|
|
82
|
+
del self.additional_properties[key]
|
|
83
|
+
|
|
84
|
+
def __contains__(self, key: str) -> bool:
|
|
85
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from ..models.workflow_contents_nodes import WorkflowContentsNodes
|
|
7
|
+
from ..models.workflow_contents_output import WorkflowContentsOutput
|
|
8
|
+
from ..models.workflow_schema import WorkflowSchema
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
T = TypeVar("T", bound="WorkflowContents")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@attr.s(auto_attribs=True)
|
|
15
|
+
class WorkflowContents:
|
|
16
|
+
"""
|
|
17
|
+
Attributes:
|
|
18
|
+
name (str):
|
|
19
|
+
nodes (WorkflowContentsNodes):
|
|
20
|
+
output (WorkflowContentsOutput):
|
|
21
|
+
schema (WorkflowSchema):
|
|
22
|
+
version (str):
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
name: str
|
|
26
|
+
nodes: "WorkflowContentsNodes"
|
|
27
|
+
output: "WorkflowContentsOutput"
|
|
28
|
+
schema: "WorkflowSchema"
|
|
29
|
+
version: str
|
|
30
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
31
|
+
|
|
32
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
33
|
+
name = self.name
|
|
34
|
+
nodes = self.nodes.to_dict()
|
|
35
|
+
|
|
36
|
+
output = self.output.to_dict()
|
|
37
|
+
|
|
38
|
+
schema = self.schema.to_dict()
|
|
39
|
+
|
|
40
|
+
version = self.version
|
|
41
|
+
|
|
42
|
+
field_dict: Dict[str, Any] = {}
|
|
43
|
+
field_dict.update(self.additional_properties)
|
|
44
|
+
field_dict.update(
|
|
45
|
+
{
|
|
46
|
+
"name": name,
|
|
47
|
+
"nodes": nodes,
|
|
48
|
+
"output": output,
|
|
49
|
+
"schema": schema,
|
|
50
|
+
"version": version,
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
return field_dict
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
58
|
+
from ..models.workflow_contents_nodes import WorkflowContentsNodes
|
|
59
|
+
from ..models.workflow_contents_output import WorkflowContentsOutput
|
|
60
|
+
from ..models.workflow_schema import WorkflowSchema
|
|
61
|
+
|
|
62
|
+
d = src_dict.copy()
|
|
63
|
+
name = d.pop("name")
|
|
64
|
+
|
|
65
|
+
nodes = WorkflowContentsNodes.from_dict(d.pop("nodes"))
|
|
66
|
+
|
|
67
|
+
output = WorkflowContentsOutput.from_dict(d.pop("output"))
|
|
68
|
+
|
|
69
|
+
schema = WorkflowSchema.from_dict(d.pop("schema"))
|
|
70
|
+
|
|
71
|
+
version = d.pop("version")
|
|
72
|
+
|
|
73
|
+
workflow_contents = cls(
|
|
74
|
+
name=name,
|
|
75
|
+
nodes=nodes,
|
|
76
|
+
output=output,
|
|
77
|
+
schema=schema,
|
|
78
|
+
version=version,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
workflow_contents.additional_properties = d
|
|
82
|
+
return workflow_contents
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def additional_keys(self) -> List[str]:
|
|
86
|
+
return list(self.additional_properties.keys())
|
|
87
|
+
|
|
88
|
+
def __getitem__(self, key: str) -> Any:
|
|
89
|
+
return self.additional_properties[key]
|
|
90
|
+
|
|
91
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
92
|
+
self.additional_properties[key] = value
|
|
93
|
+
|
|
94
|
+
def __delitem__(self, key: str) -> None:
|
|
95
|
+
del self.additional_properties[key]
|
|
96
|
+
|
|
97
|
+
def __contains__(self, key: str) -> bool:
|
|
98
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from ..models.workflow_node import WorkflowNode
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
T = TypeVar("T", bound="WorkflowContentsNodes")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@attr.s(auto_attribs=True)
|
|
13
|
+
class WorkflowContentsNodes:
|
|
14
|
+
""" """
|
|
15
|
+
|
|
16
|
+
additional_properties: Dict[str, "WorkflowNode"] = attr.ib(init=False, factory=dict)
|
|
17
|
+
|
|
18
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
field_dict: Dict[str, Any] = {}
|
|
22
|
+
for prop_name, prop in self.additional_properties.items():
|
|
23
|
+
field_dict[prop_name] = prop.to_dict()
|
|
24
|
+
|
|
25
|
+
field_dict.update({})
|
|
26
|
+
|
|
27
|
+
return field_dict
|
|
28
|
+
|
|
29
|
+
@classmethod
|
|
30
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
31
|
+
from ..models.workflow_node import WorkflowNode
|
|
32
|
+
|
|
33
|
+
d = src_dict.copy()
|
|
34
|
+
workflow_contents_nodes = cls()
|
|
35
|
+
|
|
36
|
+
additional_properties = {}
|
|
37
|
+
for prop_name, prop_dict in d.items():
|
|
38
|
+
additional_property = WorkflowNode.from_dict(prop_dict)
|
|
39
|
+
|
|
40
|
+
additional_properties[prop_name] = additional_property
|
|
41
|
+
|
|
42
|
+
workflow_contents_nodes.additional_properties = additional_properties
|
|
43
|
+
return workflow_contents_nodes
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def additional_keys(self) -> List[str]:
|
|
47
|
+
return list(self.additional_properties.keys())
|
|
48
|
+
|
|
49
|
+
def __getitem__(self, key: str) -> "WorkflowNode":
|
|
50
|
+
return self.additional_properties[key]
|
|
51
|
+
|
|
52
|
+
def __setitem__(self, key: str, value: "WorkflowNode") -> None:
|
|
53
|
+
self.additional_properties[key] = value
|
|
54
|
+
|
|
55
|
+
def __delitem__(self, key: str) -> None:
|
|
56
|
+
del self.additional_properties[key]
|
|
57
|
+
|
|
58
|
+
def __contains__(self, key: str) -> bool:
|
|
59
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T", bound="WorkflowContentsOutput")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@attr.s(auto_attribs=True)
|
|
9
|
+
class WorkflowContentsOutput:
|
|
10
|
+
""" """
|
|
11
|
+
|
|
12
|
+
additional_properties: Dict[str, str] = attr.ib(init=False, factory=dict)
|
|
13
|
+
|
|
14
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
15
|
+
|
|
16
|
+
field_dict: Dict[str, Any] = {}
|
|
17
|
+
field_dict.update(self.additional_properties)
|
|
18
|
+
field_dict.update({})
|
|
19
|
+
|
|
20
|
+
return field_dict
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
24
|
+
d = src_dict.copy()
|
|
25
|
+
workflow_contents_output = cls()
|
|
26
|
+
|
|
27
|
+
workflow_contents_output.additional_properties = d
|
|
28
|
+
return workflow_contents_output
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def additional_keys(self) -> List[str]:
|
|
32
|
+
return list(self.additional_properties.keys())
|
|
33
|
+
|
|
34
|
+
def __getitem__(self, key: str) -> str:
|
|
35
|
+
return self.additional_properties[key]
|
|
36
|
+
|
|
37
|
+
def __setitem__(self, key: str, value: str) -> None:
|
|
38
|
+
self.additional_properties[key] = value
|
|
39
|
+
|
|
40
|
+
def __delitem__(self, key: str) -> None:
|
|
41
|
+
del self.additional_properties[key]
|
|
42
|
+
|
|
43
|
+
def __contains__(self, key: str) -> bool:
|
|
44
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast
|
|
3
|
+
|
|
4
|
+
import attr
|
|
5
|
+
from dateutil.parser import isoparse
|
|
6
|
+
|
|
7
|
+
from ..types import UNSET, Unset
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from ..models.workflow_detail_contents_type_0 import WorkflowDetailContentsType0
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
T = TypeVar("T", bound="WorkflowDetail")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@attr.s(auto_attribs=True)
|
|
17
|
+
class WorkflowDetail:
|
|
18
|
+
"""
|
|
19
|
+
Attributes:
|
|
20
|
+
name (str):
|
|
21
|
+
title (str):
|
|
22
|
+
is_public (bool):
|
|
23
|
+
user_id (str):
|
|
24
|
+
created_at (datetime.datetime):
|
|
25
|
+
contents (Union['WorkflowDetailContentsType0', List[Any], Unset, bool, float, int, str]):
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
name: str
|
|
29
|
+
title: str
|
|
30
|
+
is_public: bool
|
|
31
|
+
user_id: str
|
|
32
|
+
created_at: datetime.datetime
|
|
33
|
+
contents: Union["WorkflowDetailContentsType0", List[Any], Unset, bool, float, int, str] = UNSET
|
|
34
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
35
|
+
|
|
36
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
37
|
+
from ..models.workflow_detail_contents_type_0 import WorkflowDetailContentsType0
|
|
38
|
+
|
|
39
|
+
name = self.name
|
|
40
|
+
title = self.title
|
|
41
|
+
is_public = self.is_public
|
|
42
|
+
user_id = self.user_id
|
|
43
|
+
created_at = self.created_at.isoformat()
|
|
44
|
+
|
|
45
|
+
contents: Union[Dict[str, Any], List[Any], Unset, bool, float, int, str]
|
|
46
|
+
if isinstance(self.contents, Unset):
|
|
47
|
+
contents = UNSET
|
|
48
|
+
|
|
49
|
+
elif isinstance(self.contents, WorkflowDetailContentsType0):
|
|
50
|
+
contents = UNSET
|
|
51
|
+
if not isinstance(self.contents, Unset):
|
|
52
|
+
contents = self.contents.to_dict()
|
|
53
|
+
|
|
54
|
+
elif isinstance(self.contents, list):
|
|
55
|
+
contents = UNSET
|
|
56
|
+
if not isinstance(self.contents, Unset):
|
|
57
|
+
contents = self.contents
|
|
58
|
+
|
|
59
|
+
else:
|
|
60
|
+
contents = self.contents
|
|
61
|
+
|
|
62
|
+
field_dict: Dict[str, Any] = {}
|
|
63
|
+
field_dict.update(self.additional_properties)
|
|
64
|
+
field_dict.update(
|
|
65
|
+
{
|
|
66
|
+
"name": name,
|
|
67
|
+
"title": title,
|
|
68
|
+
"is_public": is_public,
|
|
69
|
+
"user_id": user_id,
|
|
70
|
+
"created_at": created_at,
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
if contents is not UNSET:
|
|
74
|
+
field_dict["contents"] = contents
|
|
75
|
+
|
|
76
|
+
return field_dict
|
|
77
|
+
|
|
78
|
+
@classmethod
|
|
79
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
80
|
+
from ..models.workflow_detail_contents_type_0 import WorkflowDetailContentsType0
|
|
81
|
+
|
|
82
|
+
d = src_dict.copy()
|
|
83
|
+
name = d.pop("name")
|
|
84
|
+
|
|
85
|
+
title = d.pop("title")
|
|
86
|
+
|
|
87
|
+
is_public = d.pop("is_public")
|
|
88
|
+
|
|
89
|
+
user_id = d.pop("user_id")
|
|
90
|
+
|
|
91
|
+
created_at = isoparse(d.pop("created_at"))
|
|
92
|
+
|
|
93
|
+
def _parse_contents(
|
|
94
|
+
data: object,
|
|
95
|
+
) -> Union["WorkflowDetailContentsType0", List[Any], Unset, bool, float, int, str]:
|
|
96
|
+
if isinstance(data, Unset):
|
|
97
|
+
return data
|
|
98
|
+
try:
|
|
99
|
+
if not isinstance(data, dict):
|
|
100
|
+
raise TypeError()
|
|
101
|
+
_contents_type_0 = data
|
|
102
|
+
contents_type_0: Union[Unset, WorkflowDetailContentsType0]
|
|
103
|
+
if isinstance(_contents_type_0, Unset):
|
|
104
|
+
contents_type_0 = UNSET
|
|
105
|
+
else:
|
|
106
|
+
contents_type_0 = WorkflowDetailContentsType0.from_dict(_contents_type_0)
|
|
107
|
+
|
|
108
|
+
return contents_type_0
|
|
109
|
+
except: # noqa: E722
|
|
110
|
+
pass
|
|
111
|
+
try:
|
|
112
|
+
if not isinstance(data, list):
|
|
113
|
+
raise TypeError()
|
|
114
|
+
contents_type_1 = cast(List[Any], data)
|
|
115
|
+
|
|
116
|
+
return contents_type_1
|
|
117
|
+
except: # noqa: E722
|
|
118
|
+
pass
|
|
119
|
+
return cast(Union["WorkflowDetailContentsType0", List[Any], Unset, bool, float, int, str], data)
|
|
120
|
+
|
|
121
|
+
contents = _parse_contents(d.pop("contents", UNSET))
|
|
122
|
+
|
|
123
|
+
workflow_detail = cls(
|
|
124
|
+
name=name,
|
|
125
|
+
title=title,
|
|
126
|
+
is_public=is_public,
|
|
127
|
+
user_id=user_id,
|
|
128
|
+
created_at=created_at,
|
|
129
|
+
contents=contents,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
workflow_detail.additional_properties = d
|
|
133
|
+
return workflow_detail
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def additional_keys(self) -> List[str]:
|
|
137
|
+
return list(self.additional_properties.keys())
|
|
138
|
+
|
|
139
|
+
def __getitem__(self, key: str) -> Any:
|
|
140
|
+
return self.additional_properties[key]
|
|
141
|
+
|
|
142
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
143
|
+
self.additional_properties[key] = value
|
|
144
|
+
|
|
145
|
+
def __delitem__(self, key: str) -> None:
|
|
146
|
+
del self.additional_properties[key]
|
|
147
|
+
|
|
148
|
+
def __contains__(self, key: str) -> bool:
|
|
149
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T", bound="WorkflowDetailContentsType0")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@attr.s(auto_attribs=True)
|
|
9
|
+
class WorkflowDetailContentsType0:
|
|
10
|
+
""" """
|
|
11
|
+
|
|
12
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
13
|
+
|
|
14
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
15
|
+
|
|
16
|
+
field_dict: Dict[str, Any] = {}
|
|
17
|
+
field_dict.update(self.additional_properties)
|
|
18
|
+
field_dict.update({})
|
|
19
|
+
|
|
20
|
+
return field_dict
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
24
|
+
d = src_dict.copy()
|
|
25
|
+
workflow_detail_contents_type_0 = cls()
|
|
26
|
+
|
|
27
|
+
workflow_detail_contents_type_0.additional_properties = d
|
|
28
|
+
return workflow_detail_contents_type_0
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def additional_keys(self) -> List[str]:
|
|
32
|
+
return list(self.additional_properties.keys())
|
|
33
|
+
|
|
34
|
+
def __getitem__(self, key: str) -> Any:
|
|
35
|
+
return self.additional_properties[key]
|
|
36
|
+
|
|
37
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
38
|
+
self.additional_properties[key] = value
|
|
39
|
+
|
|
40
|
+
def __delitem__(self, key: str) -> None:
|
|
41
|
+
del self.additional_properties[key]
|
|
42
|
+
|
|
43
|
+
def __contains__(self, key: str) -> bool:
|
|
44
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
from typing import Any, Dict, List, Type, TypeVar
|
|
3
|
+
|
|
4
|
+
import attr
|
|
5
|
+
from dateutil.parser import isoparse
|
|
6
|
+
|
|
7
|
+
T = TypeVar("T", bound="WorkflowItem")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@attr.s(auto_attribs=True)
|
|
11
|
+
class WorkflowItem:
|
|
12
|
+
"""
|
|
13
|
+
Attributes:
|
|
14
|
+
name (str):
|
|
15
|
+
title (str):
|
|
16
|
+
user_id (str):
|
|
17
|
+
created_at (datetime.datetime):
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
name: str
|
|
21
|
+
title: str
|
|
22
|
+
user_id: str
|
|
23
|
+
created_at: datetime.datetime
|
|
24
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
25
|
+
|
|
26
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
27
|
+
name = self.name
|
|
28
|
+
title = self.title
|
|
29
|
+
user_id = self.user_id
|
|
30
|
+
created_at = self.created_at.isoformat()
|
|
31
|
+
|
|
32
|
+
field_dict: Dict[str, Any] = {}
|
|
33
|
+
field_dict.update(self.additional_properties)
|
|
34
|
+
field_dict.update(
|
|
35
|
+
{
|
|
36
|
+
"name": name,
|
|
37
|
+
"title": title,
|
|
38
|
+
"user_id": user_id,
|
|
39
|
+
"created_at": created_at,
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
return field_dict
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
47
|
+
d = src_dict.copy()
|
|
48
|
+
name = d.pop("name")
|
|
49
|
+
|
|
50
|
+
title = d.pop("title")
|
|
51
|
+
|
|
52
|
+
user_id = d.pop("user_id")
|
|
53
|
+
|
|
54
|
+
created_at = isoparse(d.pop("created_at"))
|
|
55
|
+
|
|
56
|
+
workflow_item = cls(
|
|
57
|
+
name=name,
|
|
58
|
+
title=title,
|
|
59
|
+
user_id=user_id,
|
|
60
|
+
created_at=created_at,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
workflow_item.additional_properties = d
|
|
64
|
+
return workflow_item
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def additional_keys(self) -> List[str]:
|
|
68
|
+
return list(self.additional_properties.keys())
|
|
69
|
+
|
|
70
|
+
def __getitem__(self, key: str) -> Any:
|
|
71
|
+
return self.additional_properties[key]
|
|
72
|
+
|
|
73
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
74
|
+
self.additional_properties[key] = value
|
|
75
|
+
|
|
76
|
+
def __delitem__(self, key: str) -> None:
|
|
77
|
+
del self.additional_properties[key]
|
|
78
|
+
|
|
79
|
+
def __contains__(self, key: str) -> bool:
|
|
80
|
+
return key in self.additional_properties
|