fal 1.0.8__py3-none-any.whl → 1.1.1__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.

Files changed (48) hide show
  1. fal/_fal_version.py +2 -2
  2. fal/api.py +27 -26
  3. fal/cli/deploy.py +18 -8
  4. fal/toolkit/file/file.py +2 -0
  5. fal/toolkit/file/providers/fal.py +15 -3
  6. fal/toolkit/file/types.py +1 -1
  7. fal/workflows.py +1 -1
  8. {fal-1.0.8.dist-info → fal-1.1.1.dist-info}/METADATA +1 -1
  9. {fal-1.0.8.dist-info → fal-1.1.1.dist-info}/RECORD +47 -26
  10. {fal-1.0.8.dist-info → fal-1.1.1.dist-info}/WHEEL +1 -1
  11. openapi_fal_rest/api/comfy/__init__.py +0 -0
  12. openapi_fal_rest/api/comfy/create_workflow.py +172 -0
  13. openapi_fal_rest/api/comfy/delete_workflow.py +175 -0
  14. openapi_fal_rest/api/comfy/get_workflow.py +181 -0
  15. openapi_fal_rest/api/comfy/list_user_workflows.py +189 -0
  16. openapi_fal_rest/api/comfy/update_workflow.py +198 -0
  17. openapi_fal_rest/api/users/__init__.py +0 -0
  18. openapi_fal_rest/api/users/get_current_user.py +143 -0
  19. openapi_fal_rest/api/workflows/{create_or_update_workflow_workflows_post.py → create_workflow.py} +4 -4
  20. openapi_fal_rest/api/workflows/{get_workflows_workflows_get.py → list_user_workflows.py} +4 -4
  21. openapi_fal_rest/api/workflows/update_workflow.py +198 -0
  22. openapi_fal_rest/models/__init__.py +32 -10
  23. openapi_fal_rest/models/comfy_workflow_detail.py +109 -0
  24. openapi_fal_rest/models/comfy_workflow_item.py +88 -0
  25. openapi_fal_rest/models/comfy_workflow_schema.py +119 -0
  26. openapi_fal_rest/models/{execute_workflow_workflows_user_id_workflow_name_post_json_body_type_0.py → comfy_workflow_schema_extra_data.py} +5 -5
  27. openapi_fal_rest/models/{execute_workflow_workflows_user_id_workflow_name_post_response_200_type_0.py → comfy_workflow_schema_fal_inputs.py} +5 -5
  28. openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +44 -0
  29. openapi_fal_rest/models/{workflow_detail_contents_type_0.py → comfy_workflow_schema_prompt.py} +5 -5
  30. openapi_fal_rest/models/current_user.py +138 -0
  31. openapi_fal_rest/models/customer_details.py +8 -8
  32. openapi_fal_rest/models/lock_reason.py +3 -0
  33. openapi_fal_rest/models/page_comfy_workflow_item.py +107 -0
  34. openapi_fal_rest/models/team_role.py +10 -0
  35. openapi_fal_rest/models/typed_comfy_workflow.py +85 -0
  36. openapi_fal_rest/models/typed_comfy_workflow_update.py +95 -0
  37. openapi_fal_rest/models/typed_workflow_update.py +95 -0
  38. openapi_fal_rest/models/user_member.py +87 -0
  39. openapi_fal_rest/models/workflow_contents.py +20 -1
  40. openapi_fal_rest/models/workflow_contents_metadata.py +44 -0
  41. openapi_fal_rest/models/workflow_detail.py +18 -59
  42. openapi_fal_rest/models/workflow_detail_contents.py +44 -0
  43. openapi_fal_rest/models/workflow_item.py +19 -1
  44. openapi_fal_rest/api/workflows/execute_workflow_workflows_user_id_workflow_name_post.py +0 -268
  45. {fal-1.0.8.dist-info → fal-1.1.1.dist-info}/entry_points.txt +0 -0
  46. {fal-1.0.8.dist-info → fal-1.1.1.dist-info}/top_level.txt +0 -0
  47. /openapi_fal_rest/api/workflows/{delete_workflow_workflows_user_id_workflow_name_delete.py → delete_workflow.py} +0 -0
  48. /openapi_fal_rest/api/workflows/{get_workflow_workflows_user_id_workflow_name_get.py → get_workflow.py} +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.comfy_workflow_item import ComfyWorkflowItem
9
+
10
+
11
+ T = TypeVar("T", bound="PageComfyWorkflowItem")
12
+
13
+
14
+ @attr.s(auto_attribs=True)
15
+ class PageComfyWorkflowItem:
16
+ """
17
+ Attributes:
18
+ items (List['ComfyWorkflowItem']):
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["ComfyWorkflowItem"]
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.comfy_workflow_item import ComfyWorkflowItem
65
+
66
+ d = src_dict.copy()
67
+ items = []
68
+ _items = d.pop("items")
69
+ for items_item_data in _items:
70
+ items_item = ComfyWorkflowItem.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_comfy_workflow_item = cls(
83
+ items=items,
84
+ total=total,
85
+ page=page,
86
+ size=size,
87
+ pages=pages,
88
+ )
89
+
90
+ page_comfy_workflow_item.additional_properties = d
91
+ return page_comfy_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,10 @@
1
+ from enum import Enum
2
+
3
+
4
+ class TeamRole(str, Enum):
5
+ ADMIN = "Admin"
6
+ BILLING = "Billing"
7
+ DEVELOPER = "Developer"
8
+
9
+ def __str__(self) -> str:
10
+ return str(self.value)
@@ -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.comfy_workflow_schema import ComfyWorkflowSchema
7
+
8
+
9
+ T = TypeVar("T", bound="TypedComfyWorkflow")
10
+
11
+
12
+ @attr.s(auto_attribs=True)
13
+ class TypedComfyWorkflow:
14
+ """
15
+ Attributes:
16
+ title (str):
17
+ workflow (ComfyWorkflowSchema):
18
+ is_public (bool):
19
+ name (str):
20
+ """
21
+
22
+ title: str
23
+ workflow: "ComfyWorkflowSchema"
24
+ is_public: bool
25
+ name: str
26
+ additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> Dict[str, Any]:
29
+ title = self.title
30
+ workflow = self.workflow.to_dict()
31
+
32
+ is_public = self.is_public
33
+ name = self.name
34
+
35
+ field_dict: Dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "title": title,
40
+ "workflow": workflow,
41
+ "is_public": is_public,
42
+ "name": name,
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.comfy_workflow_schema import ComfyWorkflowSchema
51
+
52
+ d = src_dict.copy()
53
+ title = d.pop("title")
54
+
55
+ workflow = ComfyWorkflowSchema.from_dict(d.pop("workflow"))
56
+
57
+ is_public = d.pop("is_public")
58
+
59
+ name = d.pop("name")
60
+
61
+ typed_comfy_workflow = cls(
62
+ title=title,
63
+ workflow=workflow,
64
+ is_public=is_public,
65
+ name=name,
66
+ )
67
+
68
+ typed_comfy_workflow.additional_properties = d
69
+ return typed_comfy_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,95 @@
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.comfy_workflow_schema import ComfyWorkflowSchema
9
+
10
+
11
+ T = TypeVar("T", bound="TypedComfyWorkflowUpdate")
12
+
13
+
14
+ @attr.s(auto_attribs=True)
15
+ class TypedComfyWorkflowUpdate:
16
+ """
17
+ Attributes:
18
+ title (Union[Unset, str]):
19
+ workflow (Union[Unset, ComfyWorkflowSchema]):
20
+ is_public (Union[Unset, bool]):
21
+ name (Union[Unset, str]):
22
+ """
23
+
24
+ title: Union[Unset, str] = UNSET
25
+ workflow: Union[Unset, "ComfyWorkflowSchema"] = UNSET
26
+ is_public: Union[Unset, bool] = UNSET
27
+ name: Union[Unset, str] = UNSET
28
+ additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> Dict[str, Any]:
31
+ title = self.title
32
+ workflow: Union[Unset, Dict[str, Any]] = UNSET
33
+ if not isinstance(self.workflow, Unset):
34
+ workflow = self.workflow.to_dict()
35
+
36
+ is_public = self.is_public
37
+ name = self.name
38
+
39
+ field_dict: Dict[str, Any] = {}
40
+ field_dict.update(self.additional_properties)
41
+ field_dict.update({})
42
+ if title is not UNSET:
43
+ field_dict["title"] = title
44
+ if workflow is not UNSET:
45
+ field_dict["workflow"] = workflow
46
+ if is_public is not UNSET:
47
+ field_dict["is_public"] = is_public
48
+ if name is not UNSET:
49
+ field_dict["name"] = name
50
+
51
+ return field_dict
52
+
53
+ @classmethod
54
+ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
55
+ from ..models.comfy_workflow_schema import ComfyWorkflowSchema
56
+
57
+ d = src_dict.copy()
58
+ title = d.pop("title", UNSET)
59
+
60
+ _workflow = d.pop("workflow", UNSET)
61
+ workflow: Union[Unset, ComfyWorkflowSchema]
62
+ if isinstance(_workflow, Unset):
63
+ workflow = UNSET
64
+ else:
65
+ workflow = ComfyWorkflowSchema.from_dict(_workflow)
66
+
67
+ is_public = d.pop("is_public", UNSET)
68
+
69
+ name = d.pop("name", UNSET)
70
+
71
+ typed_comfy_workflow_update = cls(
72
+ title=title,
73
+ workflow=workflow,
74
+ is_public=is_public,
75
+ name=name,
76
+ )
77
+
78
+ typed_comfy_workflow_update.additional_properties = d
79
+ return typed_comfy_workflow_update
80
+
81
+ @property
82
+ def additional_keys(self) -> List[str]:
83
+ return list(self.additional_properties.keys())
84
+
85
+ def __getitem__(self, key: str) -> Any:
86
+ return self.additional_properties[key]
87
+
88
+ def __setitem__(self, key: str, value: Any) -> None:
89
+ self.additional_properties[key] = value
90
+
91
+ def __delitem__(self, key: str) -> None:
92
+ del self.additional_properties[key]
93
+
94
+ def __contains__(self, key: str) -> bool:
95
+ return key in self.additional_properties
@@ -0,0 +1,95 @@
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_contents import WorkflowContents
9
+
10
+
11
+ T = TypeVar("T", bound="TypedWorkflowUpdate")
12
+
13
+
14
+ @attr.s(auto_attribs=True)
15
+ class TypedWorkflowUpdate:
16
+ """
17
+ Attributes:
18
+ name (Union[Unset, str]):
19
+ title (Union[Unset, str]):
20
+ contents (Union[Unset, WorkflowContents]):
21
+ is_public (Union[Unset, bool]):
22
+ """
23
+
24
+ name: Union[Unset, str] = UNSET
25
+ title: Union[Unset, str] = UNSET
26
+ contents: Union[Unset, "WorkflowContents"] = UNSET
27
+ is_public: Union[Unset, bool] = UNSET
28
+ additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> Dict[str, Any]:
31
+ name = self.name
32
+ title = self.title
33
+ contents: Union[Unset, Dict[str, Any]] = UNSET
34
+ if not isinstance(self.contents, Unset):
35
+ contents = self.contents.to_dict()
36
+
37
+ is_public = self.is_public
38
+
39
+ field_dict: Dict[str, Any] = {}
40
+ field_dict.update(self.additional_properties)
41
+ field_dict.update({})
42
+ if name is not UNSET:
43
+ field_dict["name"] = name
44
+ if title is not UNSET:
45
+ field_dict["title"] = title
46
+ if contents is not UNSET:
47
+ field_dict["contents"] = contents
48
+ if is_public is not UNSET:
49
+ field_dict["is_public"] = is_public
50
+
51
+ return field_dict
52
+
53
+ @classmethod
54
+ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
55
+ from ..models.workflow_contents import WorkflowContents
56
+
57
+ d = src_dict.copy()
58
+ name = d.pop("name", UNSET)
59
+
60
+ title = d.pop("title", UNSET)
61
+
62
+ _contents = d.pop("contents", UNSET)
63
+ contents: Union[Unset, WorkflowContents]
64
+ if isinstance(_contents, Unset):
65
+ contents = UNSET
66
+ else:
67
+ contents = WorkflowContents.from_dict(_contents)
68
+
69
+ is_public = d.pop("is_public", UNSET)
70
+
71
+ typed_workflow_update = cls(
72
+ name=name,
73
+ title=title,
74
+ contents=contents,
75
+ is_public=is_public,
76
+ )
77
+
78
+ typed_workflow_update.additional_properties = d
79
+ return typed_workflow_update
80
+
81
+ @property
82
+ def additional_keys(self) -> List[str]:
83
+ return list(self.additional_properties.keys())
84
+
85
+ def __getitem__(self, key: str) -> Any:
86
+ return self.additional_properties[key]
87
+
88
+ def __setitem__(self, key: str, value: Any) -> None:
89
+ self.additional_properties[key] = value
90
+
91
+ def __delitem__(self, key: str) -> None:
92
+ del self.additional_properties[key]
93
+
94
+ def __contains__(self, key: str) -> bool:
95
+ return key in self.additional_properties
@@ -0,0 +1,87 @@
1
+ from typing import Any, Dict, List, Type, TypeVar
2
+
3
+ import attr
4
+
5
+ from ..models.team_role import TeamRole
6
+
7
+ T = TypeVar("T", bound="UserMember")
8
+
9
+
10
+ @attr.s(auto_attribs=True)
11
+ class UserMember:
12
+ """
13
+ Attributes:
14
+ auth_id (str):
15
+ nickname (str):
16
+ full_name (str):
17
+ is_owner (bool):
18
+ team_role (TeamRole): An enumeration.
19
+ """
20
+
21
+ auth_id: str
22
+ nickname: str
23
+ full_name: str
24
+ is_owner: bool
25
+ team_role: TeamRole
26
+ additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> Dict[str, Any]:
29
+ auth_id = self.auth_id
30
+ nickname = self.nickname
31
+ full_name = self.full_name
32
+ is_owner = self.is_owner
33
+ team_role = self.team_role.value
34
+
35
+ field_dict: Dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "auth_id": auth_id,
40
+ "nickname": nickname,
41
+ "full_name": full_name,
42
+ "is_owner": is_owner,
43
+ "team_role": team_role,
44
+ }
45
+ )
46
+
47
+ return field_dict
48
+
49
+ @classmethod
50
+ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
51
+ d = src_dict.copy()
52
+ auth_id = d.pop("auth_id")
53
+
54
+ nickname = d.pop("nickname")
55
+
56
+ full_name = d.pop("full_name")
57
+
58
+ is_owner = d.pop("is_owner")
59
+
60
+ team_role = TeamRole(d.pop("team_role"))
61
+
62
+ user_member = cls(
63
+ auth_id=auth_id,
64
+ nickname=nickname,
65
+ full_name=full_name,
66
+ is_owner=is_owner,
67
+ team_role=team_role,
68
+ )
69
+
70
+ user_member.additional_properties = d
71
+ return user_member
72
+
73
+ @property
74
+ def additional_keys(self) -> List[str]:
75
+ return list(self.additional_properties.keys())
76
+
77
+ def __getitem__(self, key: str) -> Any:
78
+ return self.additional_properties[key]
79
+
80
+ def __setitem__(self, key: str, value: Any) -> None:
81
+ self.additional_properties[key] = value
82
+
83
+ def __delitem__(self, key: str) -> None:
84
+ del self.additional_properties[key]
85
+
86
+ def __contains__(self, key: str) -> bool:
87
+ return key in self.additional_properties
@@ -1,8 +1,11 @@
1
- from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
1
+ from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union
2
2
 
3
3
  import attr
4
4
 
5
+ from ..types import UNSET, Unset
6
+
5
7
  if TYPE_CHECKING:
8
+ from ..models.workflow_contents_metadata import WorkflowContentsMetadata
6
9
  from ..models.workflow_contents_nodes import WorkflowContentsNodes
7
10
  from ..models.workflow_contents_output import WorkflowContentsOutput
8
11
  from ..models.workflow_schema import WorkflowSchema
@@ -20,6 +23,7 @@ class WorkflowContents:
20
23
  output (WorkflowContentsOutput):
21
24
  schema (WorkflowSchema):
22
25
  version (str):
26
+ metadata (Union[Unset, WorkflowContentsMetadata]):
23
27
  """
24
28
 
25
29
  name: str
@@ -27,6 +31,7 @@ class WorkflowContents:
27
31
  output: "WorkflowContentsOutput"
28
32
  schema: "WorkflowSchema"
29
33
  version: str
34
+ metadata: Union[Unset, "WorkflowContentsMetadata"] = UNSET
30
35
  additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
31
36
 
32
37
  def to_dict(self) -> Dict[str, Any]:
@@ -38,6 +43,9 @@ class WorkflowContents:
38
43
  schema = self.schema.to_dict()
39
44
 
40
45
  version = self.version
46
+ metadata: Union[Unset, Dict[str, Any]] = UNSET
47
+ if not isinstance(self.metadata, Unset):
48
+ metadata = self.metadata.to_dict()
41
49
 
42
50
  field_dict: Dict[str, Any] = {}
43
51
  field_dict.update(self.additional_properties)
@@ -50,11 +58,14 @@ class WorkflowContents:
50
58
  "version": version,
51
59
  }
52
60
  )
61
+ if metadata is not UNSET:
62
+ field_dict["metadata"] = metadata
53
63
 
54
64
  return field_dict
55
65
 
56
66
  @classmethod
57
67
  def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
68
+ from ..models.workflow_contents_metadata import WorkflowContentsMetadata
58
69
  from ..models.workflow_contents_nodes import WorkflowContentsNodes
59
70
  from ..models.workflow_contents_output import WorkflowContentsOutput
60
71
  from ..models.workflow_schema import WorkflowSchema
@@ -70,12 +81,20 @@ class WorkflowContents:
70
81
 
71
82
  version = d.pop("version")
72
83
 
84
+ _metadata = d.pop("metadata", UNSET)
85
+ metadata: Union[Unset, WorkflowContentsMetadata]
86
+ if isinstance(_metadata, Unset):
87
+ metadata = UNSET
88
+ else:
89
+ metadata = WorkflowContentsMetadata.from_dict(_metadata)
90
+
73
91
  workflow_contents = cls(
74
92
  name=name,
75
93
  nodes=nodes,
76
94
  output=output,
77
95
  schema=schema,
78
96
  version=version,
97
+ metadata=metadata,
79
98
  )
80
99
 
81
100
  workflow_contents.additional_properties = d
@@ -0,0 +1,44 @@
1
+ from typing import Any, Dict, List, Type, TypeVar
2
+
3
+ import attr
4
+
5
+ T = TypeVar("T", bound="WorkflowContentsMetadata")
6
+
7
+
8
+ @attr.s(auto_attribs=True)
9
+ class WorkflowContentsMetadata:
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_contents_metadata = cls()
26
+
27
+ workflow_contents_metadata.additional_properties = d
28
+ return workflow_contents_metadata
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