dart-tools 0.6.16__py3-none-any.whl → 0.7.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 dart-tools might be problematic. Click here for more details.

Files changed (285) hide show
  1. dart/__init__.py +8 -6
  2. dart/dart.py +423 -702
  3. dart/generated/__init__.py +1 -1
  4. dart/generated/api/__init__.py +8 -0
  5. dart/generated/api/comment/__init__.py +1 -0
  6. dart/generated/api/{transactions/transactions_create.py → comment/create_comment.py} +57 -58
  7. dart/generated/api/config/__init__.py +1 -0
  8. dart/generated/api/config/get_config.py +141 -0
  9. dart/generated/api/dartboard/__init__.py +1 -0
  10. dart/generated/api/{attachments/attachments_list.py → dartboard/retrieve_dartboard.py} +58 -62
  11. dart/generated/api/doc/__init__.py +1 -0
  12. dart/generated/api/doc/create_doc.py +179 -0
  13. dart/generated/api/doc/delete_doc.py +165 -0
  14. dart/generated/api/{comments/comments_list.py → doc/list_docs.py} +115 -111
  15. dart/generated/api/{forms/forms_list.py → doc/retrieve_doc.py} +58 -62
  16. dart/generated/api/doc/update_doc.py +188 -0
  17. dart/generated/api/folder/__init__.py +1 -0
  18. dart/generated/api/{webhooks/webhooks_list.py → folder/retrieve_folder.py} +58 -62
  19. dart/generated/api/task/__init__.py +1 -0
  20. dart/generated/api/task/create_task.py +172 -0
  21. dart/generated/api/task/delete_task.py +165 -0
  22. dart/generated/api/task/list_tasks.py +497 -0
  23. dart/generated/api/{layouts/layouts_list.py → task/retrieve_task.py} +58 -62
  24. dart/generated/api/task/update_task.py +188 -0
  25. dart/generated/api/view/__init__.py +1 -0
  26. dart/generated/api/{tenants/tenants_list.py → view/retrieve_view.py} +58 -62
  27. dart/generated/client.py +13 -13
  28. dart/generated/models/__init__.py +34 -342
  29. dart/generated/models/comment.py +34 -150
  30. dart/generated/models/comment_create.py +18 -97
  31. dart/generated/models/concise_doc.py +84 -0
  32. dart/generated/models/concise_task.py +267 -0
  33. dart/generated/models/dartboard.py +37 -237
  34. dart/generated/models/doc.py +31 -183
  35. dart/generated/models/doc_create.py +22 -238
  36. dart/generated/models/doc_update.py +26 -233
  37. dart/generated/models/folder.py +39 -84
  38. dart/generated/models/list_docs_o_item.py +15 -0
  39. dart/generated/models/{paginated_attachment_list.py → paginated_concise_doc_list.py} +18 -17
  40. dart/generated/models/{paginated_dartboard_list.py → paginated_concise_task_list.py} +18 -17
  41. dart/generated/models/task.py +149 -406
  42. dart/generated/models/task_create.py +113 -428
  43. dart/generated/models/task_update.py +113 -421
  44. dart/generated/models/user.py +14 -192
  45. dart/generated/models/user_space_configuration.py +147 -0
  46. dart/generated/models/view.py +39 -149
  47. dart/generated/models/wrapped_comment.py +65 -0
  48. dart/generated/models/wrapped_comment_create.py +65 -0
  49. dart/generated/models/wrapped_dartboard.py +65 -0
  50. dart/generated/models/wrapped_doc.py +65 -0
  51. dart/generated/models/wrapped_doc_create.py +65 -0
  52. dart/generated/models/wrapped_doc_update.py +65 -0
  53. dart/generated/models/wrapped_folder.py +65 -0
  54. dart/generated/models/wrapped_task.py +65 -0
  55. dart/generated/models/wrapped_task_create.py +65 -0
  56. dart/generated/models/wrapped_task_update.py +65 -0
  57. dart/generated/models/wrapped_view.py +65 -0
  58. dart/generated/types.py +4 -3
  59. dart/old.py +216 -0
  60. dart/order_manager.py +4 -15
  61. dart/webhook.py +2 -7
  62. {dart_tools-0.6.16.dist-info → dart_tools-0.7.1.dist-info}/METADATA +33 -62
  63. dart_tools-0.7.1.dist-info/RECORD +71 -0
  64. {dart_tools-0.6.16.dist-info → dart_tools-0.7.1.dist-info}/WHEEL +1 -1
  65. dart/generated/api/attachments/__init__.py +0 -0
  66. dart/generated/api/comments/__init__.py +0 -0
  67. dart/generated/api/dartboards/__init__.py +0 -0
  68. dart/generated/api/dartboards/dartboards_list.py +0 -286
  69. dart/generated/api/dashboards/__init__.py +0 -0
  70. dart/generated/api/dashboards/dashboards_list.py +0 -199
  71. dart/generated/api/docs/__init__.py +0 -0
  72. dart/generated/api/docs/docs_list.py +0 -387
  73. dart/generated/api/folders/__init__.py +0 -0
  74. dart/generated/api/folders/folders_list.py +0 -249
  75. dart/generated/api/form_fields/__init__.py +0 -0
  76. dart/generated/api/form_fields/form_fields_list.py +0 -169
  77. dart/generated/api/forms/__init__.py +0 -0
  78. dart/generated/api/layouts/__init__.py +0 -0
  79. dart/generated/api/links/__init__.py +0 -0
  80. dart/generated/api/links/links_list.py +0 -169
  81. dart/generated/api/options/__init__.py +0 -0
  82. dart/generated/api/options/options_list.py +0 -244
  83. dart/generated/api/properties/__init__.py +0 -0
  84. dart/generated/api/properties/properties_list.py +0 -219
  85. dart/generated/api/reactions/__init__.py +0 -0
  86. dart/generated/api/reactions/reactions_list.py +0 -169
  87. dart/generated/api/relationship_kinds/__init__.py +0 -0
  88. dart/generated/api/relationship_kinds/relationship_kinds_list.py +0 -169
  89. dart/generated/api/relationships/__init__.py +0 -0
  90. dart/generated/api/relationships/relationships_list.py +0 -169
  91. dart/generated/api/spaces/__init__.py +0 -0
  92. dart/generated/api/spaces/spaces_list.py +0 -229
  93. dart/generated/api/statuses/__init__.py +0 -0
  94. dart/generated/api/statuses/statuses_list.py +0 -264
  95. dart/generated/api/task_doc_relationships/__init__.py +0 -0
  96. dart/generated/api/task_doc_relationships/task_doc_relationships_list.py +0 -169
  97. dart/generated/api/task_kinds/__init__.py +0 -0
  98. dart/generated/api/task_kinds/task_kinds_list.py +0 -219
  99. dart/generated/api/tasks/__init__.py +0 -0
  100. dart/generated/api/tasks/tasks_list.py +0 -461
  101. dart/generated/api/tenants/__init__.py +0 -0
  102. dart/generated/api/transactions/__init__.py +0 -0
  103. dart/generated/api/user_dartboard_layouts/__init__.py +0 -0
  104. dart/generated/api/user_dartboard_layouts/user_dartboard_layouts_list.py +0 -169
  105. dart/generated/api/user_data/__init__.py +0 -0
  106. dart/generated/api/user_data/user_data_entity_retrieve.py +0 -580
  107. dart/generated/api/users/__init__.py +0 -0
  108. dart/generated/api/users/users_list.py +0 -229
  109. dart/generated/api/views/__init__.py +0 -0
  110. dart/generated/api/views/views_list.py +0 -199
  111. dart/generated/api/webhooks/__init__.py +0 -0
  112. dart/generated/models/attachment.py +0 -112
  113. dart/generated/models/attachment_create.py +0 -121
  114. dart/generated/models/attachment_update.py +0 -125
  115. dart/generated/models/bar_chart_adtl.py +0 -98
  116. dart/generated/models/brainstorm.py +0 -149
  117. dart/generated/models/brainstorm_create.py +0 -134
  118. dart/generated/models/brainstorm_state.py +0 -10
  119. dart/generated/models/brainstorm_update.py +0 -153
  120. dart/generated/models/burn_up_chart_adtl.py +0 -103
  121. dart/generated/models/chart.py +0 -208
  122. dart/generated/models/chart_aggregation.py +0 -10
  123. dart/generated/models/chart_type.py +0 -14
  124. dart/generated/models/comment_reaction.py +0 -84
  125. dart/generated/models/comment_reaction_create.py +0 -82
  126. dart/generated/models/comment_reaction_update.py +0 -87
  127. dart/generated/models/comment_update.py +0 -148
  128. dart/generated/models/dartboard_create.py +0 -315
  129. dart/generated/models/dartboard_kind.py +0 -12
  130. dart/generated/models/dartboard_update.py +0 -317
  131. dart/generated/models/dartboards_list_kind.py +0 -12
  132. dart/generated/models/dashboard.py +0 -185
  133. dart/generated/models/dashboard_create.py +0 -171
  134. dart/generated/models/dashboard_update.py +0 -173
  135. dart/generated/models/discord_integration.py +0 -72
  136. dart/generated/models/doc_source_type.py +0 -13
  137. dart/generated/models/docs_list_o_item.py +0 -15
  138. dart/generated/models/entity_name.py +0 -22
  139. dart/generated/models/event.py +0 -420
  140. dart/generated/models/event_actor.py +0 -19
  141. dart/generated/models/event_create.py +0 -158
  142. dart/generated/models/event_kind.py +0 -88
  143. dart/generated/models/event_subscription.py +0 -74
  144. dart/generated/models/event_subscription_update.py +0 -173
  145. dart/generated/models/filter_applicability.py +0 -22
  146. dart/generated/models/filter_assignee.py +0 -116
  147. dart/generated/models/filter_connector.py +0 -9
  148. dart/generated/models/filter_group.py +0 -112
  149. dart/generated/models/filter_search.py +0 -82
  150. dart/generated/models/filter_set.py +0 -116
  151. dart/generated/models/folder_create.py +0 -150
  152. dart/generated/models/folder_kind.py +0 -10
  153. dart/generated/models/folder_update.py +0 -152
  154. dart/generated/models/folders_list_kind.py +0 -10
  155. dart/generated/models/form.py +0 -147
  156. dart/generated/models/form_create.py +0 -141
  157. dart/generated/models/form_field.py +0 -144
  158. dart/generated/models/form_field_create.py +0 -129
  159. dart/generated/models/form_field_update.py +0 -132
  160. dart/generated/models/form_update.py +0 -142
  161. dart/generated/models/github_integration.py +0 -163
  162. dart/generated/models/github_integration_tenant_extension_status.py +0 -11
  163. dart/generated/models/google_data.py +0 -94
  164. dart/generated/models/icon_kind.py +0 -10
  165. dart/generated/models/layout.py +0 -167
  166. dart/generated/models/layout_config.py +0 -70
  167. dart/generated/models/layout_create.py +0 -130
  168. dart/generated/models/layout_kind.py +0 -11
  169. dart/generated/models/layout_kind_config_map.py +0 -56
  170. dart/generated/models/layout_update.py +0 -130
  171. dart/generated/models/line_chart_adtl.py +0 -72
  172. dart/generated/models/models_response.py +0 -671
  173. dart/generated/models/notification.py +0 -120
  174. dart/generated/models/notification_update.py +0 -100
  175. dart/generated/models/notion_integration.py +0 -90
  176. dart/generated/models/notion_integration_tenant_extension_status.py +0 -10
  177. dart/generated/models/number_chart_adtl.py +0 -77
  178. dart/generated/models/operation.py +0 -874
  179. dart/generated/models/operation_kind.py +0 -12
  180. dart/generated/models/operation_model_kind.py +0 -36
  181. dart/generated/models/option.py +0 -118
  182. dart/generated/models/option_create.py +0 -105
  183. dart/generated/models/option_update.py +0 -107
  184. dart/generated/models/paginated_comment_list.py +0 -122
  185. dart/generated/models/paginated_comment_reaction_list.py +0 -122
  186. dart/generated/models/paginated_dashboard_list.py +0 -122
  187. dart/generated/models/paginated_doc_list.py +0 -122
  188. dart/generated/models/paginated_folder_list.py +0 -122
  189. dart/generated/models/paginated_form_field_list.py +0 -122
  190. dart/generated/models/paginated_form_list.py +0 -122
  191. dart/generated/models/paginated_layout_list.py +0 -122
  192. dart/generated/models/paginated_option_list.py +0 -122
  193. dart/generated/models/paginated_property_list.py +0 -122
  194. dart/generated/models/paginated_relationship_kind_list.py +0 -122
  195. dart/generated/models/paginated_relationship_list.py +0 -122
  196. dart/generated/models/paginated_space_list.py +0 -122
  197. dart/generated/models/paginated_status_list.py +0 -122
  198. dart/generated/models/paginated_task_doc_relationship_list.py +0 -122
  199. dart/generated/models/paginated_task_kind_list.py +0 -122
  200. dart/generated/models/paginated_task_link_list.py +0 -122
  201. dart/generated/models/paginated_task_list.py +0 -122
  202. dart/generated/models/paginated_tenant_list.py +0 -122
  203. dart/generated/models/paginated_user_dartboard_layout_list.py +0 -122
  204. dart/generated/models/paginated_user_list.py +0 -122
  205. dart/generated/models/paginated_view_list.py +0 -122
  206. dart/generated/models/paginated_webhook_list.py +0 -122
  207. dart/generated/models/pie_chart_adtl.py +0 -69
  208. dart/generated/models/pie_chart_display_metric.py +0 -9
  209. dart/generated/models/properties_list_kind.py +0 -32
  210. dart/generated/models/property_.py +0 -153
  211. dart/generated/models/property_create.py +0 -137
  212. dart/generated/models/property_kind.py +0 -32
  213. dart/generated/models/property_update.py +0 -146
  214. dart/generated/models/relationship.py +0 -74
  215. dart/generated/models/relationship_create.py +0 -93
  216. dart/generated/models/relationship_kind.py +0 -123
  217. dart/generated/models/relationship_kind_create.py +0 -117
  218. dart/generated/models/relationship_kind_kind.py +0 -12
  219. dart/generated/models/relationship_kind_update.py +0 -119
  220. dart/generated/models/report_kind.py +0 -9
  221. dart/generated/models/request_body.py +0 -83
  222. dart/generated/models/response_body.py +0 -72
  223. dart/generated/models/saml_config.py +0 -77
  224. dart/generated/models/saml_config_tenant_extension_status.py +0 -9
  225. dart/generated/models/slack_integration.py +0 -90
  226. dart/generated/models/slack_integration_tenant_extension_status.py +0 -10
  227. dart/generated/models/sort.py +0 -66
  228. dart/generated/models/space.py +0 -311
  229. dart/generated/models/space_create.py +0 -340
  230. dart/generated/models/space_kind.py +0 -10
  231. dart/generated/models/space_update.py +0 -341
  232. dart/generated/models/sprint_mode.py +0 -9
  233. dart/generated/models/status.py +0 -141
  234. dart/generated/models/status_create.py +0 -125
  235. dart/generated/models/status_kind.py +0 -12
  236. dart/generated/models/status_update.py +0 -135
  237. dart/generated/models/statuses_list_kind.py +0 -12
  238. dart/generated/models/subscription.py +0 -9
  239. dart/generated/models/subtask_display_mode.py +0 -10
  240. dart/generated/models/summary_statistic_kind.py +0 -14
  241. dart/generated/models/table_chart_adtl.py +0 -98
  242. dart/generated/models/task_detail_mode.py +0 -10
  243. dart/generated/models/task_doc_relationship.py +0 -96
  244. dart/generated/models/task_doc_relationship_create.py +0 -74
  245. dart/generated/models/task_kind.py +0 -149
  246. dart/generated/models/task_kind_create.py +0 -144
  247. dart/generated/models/task_kind_kind.py +0 -9
  248. dart/generated/models/task_kind_update.py +0 -153
  249. dart/generated/models/task_kinds_list_kind.py +0 -9
  250. dart/generated/models/task_link.py +0 -131
  251. dart/generated/models/task_link_create.py +0 -152
  252. dart/generated/models/task_link_kind.py +0 -19
  253. dart/generated/models/task_link_update.py +0 -155
  254. dart/generated/models/task_notion_document.py +0 -196
  255. dart/generated/models/task_notion_document_block_children_map_type_0.py +0 -43
  256. dart/generated/models/task_notion_document_block_map_type_0.py +0 -43
  257. dart/generated/models/task_notion_document_page_map_type_0.py +0 -43
  258. dart/generated/models/task_properties.py +0 -43
  259. dart/generated/models/task_source_type.py +0 -31
  260. dart/generated/models/tenant.py +0 -386
  261. dart/generated/models/tenant_update.py +0 -166
  262. dart/generated/models/theme.py +0 -10
  263. dart/generated/models/transaction.py +0 -158
  264. dart/generated/models/transaction_kind.py +0 -74
  265. dart/generated/models/transaction_response.py +0 -96
  266. dart/generated/models/user_dartboard_layout.py +0 -66
  267. dart/generated/models/user_dartboard_layout_create.py +0 -74
  268. dart/generated/models/user_data_entity_retrieve_entity_kind.py +0 -32
  269. dart/generated/models/user_role.py +0 -12
  270. dart/generated/models/user_status.py +0 -12
  271. dart/generated/models/user_update.py +0 -210
  272. dart/generated/models/validation_error_response.py +0 -64
  273. dart/generated/models/validation_error_response_items.py +0 -43
  274. dart/generated/models/view_create.py +0 -213
  275. dart/generated/models/view_kind.py +0 -11
  276. dart/generated/models/view_update.py +0 -215
  277. dart/generated/models/webhook.py +0 -96
  278. dart/generated/models/webhook_create.py +0 -77
  279. dart/generated/models/webhook_update.py +0 -78
  280. dart/generated/models/zapier_integration.py +0 -66
  281. dart_tools-0.6.16.dist-info/RECORD +0 -257
  282. dart_tools-0.6.16.dist-info/dist/dart-tools-0.3.3.tar.gz +0 -0
  283. {dart_tools-0.6.16.dist-info → dart_tools-0.7.1.dist-info}/entry_points.txt +0 -0
  284. {dart_tools-0.6.16.dist-info → dart_tools-0.7.1.dist-info/licenses}/LICENSE +0 -0
  285. {dart_tools-0.6.16.dist-info → dart_tools-0.7.1.dist-info}/top_level.txt +0 -0
dart/old.py ADDED
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """These are legacy components that still rely on private API, moved out of dart.py."""
5
+
6
+ # Required for type hinting compatibility when using Python 3.9
7
+ from __future__ import annotations
8
+
9
+ from functools import wraps
10
+ from typing import Any, Callable, Union
11
+
12
+ import httpx
13
+
14
+ from .dart import (
15
+ Dart,
16
+ _auth_failure_exit,
17
+ _handle_request_errors,
18
+ _log,
19
+ _make_id,
20
+ _unknown_failure_exit,
21
+ )
22
+ from .exception import DartException
23
+
24
+ _CREATE_TRANSACTION_URL_FRAG = "/transactions/create"
25
+ _LIST_DARTBOARDS_URL_FRAG = "/dartboards"
26
+ _LIST_FOLDERS_URL_FRAG = "/folders"
27
+ _REPLICATE_DARTBOARD_URL_FRAG_FMT = "/dartboards/replicate/{dartboard_id}"
28
+ _REPLICATE_SPACE_URL_FRAG_FMT = "/spaces/replicate/{space_id}"
29
+
30
+
31
+ def _get_space_url(host: str, space_id: str) -> str:
32
+ return f"{host}/s/{space_id}"
33
+
34
+
35
+ def _get_dartboard_url(host: str, dartboard_id: str) -> str:
36
+ return f"{host}/d/{dartboard_id}"
37
+
38
+
39
+ def _get_folder_url(host: str, folder_id: str) -> str:
40
+ return f"{host}/f/{folder_id}"
41
+
42
+
43
+ def _handle_api_errors(fn: Callable[..., httpx.Response]) -> Callable[..., httpx.Response]:
44
+ @wraps(fn)
45
+ def wrapper(*args, **kwargs):
46
+ response = fn(*args, **kwargs)
47
+ if response.status_code in {401, 403}:
48
+ _auth_failure_exit()
49
+ return response
50
+
51
+ return wrapper
52
+
53
+
54
+ def _parse_transaction_response_and_maybe_exit(response: dict, model_kind: str, model_id: str) -> Any:
55
+ if (
56
+ response is None
57
+ or "results" not in response
58
+ or not response["results"]
59
+ or not response["results"][0]["success"]
60
+ ):
61
+ _unknown_failure_exit()
62
+ models = response["results"][0]["models"][f"{model_kind}s"]
63
+ model = next((e for e in models if e["duid"] == model_id), None)
64
+ if model is None:
65
+ _unknown_failure_exit()
66
+ return model
67
+
68
+
69
+ class DartOld(Dart):
70
+ @_handle_api_errors
71
+ @_handle_request_errors
72
+ def transact(self, operations: list[dict], kind: str) -> httpx.Response:
73
+ transaction = {
74
+ "duid": _make_id(),
75
+ "kind": kind,
76
+ "operations": operations,
77
+ }
78
+ request_body = {
79
+ "client_duid": self.get_client_id(),
80
+ "items": [transaction],
81
+ }
82
+ return self._private_api.get_httpx_client().post(_CREATE_TRANSACTION_URL_FRAG, json=request_body)
83
+
84
+ @_handle_api_errors
85
+ @_handle_request_errors
86
+ def get(self, url_frag, *args, **kwargs) -> httpx.Response:
87
+ return self._private_api.get_httpx_client().get(url_frag, *args, **kwargs)
88
+
89
+ @_handle_api_errors
90
+ @_handle_request_errors
91
+ def post(self, url_frag, *args, **kwargs) -> httpx.Response:
92
+ return self._private_api.get_httpx_client().post(url_frag, *args, **kwargs)
93
+
94
+
95
+ def replicate_space(
96
+ space_id: str,
97
+ *,
98
+ title: Union[str, None] = None,
99
+ abrev: Union[str, None] = None,
100
+ color_hex: Union[str, None] = None,
101
+ accessible_by_team: Union[bool, None] = None,
102
+ accessor_duids: Union[list[str], None] = None,
103
+ ) -> str:
104
+ dart = DartOld()
105
+ content = {}
106
+ if title is not None:
107
+ content["title"] = title
108
+ if abrev is not None:
109
+ content["abrev"] = abrev
110
+ if color_hex is not None:
111
+ content["colorHex"] = color_hex
112
+ if accessible_by_team is not None:
113
+ content["accessibleByTeam"] = accessible_by_team
114
+ if accessor_duids is not None:
115
+ content["accessorIds"] = accessor_duids
116
+ response = dart.post(_REPLICATE_SPACE_URL_FRAG_FMT.format(space_id=space_id), json=content)
117
+ space_id = response.json()["duid"]
118
+
119
+ _log(f"Replicated space at {_get_space_url(dart.get_base_url(), space_id)}")
120
+ _log("Done.")
121
+ return space_id
122
+
123
+
124
+ def get_dartboards(space_id: str, include_special: bool = False) -> list[dict]:
125
+ dart = DartOld()
126
+
127
+ response = dart.get(_LIST_DARTBOARDS_URL_FRAG, params={"space_duid": space_id})
128
+ response_json = response.json()
129
+ dartboards = response_json["results"] if response_json is not None else []
130
+ if not include_special:
131
+ dartboards = [e for e in dartboards if e["kind"] == "Custom"]
132
+
133
+ _log(f"Got {len(dartboards)} dartboards")
134
+ _log("Done.")
135
+ return dartboards
136
+
137
+
138
+ def replicate_dartboard(dartboard_id: str, *, title: Union[str, None] = None) -> str:
139
+ dart = DartOld()
140
+ content = {}
141
+ if title is not None:
142
+ content["title"] = title
143
+ response = dart.post(_REPLICATE_DARTBOARD_URL_FRAG_FMT.format(dartboard_id=dartboard_id), json=content)
144
+ dartboard_id = response.json()["duid"]
145
+
146
+ _log(f"Replicated dartboard at {_get_dartboard_url(dart.get_base_url(), dartboard_id)}")
147
+ _log("Done.")
148
+ return dartboard_id
149
+
150
+
151
+ def update_dartboard(dartboard_id: str, *, title: Union[str, None] = None, color_hex: Union[str, None] = None) -> dict:
152
+ dart = DartOld()
153
+ dartboard_update = {}
154
+
155
+ if title is not None:
156
+ dartboard_update["title"] = title
157
+ if color_hex is not None:
158
+ dartboard_update["color_hex"] = color_hex
159
+
160
+ if not dartboard_update:
161
+ raise DartException("At least one of 'title' or 'color_hex' must be provided to update a dartboard.")
162
+
163
+ dartboard_update["duid"] = dartboard_id
164
+ dartboard_update_op = {
165
+ "model": "dartboard",
166
+ "kind": "update",
167
+ "data": dartboard_update,
168
+ }
169
+ response = dart.transact([dartboard_update_op], "dartboard_update")
170
+ response_json = response.json()
171
+ dartboard = _parse_transaction_response_and_maybe_exit(response_json, "dartboard", dartboard_id)
172
+
173
+ _log(f"Updated dartboard {dartboard['title']} at {_get_dartboard_url(dart.get_base_url(), dartboard['duid'])}")
174
+ _log("Done.")
175
+ return dartboard
176
+
177
+
178
+ def get_folders(space_id: str, *, include_special: Union[bool, None] = False) -> list[dict]:
179
+ dart = DartOld()
180
+
181
+ response = dart.get(_LIST_FOLDERS_URL_FRAG, params={"space_duid": space_id})
182
+ response_json = response.json()
183
+ folders = response_json["results"] if response_json is not None else []
184
+ if not include_special:
185
+ folders = [e for e in folders if e["kind"] == "Other"]
186
+
187
+ _log(f"Got {len(folders)} folders")
188
+ _log("Done.")
189
+ return folders
190
+
191
+
192
+ def update_folder(folder_id: str, *, title: Union[str, None] = None, color_hex: Union[str, None] = None) -> dict:
193
+ dart = DartOld()
194
+ folder_update = {}
195
+
196
+ if title is not None:
197
+ folder_update["title"] = title
198
+ if color_hex is not None:
199
+ folder_update["color_hex"] = color_hex
200
+
201
+ if not folder_update:
202
+ raise DartException("At least one of 'title' or 'color_hex' must be provided to update a folder.")
203
+
204
+ folder_update["duid"] = folder_id
205
+ folder_update_op = {
206
+ "model": "folder",
207
+ "kind": "update",
208
+ "data": folder_update,
209
+ }
210
+ response = dart.transact([folder_update_op], "folder_update")
211
+ response_json = response.json()
212
+ folder = _parse_transaction_response_and_maybe_exit(response_json, "folder", folder_id)
213
+
214
+ _log(f"Updated folder {folder['title']} at {_get_folder_url(dart.get_base_url(), folder['duid'])}")
215
+ _log("Done.")
216
+ return folder
dart/order_manager.py CHANGED
@@ -6,7 +6,6 @@ from random import choices
6
6
 
7
7
  from .exception import OrderException
8
8
 
9
-
10
9
  _MIN_ORD = 1
11
10
  _MAX_ORD = 256
12
11
 
@@ -28,12 +27,8 @@ def _get_orders_between_recursive(start: str, end: str, count: int):
28
27
  prefix = start[:i].ljust(i, chr(_MIN_ORD))
29
28
  if diff > count:
30
29
  frac = diff / (count + 1)
31
- return [
32
- prefix + chr(start_ord + round(frac * (j + 1))) for j in range(0, count)
33
- ]
34
- segs = (
35
- [start[i:]] + [chr(start_ord + j + 1) for j in range(diff - 1)] + [end[i:]]
36
- )
30
+ return [prefix + chr(start_ord + round(frac * (j + 1))) for j in range(0, count)]
31
+ segs = [start[i:]] + [chr(start_ord + j + 1) for j in range(diff - 1)] + [end[i:]]
37
32
  tot_amount = 0
38
33
  amounts = []
39
34
  for j in range(diff):
@@ -42,10 +37,7 @@ def _get_orders_between_recursive(start: str, end: str, count: int):
42
37
  tot_amount += next_amount
43
38
  res = []
44
39
  for j in range(diff):
45
- res += [
46
- prefix + e
47
- for e in _get_orders_between_recursive(segs[j], segs[j + 1], amounts[j])
48
- ]
40
+ res += [prefix + e for e in _get_orders_between_recursive(segs[j], segs[j + 1], amounts[j])]
49
41
  return res
50
42
  raise OrderException(f"failed to get {count} values between {start} and {end}")
51
43
 
@@ -56,7 +48,4 @@ def get_orders_between(start: str | None, end: str | None, count: int = 1):
56
48
  if bool(start) and bool(end) and start >= end:
57
49
  print(f"invalid request for {count} values between {start} and {end}")
58
50
  return [start] * count
59
- return [
60
- e + _make_order_suffix()
61
- for e in _get_orders_between_recursive(start or "", end or "", count)
62
- ]
51
+ return [e + _make_order_suffix() for e in _get_orders_between_recursive(start or "", end or "", count)]
dart/webhook.py CHANGED
@@ -2,19 +2,14 @@ import hashlib
2
2
  import hmac
3
3
  import os
4
4
 
5
-
6
5
  _WEBHOOK_SECRET = os.environ.get("DART_WEBHOOK_SECRET")
7
- _ENCODED_WEBHOOK_SECRET = (
8
- _WEBHOOK_SECRET.encode() if _WEBHOOK_SECRET is not None else None
9
- )
6
+ _ENCODED_WEBHOOK_SECRET = _WEBHOOK_SECRET.encode() if _WEBHOOK_SECRET is not None else None
10
7
 
11
8
 
12
9
  def is_signature_correct(payload: bytes, signature: str) -> bool:
13
10
  if _ENCODED_WEBHOOK_SECRET is None:
14
11
  raise RuntimeError("DART_WEBHOOK_SECRET environment variable is not set")
15
- expected_signature = hmac.new(
16
- _ENCODED_WEBHOOK_SECRET, payload, hashlib.sha256
17
- ).hexdigest()
12
+ expected_signature = hmac.new(_ENCODED_WEBHOOK_SECRET, payload, hashlib.sha256).hexdigest()
18
13
  try:
19
14
  return hmac.compare_digest(expected_signature, signature)
20
15
  except TypeError:
@@ -1,8 +1,8 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: dart-tools
3
- Version: 0.6.16
3
+ Version: 0.7.1
4
4
  Summary: The Dart CLI and Python Library
5
- Author-email: Dart Software Team <software@itsdart.com>
5
+ Author-email: Dart <software@itsdart.com>
6
6
  License: MIT License
7
7
 
8
8
  Copyright (c) 2023 Dart
@@ -28,8 +28,8 @@ License: MIT License
28
28
  Project-URL: Homepage, https://www.itsdart.com/?nr=1
29
29
  Project-URL: Web App, https://app.itsdart.com/
30
30
  Project-URL: Help Center, https://help.itsdart.com/
31
- Project-URL: Bugs and Features, https://github.com/its-dart/dart-tools/issues
32
- Project-URL: Library Source, https://github.com/its-dart/dart-tools/
31
+ Project-URL: Bugs and Features, https://github.com/its-dart/dart-tools-py/issues
32
+ Project-URL: Library Source, https://github.com/its-dart/dart-tools-py/
33
33
  Keywords: dart,cli,projectmanagement,taskmanagement
34
34
  Classifier: Development Status :: 4 - Beta
35
35
  Classifier: Environment :: Console
@@ -59,14 +59,14 @@ Requires-Dist: dateparser
59
59
  Requires-Dist: httpx
60
60
  Requires-Dist: pick
61
61
  Requires-Dist: platformdirs
62
- Requires-Dist: requests
62
+ Dynamic: license-file
63
63
 
64
64
  <div align="center">
65
65
  <h1>Dart Tools</h1>
66
66
  <p>
67
67
  <a href="https://pypi.org/project/dart-tools"><img src="https://img.shields.io/pypi/v/dart-tools" alt="PyPI"></a>
68
68
  <a href="pyproject.toml"><img src="https://img.shields.io/pypi/pyversions/dart-tools" alt="Supported Python Versions"></a>
69
- <a href="LICENSE"><img src="https://img.shields.io/github/license/its-dart/dart-tools" alt="License"></a>
69
+ <a href="LICENSE"><img src="https://img.shields.io/github/license/its-dart/dart-tools-py" alt="License"></a>
70
70
  </p>
71
71
  </div>
72
72
 
@@ -74,52 +74,63 @@ Requires-Dist: requests
74
74
 
75
75
  `dart-tools` is the Dart CLI and Python Library. It enables direct integration with Dart through a terminal CLI or through Python.
76
76
 
77
-
78
77
  - [Installation](#installation)
78
+ - [Naming conflicts](#naming-conflicts)
79
79
  - [Using the CLI](#using-the-cli)
80
80
  - [Using the Python Library](#using-the-python-library)
81
81
  - [Using the Python Library in AWS Lambda Functions](#using-the-python-library-in-aws-lambda-functions)
82
- - [Advanced Usage](#advanced-usage)
82
+ - [Navigate to the directory containing your `lambda_function.py` source file. In this example, the directory is named `my_function`.](#navigate-to-the-directory-containing-your-lambda_functionpy-source-file-in-this-example-the-directory-is-named-my_function)
83
+ - [Create a Deployment Package](#create-a-deployment-package)
84
+ - [Zip the contents of the `package` directory along with your `lambda_function.py`](#zip-the-contents-of-the-package-directory-along-with-your-lambda_functionpy)
85
+ - [Deploy the Lambda function](#deploy-the-lambda-function)
83
86
  - [Help and Resources](#help-and-resources)
84
87
  - [Contributing](#contributing)
85
88
  - [License](#license)
86
89
 
87
-
88
90
  ## Installation
89
91
 
90
92
  In the terminal, install by running
93
+
91
94
  ```sh
92
95
  pip install dart-tools
93
96
  ```
94
97
 
98
+ ### Naming conflicts
99
+
100
+ If you have a preexisting shell command named `dart`, a quick fix is to run `which -a dart` and fine the path for this `dart` application. Then you can create an alias and add it to your shell profile file (`.zshrc`, `.bashrc`, etc.). For example, open `~/.zshrc` and add a line like `alias dartai="/path/to/dart"`, save it, and restart your terminal.
95
101
 
96
102
  ## Using the CLI
97
103
 
98
104
  Start off by setting up authentication with
105
+
99
106
  ```sh
100
107
  dart login
101
108
  ```
102
109
 
103
110
  Then, you can create a new task with a command along the lines of
111
+
104
112
  ```sh
105
- dart createtask "Update the landing page" -p0 --tag marketing
113
+ dart task-create "Update the landing page" -p0 --tag marketing
106
114
  ```
115
+
107
116
  which will make a new task called 'Update the landing page' with priority 'Critical' (i.e. P0) and with the 'marketing' tag.
108
117
 
109
- You can explore all of these options and many more with `dart --help` or the more specific help for subcommands, in this case `dart createtask --help`.
118
+ You can explore all of these options and many more with `dart --help` or the more specific help for subcommands, in this case `dart task-create --help`.
110
119
 
111
120
  Another common workflow is to updating a preexisting task. To do this, run something like
121
+
112
122
  ```sh
113
- dart updatetask [DUID] -s Done
123
+ dart task-update [ID] -s Done
114
124
  ```
115
- This command will mark the referenced task 'Done'. Here `[DUID]` is meant to be replaced (including the brackets) with the 'Dart ID' of an existing task. You can get a DUID from any existing task in a number of ways, such as by copying it from the end of a task's URL or by clicking the '...' button in a task page in Dart and then choosing 'Copy ID'.
116
125
 
126
+ This command will mark the referenced task 'Done'. Here `[ID]` is meant to be replaced (including the brackets) with the ID of an existing task. You can get a ID from any existing task in a number of ways, such as by copying it from the end of a task's URL or by clicking the '...' button in a task page in Dart and then choosing 'Copy ID'.
117
127
 
118
128
  ## Using the Python Library
119
129
 
120
- First, set up authentication. Run `dart login` in the terminal for an interactive process, or visit [your Dart profile](https://app.itsdart.com/?settings=account) and then run `dart.login(token)` or save the token into the `DART_TOKEN` environment variable.
130
+ First, set up authentication. Run `dart login` in the terminal for an interactive process. Alternatively, copy your authentication token from [your Dart profile](https://app.itsdart.com/?settings=account) and save that as the `DART_TOKEN` environment variable.
121
131
 
122
132
  Then, you can run something like
133
+
123
134
  ```python
124
135
  import os
125
136
  from dart import create_task, is_logged_in, update_task
@@ -133,21 +144,20 @@ new_task = create_task(
133
144
  )
134
145
 
135
146
  # Update the task to be 'Done'
136
- update_task(new_task.duid, status_title="Done")
147
+ update_task(new_task.id, status_title="Done")
137
148
  ```
138
149
 
139
-
140
150
  ## Using the Python Library in AWS Lambda Functions
141
151
 
142
152
  To use the `dart-tools` Python library in an AWS Lambda function, you need to package the library with your Lambda deployment package (see more details at [Working with .zip file archives for Python Lambda functions](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html)). Follow these steps:
143
153
 
144
- 1. Navigate to the directory containing your `lambda_function.py` source file. In this example, the directory is named `my_function`.
154
+ ### Navigate to the directory containing your `lambda_function.py` source file. In this example, the directory is named `my_function`.
145
155
 
146
156
  ```sh
147
157
  cd my_function
148
158
  ```
149
159
 
150
- 2. Create a Deployment Package
160
+ ### Create a Deployment Package
151
161
 
152
162
  Use Docker to create a deployment package that includes the `dart-tools` library. Run the following commands in your terminal, ensuring that the `RUNTIME_PYTHON_VERSION` and `RUNTIME_ARCHITECTURE` environment variables match the runtime settings of your Lambda function:
153
163
 
@@ -159,7 +169,7 @@ To use the `dart-tools` Python library in an AWS Lambda function, you need to pa
159
169
 
160
170
  This command installs the `dart-tools` library into a directory named `package` in your current working directory.
161
171
 
162
- 3. Zip the contents of the `package` directory along with your `lambda_function.py`
172
+ ### Zip the contents of the `package` directory along with your `lambda_function.py`
163
173
 
164
174
  ```sh
165
175
  cd package
@@ -168,58 +178,19 @@ To use the `dart-tools` Python library in an AWS Lambda function, you need to pa
168
178
  zip -r my_deployment_package.zip lambda_function.py
169
179
  ```
170
180
 
171
- 4. Deploy the Lambda function
181
+ ### Deploy the Lambda function
172
182
 
173
183
  Upload the `my_deployment_package.zip` file to AWS Lambda using the AWS Management Console or the AWS CLI.
174
184
 
175
185
  By following these steps, you can use the `dart-tools` Python library within your AWS Lambda functions.
176
186
 
177
-
178
- ## Advanced Usage
179
-
180
- Almost anything that can be done in Dart can be done with the Python library, but there are not convenient wrapper functions for everything.
181
- For most advanced usage, the best thing to do is to [get in touch with us](mailto:support@itsdart.com) and we can help.
182
-
183
- However, if you want to explore on your own, the client is well-typed, so you can simply explore the code to see what is possible.
184
- All updates will go through the the `dart.transact` function.
185
-
186
- As an example, you could run something akin to `update_task` with
187
- ```python
188
- from dart import (
189
- Dart,
190
- Operation,
191
- OperationKind,
192
- OperationModelKind,
193
- TaskUpdate,
194
- TransactionKind,
195
- )
196
-
197
- # Initialize the inner client
198
- dart = Dart()
199
-
200
- # Prepare the update operation
201
- task_update = TaskUpdate(
202
- duid="[DUID]",
203
- size=5,
204
- )
205
- task_update_op = Operation(
206
- model=OperationModelKind.TASK,
207
- kind=OperationKind.UPDATE,
208
- data=task_update,
209
- )
210
-
211
- # Call the operation transactionally to perform the update
212
- response = dart.transact([task_update_op], TransactionKind.TASK_UPDATE)
213
- ```
214
-
215
-
216
187
  ## Help and Resources
217
188
 
218
- - [Homepage](https://www.itsdart.com/?nr=1)
189
+ - [Homepage](https://itsdart.com/?nr=1)
219
190
  - [Web App](https://app.itsdart.com/)
220
191
  - [Help Center](https://help.itsdart.com/)
221
192
  - [Bugs and Features](https://app.itsdart.com/p/r/JFyPnhL9En61)
222
- - [Library Source](https://github.com/its-dart/dart-tools/)
193
+ - [Library Source](https://github.com/its-dart/dart-tools-py/)
223
194
  - [Chat on Discord](https://discord.gg/RExv8jEkSh)
224
195
  - Email us at [support@itsdart.com](mailto:support@itsdart.com)
225
196
 
@@ -0,0 +1,71 @@
1
+ dart/__init__.py,sha256=M4oDY_DtfE7s50jXziRxVuL95hE1EKEaWOEmWxy8_Ig,523
2
+ dart/dart.py,sha256=avemWyqsBrGGCtmxzronUj3vVfJmiKFh4t9vI-Hlu0s,26765
3
+ dart/exception.py,sha256=evN1SFV7Bal5dQIIOnhYA0cRu6jSa0cOCiG7AkHZD5A,85
4
+ dart/old.py,sha256=LqwFKYDpNwHlp_0NT9UACmAsx8PwYLyogLmY7YcuzVg,7053
5
+ dart/order_manager.py,sha256=WI8YEjdOuEFDNcRCm30INAA5lY8016ttt0yXElGIeUU,1882
6
+ dart/webhook.py,sha256=1_8m1ik4k7yOHi1mBKUQrTy6RIXCFCuq0QJkoloZEGY,590
7
+ dart/generated/__init__.py,sha256=8fO-FKZzuZzOUUaqtlgw7k08MUwNLf8Ll-cAt7BgmAU,158
8
+ dart/generated/client.py,sha256=o_mdLqyBCQstu5tS1WZFwqIEbGwkvWQ7eQjuCJw_5VY,12419
9
+ dart/generated/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
10
+ dart/generated/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
11
+ dart/generated/types.py,sha256=E1hhDh_zXfsSQ0NCt9-uw90_Mr5iIlsdfnfvxv5HarU,1005
12
+ dart/generated/api/__init__.py,sha256=LmRMQNOJjUSyQhrOaV7YNBf0HDM0BHQ_O5TVEaG9aqc,383
13
+ dart/generated/api/comment/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
14
+ dart/generated/api/comment/create_comment.py,sha256=G9kpQ60IrMC4cxXP--wsPvVtYPMmByy-t55wV4WkvbI,4757
15
+ dart/generated/api/config/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
16
+ dart/generated/api/config/get_config.py,sha256=TPjumTzM0OvcALAGId_ieDltRIdFWKM-CQ1RXwdSKSo,4142
17
+ dart/generated/api/dartboard/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
18
+ dart/generated/api/dartboard/retrieve_dartboard.py,sha256=z7dmuyPurhv_fnaMo_viKW88kYmvB_nBViHOoQBJbD0,4445
19
+ dart/generated/api/doc/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
20
+ dart/generated/api/doc/create_doc.py,sha256=IK0FDGTzdjT_b5uDCJbtbBZygGt_Lh_0XyJBBVFDorc,4993
21
+ dart/generated/api/doc/delete_doc.py,sha256=RjN1-d4Zp_1xPAJLiDIzX9gXNrh9KV9O4ksDTnlP05w,4216
22
+ dart/generated/api/doc/list_docs.py,sha256=cezHhq91h23ZdIGVwc8XQKx1ZsV268LXfzNX08jnCms,8365
23
+ dart/generated/api/doc/retrieve_doc.py,sha256=8y6zayJRj5WYxK23wVE_0qWfRfiZhH2DHEdwuQtSGRA,4205
24
+ dart/generated/api/doc/update_doc.py,sha256=VcjUwgcnrcQSi-YqLVJM08s_11MKWbMa1FQPtbVPWBY,5007
25
+ dart/generated/api/folder/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
26
+ dart/generated/api/folder/retrieve_folder.py,sha256=jWLOw7ygMWxFKlttZjwSXkyExEvswVRCXaN-X3WOkWc,4363
27
+ dart/generated/api/task/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
28
+ dart/generated/api/task/create_task.py,sha256=0qLps0cHZE6LqA9cUQEExEpnhT4k83AHrz8nm1TzS0Q,5057
29
+ dart/generated/api/task/delete_task.py,sha256=4m1bvIMdGwDXEJNu-NqEUZj6T9eVzYdG75n2B7TjZ_Q,4242
30
+ dart/generated/api/task/list_tasks.py,sha256=faEoASEwPN2uL0lFVRIUOkOX7BkGDkFO1DJK_spl2D0,16444
31
+ dart/generated/api/task/retrieve_task.py,sha256=aKdsZm6gphHytBCT03xjb8Y_2qCVGeAkd1uTrLiaFV4,4303
32
+ dart/generated/api/task/update_task.py,sha256=5wVrhwZnkugA7TA1DgF2V9RYed3iQ058yVNaUtyiI9c,5044
33
+ dart/generated/api/view/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
34
+ dart/generated/api/view/retrieve_view.py,sha256=0xv1SlZtvIixiz84HTz2gp9PKT2GNTQioIHriF8Yu3w,4315
35
+ dart/generated/models/__init__.py,sha256=xeAXd32Gh87pe5sYlCMlp7DdUMcHr74VlgQkfR6QdZk,1878
36
+ dart/generated/models/comment.py,sha256=xxjnssdNxXO3iO8cHH5TYDEmsL9ItvH9OM-F0TeljjQ,2361
37
+ dart/generated/models/comment_create.py,sha256=n_Q3riMI0U17rzpp7SKvhnA3YhtyJxXMuXumtVRgZpw,1764
38
+ dart/generated/models/concise_doc.py,sha256=xrJIJr4rm_iG0DlmpemBtzDaOxroHC2NgsG-V9CNsX8,2200
39
+ dart/generated/models/concise_task.py,sha256=qxSC6v_yXt6bM2zDdhmcCOzFtFfd5USeUAAPIEHieeE,9434
40
+ dart/generated/models/dartboard.py,sha256=QWRy37OFBrlloUAk4_eG9E_pMZgFNAWejYmA1UwL32I,2789
41
+ dart/generated/models/doc.py,sha256=f_1aVMo7aCQTGOhH19IjrkucIbINj7n_OkbaZnbJ9tc,2298
42
+ dart/generated/models/doc_create.py,sha256=HOpiuuDg7fNEkwoUvXqceXKI59cDVBS5PzTR08iYE7E,2134
43
+ dart/generated/models/doc_update.py,sha256=Wv565KyrxMWxUCvqDJjcfzk2lalOj987o69RgBYF8wc,2376
44
+ dart/generated/models/folder.py,sha256=G0uGZqOgnj6ehkEsIMDjU5EGeDzIMp6H4KDreg6PfsI,2729
45
+ dart/generated/models/list_docs_o_item.py,sha256=owGxTljNQTi1KAHkfTknrSTMEome1x75vUbHRVO12JM,320
46
+ dart/generated/models/paginated_concise_doc_list.py,sha256=Y7YbOwd7TaHm7b9rHJvVKEynHEp-xgCyN0Kw5gEZ4i8,3665
47
+ dart/generated/models/paginated_concise_task_list.py,sha256=Yu-r-WvWBH3LfMWGm3YNQ30w1-B0mdxjx5jykKFFQlY,3677
48
+ dart/generated/models/priority.py,sha256=eupjzXQndyaia8svwVmylisIGwl6OQ_0g8pgcsm8118,195
49
+ dart/generated/models/task.py,sha256=7ZDqWPSNYoPpJOhIQea8HlirtsTe93xQnvCI8a9tIPM,9605
50
+ dart/generated/models/task_create.py,sha256=TuroQ0M3f6nXm0k9g0O8CF2VBJFfdmaXkSTfvYO9YMU,9828
51
+ dart/generated/models/task_update.py,sha256=od22McUNcFIcVo6hlVbMz4yPYa6xbnaqUsGhCesJRKY,10071
52
+ dart/generated/models/user.py,sha256=Vl63zDoadat1k5NtTq3AAI0NMTp5T3DOIAcM5zZXD3o,1552
53
+ dart/generated/models/user_space_configuration.py,sha256=iEP7IP99eUdpEwrE-Cul6kD1OQukXcYPvZu9xoiDluQ,3846
54
+ dart/generated/models/view.py,sha256=X7w6hH387LTAY8nbjGDNdf0hbho2O2al8kVOhCZi4Pg,2739
55
+ dart/generated/models/wrapped_comment.py,sha256=tjMBU-NZYQ6n_jSn6LOT00JPWGcJjFjAWSlz77cDIT8,1613
56
+ dart/generated/models/wrapped_comment_create.py,sha256=g_t09rNShbqDpdkUBSGY0jS5tO0qaPtoJR_VfewTZq0,1690
57
+ dart/generated/models/wrapped_dartboard.py,sha256=hzAJ4OJkw-gjOW-V1asqvSDKs-K3XHSSmVqX_GhnNyw,1637
58
+ dart/generated/models/wrapped_doc.py,sha256=gNrcTOEjLtHV7slg7mTnDmwBfYSp_yrpeIvH_fR8hdo,1565
59
+ dart/generated/models/wrapped_doc_create.py,sha256=pEkc0VTFYZNUKVKpldFBI5V514y6gS6KKURrfDIsRrk,1642
60
+ dart/generated/models/wrapped_doc_update.py,sha256=Yei-8TEavX1bWBZpC4ZndacCaosGXSlXX1RYtIyOgHA,1642
61
+ dart/generated/models/wrapped_folder.py,sha256=KDXM4fQQTg5kjwZmEwpLtPde0BOPMRU-vCQ-6psAm60,1601
62
+ dart/generated/models/wrapped_task.py,sha256=TRlVMxIGhDwSaJlXdMH6q7Vx2hpz7EdiGnsd06XZN1Y,1577
63
+ dart/generated/models/wrapped_task_create.py,sha256=Oxdot2EwfEuC3l4uo0fAvmyjRNVkXALmWCvfgHI7BcI,1654
64
+ dart/generated/models/wrapped_task_update.py,sha256=_erGSSR_k6ahF_RFjgLKdyitx5TDQiFw_Ml77zHQdJM,1654
65
+ dart/generated/models/wrapped_view.py,sha256=zflJxA4UnITM8w-0EObw4AF54yS-c_e5UL6vaikXyG8,1577
66
+ dart_tools-0.7.1.dist-info/licenses/LICENSE,sha256=4ZrQkL_PyaBC3paDrqLnD3knKAXS2i8HwJGyUgRUxls,1061
67
+ dart_tools-0.7.1.dist-info/METADATA,sha256=fAis7N2uQC9zJkJOVrtbFeo_wyaBABTPDDK5iWfG7HA,8981
68
+ dart_tools-0.7.1.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
69
+ dart_tools-0.7.1.dist-info/entry_points.txt,sha256=KOVAnDWJbSKn9HoXWQ7x6NfACYzSMGHBBaBxonHEv6w,34
70
+ dart_tools-0.7.1.dist-info/top_level.txt,sha256=ZwUQ6QjCyi1i32BJOAkbOA7UfgitLmIwToJGJwZXPrg,5
71
+ dart_tools-0.7.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (79.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
File without changes
File without changes