dart-tools 0.6.15__py3-none-any.whl → 0.7.0__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 +421 -698
  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.15.dist-info → dart_tools-0.7.0.dist-info}/METADATA +15 -75
  63. dart_tools-0.7.0.dist-info/RECORD +71 -0
  64. {dart_tools-0.6.15.dist-info → dart_tools-0.7.0.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 -80
  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.15.dist-info/RECORD +0 -257
  282. dart_tools-0.6.15.dist-info/dist/dart-tools-0.3.3.tar.gz +0 -0
  283. {dart_tools-0.6.15.dist-info → dart_tools-0.7.0.dist-info}/entry_points.txt +0 -0
  284. {dart_tools-0.6.15.dist-info → dart_tools-0.7.0.dist-info/licenses}/LICENSE +0 -0
  285. {dart_tools-0.6.15.dist-info → dart_tools-0.7.0.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
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: str | None = None,
99
+ abrev: str | None = None,
100
+ color_hex: str | None = None,
101
+ accessible_by_team: bool | None = None,
102
+ accessor_duids: 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: 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: str | None = None, color_hex: 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: bool = 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: str | None = None, color_hex: 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,40 +1,18 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: dart-tools
3
- Version: 0.6.15
3
+ Version: 0.7.0
4
4
  Summary: The Dart CLI and Python Library
5
- Author-email: Dart Software Team <software@itsdart.com>
6
- License: MIT License
7
-
8
- Copyright (c) 2023 Dart
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included in all
18
- copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- SOFTWARE.
27
-
5
+ Author-email: Dart <software@itsdart.com>
6
+ License-Expression: MIT
28
7
  Project-URL: Homepage, https://www.itsdart.com/?nr=1
29
8
  Project-URL: Web App, https://app.itsdart.com/
30
9
  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/
10
+ Project-URL: Bugs and Features, https://github.com/its-dart/dart-tools-py/issues
11
+ Project-URL: Library Source, https://github.com/its-dart/dart-tools-py/
33
12
  Keywords: dart,cli,projectmanagement,taskmanagement
34
13
  Classifier: Development Status :: 4 - Beta
35
14
  Classifier: Environment :: Console
36
15
  Classifier: Intended Audience :: Developers
37
- Classifier: License :: OSI Approved :: MIT License
38
16
  Classifier: Natural Language :: English
39
17
  Classifier: Operating System :: OS Independent
40
18
  Classifier: Programming Language :: Python
@@ -59,14 +37,14 @@ Requires-Dist: dateparser
59
37
  Requires-Dist: httpx
60
38
  Requires-Dist: pick
61
39
  Requires-Dist: platformdirs
62
- Requires-Dist: requests
40
+ Dynamic: license-file
63
41
 
64
42
  <div align="center">
65
43
  <h1>Dart Tools</h1>
66
44
  <p>
67
45
  <a href="https://pypi.org/project/dart-tools"><img src="https://img.shields.io/pypi/v/dart-tools" alt="PyPI"></a>
68
46
  <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>
47
+ <a href="LICENSE"><img src="https://img.shields.io/github/license/its-dart/dart-tools-py" alt="License"></a>
70
48
  </p>
71
49
  </div>
72
50
 
@@ -102,22 +80,22 @@ dart login
102
80
 
103
81
  Then, you can create a new task with a command along the lines of
104
82
  ```sh
105
- dart createtask "Update the landing page" -p0 --tag marketing
83
+ dart task-create "Update the landing page" -p0 --tag marketing
106
84
  ```
107
85
  which will make a new task called 'Update the landing page' with priority 'Critical' (i.e. P0) and with the 'marketing' tag.
108
86
 
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`.
87
+ 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
88
 
111
89
  Another common workflow is to updating a preexisting task. To do this, run something like
112
90
  ```sh
113
- dart updatetask [DUID] -s Done
91
+ dart task-update [ID] -s Done
114
92
  ```
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'.
93
+ 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'.
116
94
 
117
95
 
118
96
  ## Using the Python Library
119
97
 
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.
98
+ 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
99
 
122
100
  Then, you can run something like
123
101
  ```python
@@ -133,7 +111,7 @@ new_task = create_task(
133
111
  )
134
112
 
135
113
  # Update the task to be 'Done'
136
- update_task(new_task.duid, status_title="Done")
114
+ update_task(new_task.id, status_title="Done")
137
115
  ```
138
116
 
139
117
 
@@ -175,51 +153,13 @@ To use the `dart-tools` Python library in an AWS Lambda function, you need to pa
175
153
  By following these steps, you can use the `dart-tools` Python library within your AWS Lambda functions.
176
154
 
177
155
 
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
156
  ## Help and Resources
217
157
 
218
158
  - [Homepage](https://www.itsdart.com/?nr=1)
219
159
  - [Web App](https://app.itsdart.com/)
220
160
  - [Help Center](https://help.itsdart.com/)
221
161
  - [Bugs and Features](https://app.itsdart.com/p/r/JFyPnhL9En61)
222
- - [Library Source](https://github.com/its-dart/dart-tools/)
162
+ - [Library Source](https://github.com/its-dart/dart-tools-py/)
223
163
  - [Chat on Discord](https://discord.gg/RExv8jEkSh)
224
164
  - Email us at [support@itsdart.com](mailto:support@itsdart.com)
225
165
 
@@ -0,0 +1,71 @@
1
+ dart/__init__.py,sha256=M4oDY_DtfE7s50jXziRxVuL95hE1EKEaWOEmWxy8_Ig,523
2
+ dart/dart.py,sha256=Syu6-JTBGKoX2EEcuBmeLhGidVbFcWaCvjJMFdTqr6g,26584
3
+ dart/exception.py,sha256=evN1SFV7Bal5dQIIOnhYA0cRu6jSa0cOCiG7AkHZD5A,85
4
+ dart/old.py,sha256=sKCJV0rSqKx0acIEvrV-Up6mOTKtJ14qf2vmeDzJ3vA,6973
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.0.dist-info/licenses/LICENSE,sha256=4ZrQkL_PyaBC3paDrqLnD3knKAXS2i8HwJGyUgRUxls,1061
67
+ dart_tools-0.7.0.dist-info/METADATA,sha256=ohVLSItmRPxYievflAulCLqEF4cnUGCdxh7ClLq3x9Q,6780
68
+ dart_tools-0.7.0.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
69
+ dart_tools-0.7.0.dist-info/entry_points.txt,sha256=KOVAnDWJbSKn9HoXWQ7x6NfACYzSMGHBBaBxonHEv6w,34
70
+ dart_tools-0.7.0.dist-info/top_level.txt,sha256=ZwUQ6QjCyi1i32BJOAkbOA7UfgitLmIwToJGJwZXPrg,5
71
+ dart_tools-0.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (79.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
File without changes
File without changes