dart-tools 0.6.6__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 dart-tools might be problematic. Click here for more details.

Files changed (256) hide show
  1. dart/__init__.py +18 -0
  2. dart/dart.py +1134 -0
  3. dart/exception.py +6 -0
  4. dart/generated/__init__.py +8 -0
  5. dart/generated/api/__init__.py +1 -0
  6. dart/generated/api/attachments/__init__.py +0 -0
  7. dart/generated/api/attachments/attachments_list.py +169 -0
  8. dart/generated/api/comments/__init__.py +0 -0
  9. dart/generated/api/comments/comments_list.py +278 -0
  10. dart/generated/api/dartboards/__init__.py +0 -0
  11. dart/generated/api/dartboards/dartboards_list.py +271 -0
  12. dart/generated/api/dashboards/__init__.py +0 -0
  13. dart/generated/api/dashboards/dashboards_list.py +184 -0
  14. dart/generated/api/docs/__init__.py +0 -0
  15. dart/generated/api/docs/docs_list.py +334 -0
  16. dart/generated/api/folders/__init__.py +0 -0
  17. dart/generated/api/folders/folders_list.py +234 -0
  18. dart/generated/api/form_fields/__init__.py +0 -0
  19. dart/generated/api/form_fields/form_fields_list.py +169 -0
  20. dart/generated/api/forms/__init__.py +0 -0
  21. dart/generated/api/forms/forms_list.py +169 -0
  22. dart/generated/api/layouts/__init__.py +0 -0
  23. dart/generated/api/layouts/layouts_list.py +169 -0
  24. dart/generated/api/links/__init__.py +0 -0
  25. dart/generated/api/links/links_list.py +169 -0
  26. dart/generated/api/options/__init__.py +0 -0
  27. dart/generated/api/options/options_list.py +229 -0
  28. dart/generated/api/properties/__init__.py +0 -0
  29. dart/generated/api/properties/properties_list.py +204 -0
  30. dart/generated/api/reactions/__init__.py +0 -0
  31. dart/generated/api/reactions/reactions_list.py +169 -0
  32. dart/generated/api/relationship_kinds/__init__.py +0 -0
  33. dart/generated/api/relationship_kinds/relationship_kinds_list.py +169 -0
  34. dart/generated/api/relationships/__init__.py +0 -0
  35. dart/generated/api/relationships/relationships_list.py +169 -0
  36. dart/generated/api/spaces/__init__.py +0 -0
  37. dart/generated/api/spaces/spaces_list.py +214 -0
  38. dart/generated/api/statuses/__init__.py +0 -0
  39. dart/generated/api/statuses/statuses_list.py +249 -0
  40. dart/generated/api/task_doc_relationships/__init__.py +0 -0
  41. dart/generated/api/task_doc_relationships/task_doc_relationships_list.py +169 -0
  42. dart/generated/api/task_kinds/__init__.py +0 -0
  43. dart/generated/api/task_kinds/task_kinds_list.py +204 -0
  44. dart/generated/api/tasks/__init__.py +0 -0
  45. dart/generated/api/tasks/tasks_list.py +446 -0
  46. dart/generated/api/tenants/__init__.py +0 -0
  47. dart/generated/api/tenants/tenants_list.py +169 -0
  48. dart/generated/api/transactions/__init__.py +0 -0
  49. dart/generated/api/transactions/transactions_create.py +176 -0
  50. dart/generated/api/user_dartboard_layouts/__init__.py +0 -0
  51. dart/generated/api/user_dartboard_layouts/user_dartboard_layouts_list.py +169 -0
  52. dart/generated/api/user_data/__init__.py +0 -0
  53. dart/generated/api/user_data/user_data_entity_retrieve.py +580 -0
  54. dart/generated/api/users/__init__.py +0 -0
  55. dart/generated/api/users/users_list.py +214 -0
  56. dart/generated/api/views/__init__.py +0 -0
  57. dart/generated/api/views/views_list.py +184 -0
  58. dart/generated/api/webhooks/__init__.py +0 -0
  59. dart/generated/api/webhooks/webhooks_list.py +169 -0
  60. dart/generated/client.py +268 -0
  61. dart/generated/errors.py +16 -0
  62. dart/generated/models/__init__.py +371 -0
  63. dart/generated/models/attachment.py +112 -0
  64. dart/generated/models/attachment_create.py +121 -0
  65. dart/generated/models/attachment_update.py +125 -0
  66. dart/generated/models/bar_chart_adtl.py +72 -0
  67. dart/generated/models/brainstorm.py +149 -0
  68. dart/generated/models/brainstorm_create.py +134 -0
  69. dart/generated/models/brainstorm_state.py +10 -0
  70. dart/generated/models/brainstorm_update.py +153 -0
  71. dart/generated/models/burn_up_chart_adtl.py +103 -0
  72. dart/generated/models/chart.py +207 -0
  73. dart/generated/models/chart_type.py +13 -0
  74. dart/generated/models/comment.py +207 -0
  75. dart/generated/models/comment_create.py +146 -0
  76. dart/generated/models/comment_reaction.py +84 -0
  77. dart/generated/models/comment_reaction_create.py +82 -0
  78. dart/generated/models/comment_reaction_update.py +87 -0
  79. dart/generated/models/comment_update.py +148 -0
  80. dart/generated/models/dartboard.py +264 -0
  81. dart/generated/models/dartboard_create.py +267 -0
  82. dart/generated/models/dartboard_kind.py +12 -0
  83. dart/generated/models/dartboard_update.py +269 -0
  84. dart/generated/models/dartboards_list_kind.py +12 -0
  85. dart/generated/models/dashboard.py +185 -0
  86. dart/generated/models/dashboard_create.py +171 -0
  87. dart/generated/models/dashboard_update.py +173 -0
  88. dart/generated/models/discord_integration.py +72 -0
  89. dart/generated/models/doc.py +243 -0
  90. dart/generated/models/doc_create.py +295 -0
  91. dart/generated/models/doc_source_type.py +13 -0
  92. dart/generated/models/doc_update.py +295 -0
  93. dart/generated/models/entity_name.py +22 -0
  94. dart/generated/models/event.py +420 -0
  95. dart/generated/models/event_actor.py +18 -0
  96. dart/generated/models/event_create.py +158 -0
  97. dart/generated/models/event_kind.py +88 -0
  98. dart/generated/models/event_subscription.py +74 -0
  99. dart/generated/models/event_subscription_update.py +173 -0
  100. dart/generated/models/filter_applicability.py +22 -0
  101. dart/generated/models/filter_assignee.py +116 -0
  102. dart/generated/models/filter_connector.py +9 -0
  103. dart/generated/models/filter_group.py +112 -0
  104. dart/generated/models/filter_search.py +82 -0
  105. dart/generated/models/filter_set.py +116 -0
  106. dart/generated/models/folder.py +150 -0
  107. dart/generated/models/folder_create.py +150 -0
  108. dart/generated/models/folder_kind.py +10 -0
  109. dart/generated/models/folder_update.py +152 -0
  110. dart/generated/models/folders_list_kind.py +10 -0
  111. dart/generated/models/form.py +147 -0
  112. dart/generated/models/form_create.py +141 -0
  113. dart/generated/models/form_field.py +144 -0
  114. dart/generated/models/form_field_create.py +129 -0
  115. dart/generated/models/form_field_update.py +132 -0
  116. dart/generated/models/form_update.py +142 -0
  117. dart/generated/models/github_integration.py +163 -0
  118. dart/generated/models/github_integration_tenant_extension_status.py +11 -0
  119. dart/generated/models/google_data.py +94 -0
  120. dart/generated/models/icon_kind.py +10 -0
  121. dart/generated/models/layout.py +167 -0
  122. dart/generated/models/layout_config.py +70 -0
  123. dart/generated/models/layout_create.py +130 -0
  124. dart/generated/models/layout_kind.py +11 -0
  125. dart/generated/models/layout_kind_config_map.py +56 -0
  126. dart/generated/models/layout_update.py +130 -0
  127. dart/generated/models/line_chart_adtl.py +72 -0
  128. dart/generated/models/models_response.py +671 -0
  129. dart/generated/models/notification.py +120 -0
  130. dart/generated/models/notification_update.py +100 -0
  131. dart/generated/models/notion_integration.py +90 -0
  132. dart/generated/models/notion_integration_tenant_extension_status.py +10 -0
  133. dart/generated/models/number_chart_adtl.py +85 -0
  134. dart/generated/models/number_chart_aggregation.py +10 -0
  135. dart/generated/models/operation.py +874 -0
  136. dart/generated/models/operation_kind.py +12 -0
  137. dart/generated/models/operation_model_kind.py +36 -0
  138. dart/generated/models/option.py +118 -0
  139. dart/generated/models/option_create.py +105 -0
  140. dart/generated/models/option_update.py +107 -0
  141. dart/generated/models/paginated_attachment_list.py +122 -0
  142. dart/generated/models/paginated_comment_list.py +122 -0
  143. dart/generated/models/paginated_comment_reaction_list.py +122 -0
  144. dart/generated/models/paginated_dartboard_list.py +122 -0
  145. dart/generated/models/paginated_dashboard_list.py +122 -0
  146. dart/generated/models/paginated_doc_list.py +122 -0
  147. dart/generated/models/paginated_folder_list.py +122 -0
  148. dart/generated/models/paginated_form_field_list.py +122 -0
  149. dart/generated/models/paginated_form_list.py +122 -0
  150. dart/generated/models/paginated_layout_list.py +122 -0
  151. dart/generated/models/paginated_option_list.py +122 -0
  152. dart/generated/models/paginated_property_list.py +122 -0
  153. dart/generated/models/paginated_relationship_kind_list.py +122 -0
  154. dart/generated/models/paginated_relationship_list.py +122 -0
  155. dart/generated/models/paginated_space_list.py +122 -0
  156. dart/generated/models/paginated_status_list.py +122 -0
  157. dart/generated/models/paginated_task_doc_relationship_list.py +122 -0
  158. dart/generated/models/paginated_task_kind_list.py +122 -0
  159. dart/generated/models/paginated_task_link_list.py +122 -0
  160. dart/generated/models/paginated_task_list.py +122 -0
  161. dart/generated/models/paginated_tenant_list.py +122 -0
  162. dart/generated/models/paginated_user_dartboard_layout_list.py +122 -0
  163. dart/generated/models/paginated_user_list.py +122 -0
  164. dart/generated/models/paginated_view_list.py +122 -0
  165. dart/generated/models/paginated_webhook_list.py +122 -0
  166. dart/generated/models/pie_chart_adtl.py +69 -0
  167. dart/generated/models/pie_chart_display_metric.py +9 -0
  168. dart/generated/models/priority.py +11 -0
  169. dart/generated/models/properties_list_kind.py +32 -0
  170. dart/generated/models/property_.py +153 -0
  171. dart/generated/models/property_create.py +137 -0
  172. dart/generated/models/property_kind.py +32 -0
  173. dart/generated/models/property_update.py +146 -0
  174. dart/generated/models/relationship.py +74 -0
  175. dart/generated/models/relationship_create.py +93 -0
  176. dart/generated/models/relationship_kind.py +123 -0
  177. dart/generated/models/relationship_kind_create.py +117 -0
  178. dart/generated/models/relationship_kind_kind.py +12 -0
  179. dart/generated/models/relationship_kind_update.py +119 -0
  180. dart/generated/models/report_kind.py +9 -0
  181. dart/generated/models/request_body.py +80 -0
  182. dart/generated/models/response_body.py +72 -0
  183. dart/generated/models/saml_config.py +77 -0
  184. dart/generated/models/saml_config_tenant_extension_status.py +9 -0
  185. dart/generated/models/slack_integration.py +90 -0
  186. dart/generated/models/slack_integration_tenant_extension_status.py +10 -0
  187. dart/generated/models/sort.py +66 -0
  188. dart/generated/models/space.py +286 -0
  189. dart/generated/models/space_create.py +310 -0
  190. dart/generated/models/space_kind.py +10 -0
  191. dart/generated/models/space_update.py +311 -0
  192. dart/generated/models/sprint_mode.py +9 -0
  193. dart/generated/models/status.py +141 -0
  194. dart/generated/models/status_create.py +125 -0
  195. dart/generated/models/status_kind.py +12 -0
  196. dart/generated/models/status_update.py +135 -0
  197. dart/generated/models/statuses_list_kind.py +12 -0
  198. dart/generated/models/subscription.py +9 -0
  199. dart/generated/models/subtask_display_mode.py +10 -0
  200. dart/generated/models/summary_statistic_kind.py +14 -0
  201. dart/generated/models/table_chart_adtl.py +72 -0
  202. dart/generated/models/task.py +531 -0
  203. dart/generated/models/task_create.py +585 -0
  204. dart/generated/models/task_detail_mode.py +10 -0
  205. dart/generated/models/task_doc_relationship.py +96 -0
  206. dart/generated/models/task_doc_relationship_create.py +74 -0
  207. dart/generated/models/task_kind.py +149 -0
  208. dart/generated/models/task_kind_create.py +144 -0
  209. dart/generated/models/task_kind_kind.py +9 -0
  210. dart/generated/models/task_kind_update.py +153 -0
  211. dart/generated/models/task_kinds_list_kind.py +9 -0
  212. dart/generated/models/task_link.py +131 -0
  213. dart/generated/models/task_link_create.py +152 -0
  214. dart/generated/models/task_link_kind.py +19 -0
  215. dart/generated/models/task_link_update.py +155 -0
  216. dart/generated/models/task_notion_document.py +196 -0
  217. dart/generated/models/task_notion_document_block_children_map_type_0.py +43 -0
  218. dart/generated/models/task_notion_document_block_map_type_0.py +43 -0
  219. dart/generated/models/task_notion_document_page_map_type_0.py +43 -0
  220. dart/generated/models/task_properties.py +43 -0
  221. dart/generated/models/task_source_type.py +31 -0
  222. dart/generated/models/task_update.py +585 -0
  223. dart/generated/models/tenant.py +378 -0
  224. dart/generated/models/tenant_update.py +157 -0
  225. dart/generated/models/theme.py +10 -0
  226. dart/generated/models/transaction.py +155 -0
  227. dart/generated/models/transaction_kind.py +73 -0
  228. dart/generated/models/transaction_response.py +96 -0
  229. dart/generated/models/user.py +245 -0
  230. dart/generated/models/user_dartboard_layout.py +66 -0
  231. dart/generated/models/user_dartboard_layout_create.py +74 -0
  232. dart/generated/models/user_data_entity_retrieve_entity_kind.py +32 -0
  233. dart/generated/models/user_role.py +12 -0
  234. dart/generated/models/user_status.py +12 -0
  235. dart/generated/models/user_update.py +190 -0
  236. dart/generated/models/validation_error_response.py +64 -0
  237. dart/generated/models/validation_error_response_items.py +43 -0
  238. dart/generated/models/view.py +207 -0
  239. dart/generated/models/view_create.py +204 -0
  240. dart/generated/models/view_kind.py +11 -0
  241. dart/generated/models/view_update.py +206 -0
  242. dart/generated/models/webhook.py +96 -0
  243. dart/generated/models/webhook_create.py +77 -0
  244. dart/generated/models/webhook_update.py +78 -0
  245. dart/generated/models/zapier_integration.py +66 -0
  246. dart/generated/py.typed +1 -0
  247. dart/generated/types.py +45 -0
  248. dart/order_manager.py +59 -0
  249. dart/webhook.py +21 -0
  250. dart_tools-0.6.6.dist-info/LICENSE +21 -0
  251. dart_tools-0.6.6.dist-info/METADATA +183 -0
  252. dart_tools-0.6.6.dist-info/RECORD +256 -0
  253. dart_tools-0.6.6.dist-info/WHEEL +5 -0
  254. dart_tools-0.6.6.dist-info/dist/dart-tools-0.3.3.tar.gz +0 -0
  255. dart_tools-0.6.6.dist-info/entry_points.txt +2 -0
  256. dart_tools-0.6.6.dist-info/top_level.txt +1 -0
@@ -0,0 +1,531 @@
1
+ import datetime
2
+ from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+ from dateutil.parser import isoparse
7
+
8
+ from ..models.priority import Priority
9
+ from ..models.task_source_type import TaskSourceType
10
+ from ..types import UNSET, Unset
11
+
12
+ if TYPE_CHECKING:
13
+ from ..models.relationship import Relationship
14
+ from ..models.task_link import TaskLink
15
+ from ..models.task_notion_document import TaskNotionDocument
16
+ from ..models.task_properties import TaskProperties
17
+
18
+
19
+ T = TypeVar("T", bound="Task")
20
+
21
+
22
+ @_attrs_define
23
+ class Task:
24
+ """
25
+ Attributes:
26
+ duid (str):
27
+ source_type (TaskSourceType): * `Unknown` - UNKNOWN
28
+ * `Import` - IMPORT
29
+ * `Onboarding` - ONBOARDING
30
+ * `Recommendation` - RECOMMENDATION
31
+ * `Recurrence` - RECURRENCE
32
+ * `Template` - TEMPLATE
33
+ * `ChatGPT` - CHAT_GPT
34
+ * `Email` - EMAIL
35
+ * `Slack` - SLACK
36
+ * `API` - API
37
+ * `CLI` - CLI
38
+ * `Application` - APPLICATION
39
+ * `AppTcm` - APP_TCM
40
+ * `AppInternalForm` - APP_INTERNAL_FORM
41
+ * `AppQuickAdd` - APP_QUICK_ADD
42
+ * `AppBoard` - APP_BOARD
43
+ * `AppSubtask` - APP_SUBTASK
44
+ * `AppRelationship` - APP_RELATIONSHIP
45
+ * `AppEnter` - APP_ENTER
46
+ * `AppReplicate` - APP_REPLICATE
47
+ * `AppPaste` - APP_PASTE
48
+ * `AppRoadmapList` - APP_ROADMAP_LIST
49
+ * `AppRoadmapTimeline` - APP_ROADMAP_TIMELINE
50
+ * `ExternalForm` - EXTERNAL_FORM
51
+ created_at (datetime.datetime):
52
+ created_by_duid (Union[None, str]):
53
+ updated_at (datetime.datetime):
54
+ updated_by_duid (Union[None, str]):
55
+ drafter_duid (Union[None, str]):
56
+ in_trash (bool):
57
+ dartboard_duid (str):
58
+ order (str):
59
+ expanded (bool):
60
+ kind_duid (str):
61
+ title (str):
62
+ description (Any):
63
+ notion_document (Union['TaskNotionDocument', None]):
64
+ status_duid (str):
65
+ assigned_to_ai (bool):
66
+ recommendation_duid (Union[None, str]):
67
+ assignee_duids (List[str]):
68
+ subscriber_duids (List[str]):
69
+ tag_duids (List[str]):
70
+ links (List['TaskLink']):
71
+ attachment_duids (List[str]):
72
+ relationships (List['Relationship']):
73
+ priority (Union[None, Priority]):
74
+ size (Union[None, int]):
75
+ start_at (Union[None, datetime.datetime]):
76
+ due_at (Union[None, datetime.datetime]):
77
+ time_tracking (Any):
78
+ remind_at (Union[None, datetime.datetime]):
79
+ recurrence (Union[Any, None]):
80
+ recurs_next_at (Union[None, datetime.datetime]):
81
+ properties (TaskProperties):
82
+ updated_by_client_duid (Union[None, Unset, str]):
83
+ """
84
+
85
+ duid: str
86
+ source_type: TaskSourceType
87
+ created_at: datetime.datetime
88
+ created_by_duid: Union[None, str]
89
+ updated_at: datetime.datetime
90
+ updated_by_duid: Union[None, str]
91
+ drafter_duid: Union[None, str]
92
+ in_trash: bool
93
+ dartboard_duid: str
94
+ order: str
95
+ expanded: bool
96
+ kind_duid: str
97
+ title: str
98
+ description: Any
99
+ notion_document: Union["TaskNotionDocument", None]
100
+ status_duid: str
101
+ assigned_to_ai: bool
102
+ recommendation_duid: Union[None, str]
103
+ assignee_duids: List[str]
104
+ subscriber_duids: List[str]
105
+ tag_duids: List[str]
106
+ links: List["TaskLink"]
107
+ attachment_duids: List[str]
108
+ relationships: List["Relationship"]
109
+ priority: Union[None, Priority]
110
+ size: Union[None, int]
111
+ start_at: Union[None, datetime.datetime]
112
+ due_at: Union[None, datetime.datetime]
113
+ time_tracking: Any
114
+ remind_at: Union[None, datetime.datetime]
115
+ recurrence: Union[Any, None]
116
+ recurs_next_at: Union[None, datetime.datetime]
117
+ properties: "TaskProperties"
118
+ updated_by_client_duid: Union[None, Unset, str] = UNSET
119
+ additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
120
+
121
+ def to_dict(self) -> Dict[str, Any]:
122
+ from ..models.task_notion_document import TaskNotionDocument
123
+
124
+ duid = self.duid
125
+
126
+ source_type = self.source_type.value
127
+
128
+ created_at = self.created_at.isoformat()
129
+
130
+ created_by_duid: Union[None, str]
131
+ created_by_duid = self.created_by_duid
132
+
133
+ updated_at = self.updated_at.isoformat()
134
+
135
+ updated_by_duid: Union[None, str]
136
+ updated_by_duid = self.updated_by_duid
137
+
138
+ drafter_duid: Union[None, str]
139
+ drafter_duid = self.drafter_duid
140
+
141
+ in_trash = self.in_trash
142
+
143
+ dartboard_duid = self.dartboard_duid
144
+
145
+ order = self.order
146
+
147
+ expanded = self.expanded
148
+
149
+ kind_duid = self.kind_duid
150
+
151
+ title = self.title
152
+
153
+ description = self.description
154
+
155
+ notion_document: Union[Dict[str, Any], None]
156
+ if isinstance(self.notion_document, TaskNotionDocument):
157
+ notion_document = self.notion_document.to_dict()
158
+ else:
159
+ notion_document = self.notion_document
160
+
161
+ status_duid = self.status_duid
162
+
163
+ assigned_to_ai = self.assigned_to_ai
164
+
165
+ recommendation_duid: Union[None, str]
166
+ recommendation_duid = self.recommendation_duid
167
+
168
+ assignee_duids = self.assignee_duids
169
+
170
+ subscriber_duids = self.subscriber_duids
171
+
172
+ tag_duids = self.tag_duids
173
+
174
+ links = []
175
+ for links_item_data in self.links:
176
+ links_item = links_item_data.to_dict()
177
+ links.append(links_item)
178
+
179
+ attachment_duids = self.attachment_duids
180
+
181
+ relationships = []
182
+ for relationships_item_data in self.relationships:
183
+ relationships_item = relationships_item_data.to_dict()
184
+ relationships.append(relationships_item)
185
+
186
+ priority: Union[None, str]
187
+ if isinstance(self.priority, Priority):
188
+ priority = self.priority.value
189
+ else:
190
+ priority = self.priority
191
+
192
+ size: Union[None, int]
193
+ size = self.size
194
+
195
+ start_at: Union[None, str]
196
+ if isinstance(self.start_at, datetime.datetime):
197
+ start_at = self.start_at.isoformat()
198
+ else:
199
+ start_at = self.start_at
200
+
201
+ due_at: Union[None, str]
202
+ if isinstance(self.due_at, datetime.datetime):
203
+ due_at = self.due_at.isoformat()
204
+ else:
205
+ due_at = self.due_at
206
+
207
+ time_tracking = self.time_tracking
208
+
209
+ remind_at: Union[None, str]
210
+ if isinstance(self.remind_at, datetime.datetime):
211
+ remind_at = self.remind_at.isoformat()
212
+ else:
213
+ remind_at = self.remind_at
214
+
215
+ recurrence: Union[Any, None]
216
+ recurrence = self.recurrence
217
+
218
+ recurs_next_at: Union[None, str]
219
+ if isinstance(self.recurs_next_at, datetime.datetime):
220
+ recurs_next_at = self.recurs_next_at.isoformat()
221
+ else:
222
+ recurs_next_at = self.recurs_next_at
223
+
224
+ properties = self.properties.to_dict()
225
+
226
+ updated_by_client_duid: Union[None, Unset, str]
227
+ if isinstance(self.updated_by_client_duid, Unset):
228
+ updated_by_client_duid = UNSET
229
+ else:
230
+ updated_by_client_duid = self.updated_by_client_duid
231
+
232
+ field_dict: Dict[str, Any] = {}
233
+ field_dict.update(self.additional_properties)
234
+ field_dict.update(
235
+ {
236
+ "duid": duid,
237
+ "sourceType": source_type,
238
+ "createdAt": created_at,
239
+ "createdByDuid": created_by_duid,
240
+ "updatedAt": updated_at,
241
+ "updatedByDuid": updated_by_duid,
242
+ "drafterDuid": drafter_duid,
243
+ "inTrash": in_trash,
244
+ "dartboardDuid": dartboard_duid,
245
+ "order": order,
246
+ "expanded": expanded,
247
+ "kindDuid": kind_duid,
248
+ "title": title,
249
+ "description": description,
250
+ "notionDocument": notion_document,
251
+ "statusDuid": status_duid,
252
+ "assignedToAi": assigned_to_ai,
253
+ "recommendationDuid": recommendation_duid,
254
+ "assigneeDuids": assignee_duids,
255
+ "subscriberDuids": subscriber_duids,
256
+ "tagDuids": tag_duids,
257
+ "links": links,
258
+ "attachmentDuids": attachment_duids,
259
+ "relationships": relationships,
260
+ "priority": priority,
261
+ "size": size,
262
+ "startAt": start_at,
263
+ "dueAt": due_at,
264
+ "timeTracking": time_tracking,
265
+ "remindAt": remind_at,
266
+ "recurrence": recurrence,
267
+ "recursNextAt": recurs_next_at,
268
+ "properties": properties,
269
+ }
270
+ )
271
+ if updated_by_client_duid is not UNSET:
272
+ field_dict["updatedByClientDuid"] = updated_by_client_duid
273
+
274
+ return field_dict
275
+
276
+ @classmethod
277
+ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
278
+ from ..models.relationship import Relationship
279
+ from ..models.task_link import TaskLink
280
+ from ..models.task_notion_document import TaskNotionDocument
281
+ from ..models.task_properties import TaskProperties
282
+
283
+ d = src_dict.copy()
284
+ duid = d.pop("duid")
285
+
286
+ source_type = TaskSourceType(d.pop("sourceType"))
287
+
288
+ created_at = isoparse(d.pop("createdAt"))
289
+
290
+ def _parse_created_by_duid(data: object) -> Union[None, str]:
291
+ if data is None:
292
+ return data
293
+ return cast(Union[None, str], data)
294
+
295
+ created_by_duid = _parse_created_by_duid(d.pop("createdByDuid"))
296
+
297
+ updated_at = isoparse(d.pop("updatedAt"))
298
+
299
+ def _parse_updated_by_duid(data: object) -> Union[None, str]:
300
+ if data is None:
301
+ return data
302
+ return cast(Union[None, str], data)
303
+
304
+ updated_by_duid = _parse_updated_by_duid(d.pop("updatedByDuid"))
305
+
306
+ def _parse_drafter_duid(data: object) -> Union[None, str]:
307
+ if data is None:
308
+ return data
309
+ return cast(Union[None, str], data)
310
+
311
+ drafter_duid = _parse_drafter_duid(d.pop("drafterDuid"))
312
+
313
+ in_trash = d.pop("inTrash")
314
+
315
+ dartboard_duid = d.pop("dartboardDuid")
316
+
317
+ order = d.pop("order")
318
+
319
+ expanded = d.pop("expanded")
320
+
321
+ kind_duid = d.pop("kindDuid")
322
+
323
+ title = d.pop("title")
324
+
325
+ description = d.pop("description")
326
+
327
+ def _parse_notion_document(data: object) -> Union["TaskNotionDocument", None]:
328
+ if data is None:
329
+ return data
330
+ try:
331
+ if not isinstance(data, dict):
332
+ raise TypeError()
333
+ notion_document_type_0 = TaskNotionDocument.from_dict(data)
334
+
335
+ return notion_document_type_0
336
+ except: # noqa: E722
337
+ pass
338
+ return cast(Union["TaskNotionDocument", None], data)
339
+
340
+ notion_document = _parse_notion_document(d.pop("notionDocument"))
341
+
342
+ status_duid = d.pop("statusDuid")
343
+
344
+ assigned_to_ai = d.pop("assignedToAi")
345
+
346
+ def _parse_recommendation_duid(data: object) -> Union[None, str]:
347
+ if data is None:
348
+ return data
349
+ return cast(Union[None, str], data)
350
+
351
+ recommendation_duid = _parse_recommendation_duid(d.pop("recommendationDuid"))
352
+
353
+ assignee_duids = cast(List[str], d.pop("assigneeDuids"))
354
+
355
+ subscriber_duids = cast(List[str], d.pop("subscriberDuids"))
356
+
357
+ tag_duids = cast(List[str], d.pop("tagDuids"))
358
+
359
+ links = []
360
+ _links = d.pop("links")
361
+ for links_item_data in _links:
362
+ links_item = TaskLink.from_dict(links_item_data)
363
+
364
+ links.append(links_item)
365
+
366
+ attachment_duids = cast(List[str], d.pop("attachmentDuids"))
367
+
368
+ relationships = []
369
+ _relationships = d.pop("relationships")
370
+ for relationships_item_data in _relationships:
371
+ relationships_item = Relationship.from_dict(relationships_item_data)
372
+
373
+ relationships.append(relationships_item)
374
+
375
+ def _parse_priority(data: object) -> Union[None, Priority]:
376
+ if data is None:
377
+ return data
378
+ try:
379
+ if not isinstance(data, str):
380
+ raise TypeError()
381
+ priority_type_0 = Priority(data)
382
+
383
+ return priority_type_0
384
+ except: # noqa: E722
385
+ pass
386
+ return cast(Union[None, Priority], data)
387
+
388
+ priority = _parse_priority(d.pop("priority"))
389
+
390
+ def _parse_size(data: object) -> Union[None, int]:
391
+ if data is None:
392
+ return data
393
+ return cast(Union[None, int], data)
394
+
395
+ size = _parse_size(d.pop("size"))
396
+
397
+ def _parse_start_at(data: object) -> Union[None, datetime.datetime]:
398
+ if data is None:
399
+ return data
400
+ try:
401
+ if not isinstance(data, str):
402
+ raise TypeError()
403
+ start_at_type_0 = isoparse(data)
404
+
405
+ return start_at_type_0
406
+ except: # noqa: E722
407
+ pass
408
+ return cast(Union[None, datetime.datetime], data)
409
+
410
+ start_at = _parse_start_at(d.pop("startAt"))
411
+
412
+ def _parse_due_at(data: object) -> Union[None, datetime.datetime]:
413
+ if data is None:
414
+ return data
415
+ try:
416
+ if not isinstance(data, str):
417
+ raise TypeError()
418
+ due_at_type_0 = isoparse(data)
419
+
420
+ return due_at_type_0
421
+ except: # noqa: E722
422
+ pass
423
+ return cast(Union[None, datetime.datetime], data)
424
+
425
+ due_at = _parse_due_at(d.pop("dueAt"))
426
+
427
+ time_tracking = d.pop("timeTracking")
428
+
429
+ def _parse_remind_at(data: object) -> Union[None, datetime.datetime]:
430
+ if data is None:
431
+ return data
432
+ try:
433
+ if not isinstance(data, str):
434
+ raise TypeError()
435
+ remind_at_type_0 = isoparse(data)
436
+
437
+ return remind_at_type_0
438
+ except: # noqa: E722
439
+ pass
440
+ return cast(Union[None, datetime.datetime], data)
441
+
442
+ remind_at = _parse_remind_at(d.pop("remindAt"))
443
+
444
+ def _parse_recurrence(data: object) -> Union[Any, None]:
445
+ if data is None:
446
+ return data
447
+ return cast(Union[Any, None], data)
448
+
449
+ recurrence = _parse_recurrence(d.pop("recurrence"))
450
+
451
+ def _parse_recurs_next_at(data: object) -> Union[None, datetime.datetime]:
452
+ if data is None:
453
+ return data
454
+ try:
455
+ if not isinstance(data, str):
456
+ raise TypeError()
457
+ recurs_next_at_type_0 = isoparse(data)
458
+
459
+ return recurs_next_at_type_0
460
+ except: # noqa: E722
461
+ pass
462
+ return cast(Union[None, datetime.datetime], data)
463
+
464
+ recurs_next_at = _parse_recurs_next_at(d.pop("recursNextAt"))
465
+
466
+ properties = TaskProperties.from_dict(d.pop("properties"))
467
+
468
+ def _parse_updated_by_client_duid(data: object) -> Union[None, Unset, str]:
469
+ if data is None:
470
+ return data
471
+ if isinstance(data, Unset):
472
+ return data
473
+ return cast(Union[None, Unset, str], data)
474
+
475
+ updated_by_client_duid = _parse_updated_by_client_duid(d.pop("updatedByClientDuid", UNSET))
476
+
477
+ task = cls(
478
+ duid=duid,
479
+ source_type=source_type,
480
+ created_at=created_at,
481
+ created_by_duid=created_by_duid,
482
+ updated_at=updated_at,
483
+ updated_by_duid=updated_by_duid,
484
+ drafter_duid=drafter_duid,
485
+ in_trash=in_trash,
486
+ dartboard_duid=dartboard_duid,
487
+ order=order,
488
+ expanded=expanded,
489
+ kind_duid=kind_duid,
490
+ title=title,
491
+ description=description,
492
+ notion_document=notion_document,
493
+ status_duid=status_duid,
494
+ assigned_to_ai=assigned_to_ai,
495
+ recommendation_duid=recommendation_duid,
496
+ assignee_duids=assignee_duids,
497
+ subscriber_duids=subscriber_duids,
498
+ tag_duids=tag_duids,
499
+ links=links,
500
+ attachment_duids=attachment_duids,
501
+ relationships=relationships,
502
+ priority=priority,
503
+ size=size,
504
+ start_at=start_at,
505
+ due_at=due_at,
506
+ time_tracking=time_tracking,
507
+ remind_at=remind_at,
508
+ recurrence=recurrence,
509
+ recurs_next_at=recurs_next_at,
510
+ properties=properties,
511
+ updated_by_client_duid=updated_by_client_duid,
512
+ )
513
+
514
+ task.additional_properties = d
515
+ return task
516
+
517
+ @property
518
+ def additional_keys(self) -> List[str]:
519
+ return list(self.additional_properties.keys())
520
+
521
+ def __getitem__(self, key: str) -> Any:
522
+ return self.additional_properties[key]
523
+
524
+ def __setitem__(self, key: str, value: Any) -> None:
525
+ self.additional_properties[key] = value
526
+
527
+ def __delitem__(self, key: str) -> None:
528
+ del self.additional_properties[key]
529
+
530
+ def __contains__(self, key: str) -> bool:
531
+ return key in self.additional_properties