dart-tools 0.5.4__tar.gz → 0.5.6__tar.gz

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 (187) hide show
  1. {dart-tools-0.5.4 → dart_tools-0.5.6}/PKG-INFO +8 -1
  2. {dart-tools-0.5.4 → dart_tools-0.5.6}/README.md +7 -0
  3. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/dart.py +22 -15
  4. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/__init__.py +2 -0
  5. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/dartboard.py +17 -1
  6. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/dartboard_create.py +23 -1
  7. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/dartboard_update.py +23 -1
  8. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/doc_create.py +24 -14
  9. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/doc_update.py +8 -0
  10. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/event.py +7 -7
  11. dart_tools-0.5.6/dart/generated/models/event_actor.py +18 -0
  12. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_create.py +32 -21
  13. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_update.py +8 -0
  14. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/tenant.py +15 -0
  15. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_update.py +8 -0
  16. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/view.py +16 -0
  17. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/view_create.py +22 -0
  18. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/view_update.py +22 -0
  19. dart_tools-0.5.6/dart/generated/models/zapier_integration.py +65 -0
  20. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/PKG-INFO +8 -1
  21. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/SOURCES.txt +1 -0
  22. {dart-tools-0.5.4 → dart_tools-0.5.6}/pyproject.toml +1 -1
  23. dart-tools-0.5.4/dart/generated/models/event_actor.py +0 -18
  24. {dart-tools-0.5.4 → dart_tools-0.5.6}/LICENSE +0 -0
  25. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/__init__.py +0 -0
  26. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/exception.py +0 -0
  27. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/__init__.py +0 -0
  28. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/api/__init__.py +0 -0
  29. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/api/transactions/__init__.py +0 -0
  30. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/api/transactions/transactions_create.py +0 -0
  31. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/client.py +0 -0
  32. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/errors.py +0 -0
  33. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/attachment.py +0 -0
  34. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/attachment_create.py +0 -0
  35. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/attachment_update.py +0 -0
  36. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/batch.py +0 -0
  37. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/brainstorm.py +0 -0
  38. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/brainstorm_create.py +0 -0
  39. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/brainstorm_state.py +0 -0
  40. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/brainstorm_update.py +0 -0
  41. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/color_name.py +0 -0
  42. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment.py +0 -0
  43. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment_create.py +0 -0
  44. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment_reaction.py +0 -0
  45. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment_reaction_create.py +0 -0
  46. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment_reaction_update.py +0 -0
  47. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/comment_update.py +0 -0
  48. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/dartboard_kind.py +0 -0
  49. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/dartboards_list_kind.py +0 -0
  50. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/discord_integration.py +0 -0
  51. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/doc.py +0 -0
  52. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/doc_source_type.py +0 -0
  53. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/entity_name.py +0 -0
  54. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/event_create.py +0 -0
  55. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/event_kind.py +0 -0
  56. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/event_subscription.py +0 -0
  57. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/event_subscription_update.py +0 -0
  58. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_applicability.py +0 -0
  59. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_assignee.py +0 -0
  60. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_connector.py +0 -0
  61. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_group.py +0 -0
  62. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_search.py +0 -0
  63. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/filter_set.py +0 -0
  64. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/folder.py +0 -0
  65. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/folder_create.py +0 -0
  66. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/folder_kind.py +0 -0
  67. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/folder_update.py +0 -0
  68. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/folders_list_kind.py +0 -0
  69. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form.py +0 -0
  70. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form_create.py +0 -0
  71. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form_field.py +0 -0
  72. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form_field_create.py +0 -0
  73. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form_field_update.py +0 -0
  74. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/form_update.py +0 -0
  75. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/github_integration.py +0 -0
  76. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/github_integration_tenant_extension_status.py +0 -0
  77. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/google_data.py +0 -0
  78. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/icon_kind.py +0 -0
  79. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout.py +0 -0
  80. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout_config.py +0 -0
  81. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout_create.py +0 -0
  82. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout_kind.py +0 -0
  83. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout_kind_config_map.py +0 -0
  84. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/layout_update.py +0 -0
  85. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/models_response.py +0 -0
  86. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/notification.py +0 -0
  87. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/notification_update.py +0 -0
  88. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/notion_integration.py +0 -0
  89. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/notion_integration_tenant_extension_status.py +0 -0
  90. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/operation.py +0 -0
  91. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/operation_kind.py +0 -0
  92. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/operation_model_kind.py +0 -0
  93. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/option.py +0 -0
  94. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/option_create.py +0 -0
  95. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/option_update.py +0 -0
  96. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_attachment_list.py +0 -0
  97. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_comment_list.py +0 -0
  98. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_comment_reaction_list.py +0 -0
  99. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_dartboard_list.py +0 -0
  100. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_doc_list.py +0 -0
  101. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_folder_list.py +0 -0
  102. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_form_field_list.py +0 -0
  103. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_form_list.py +0 -0
  104. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_layout_list.py +0 -0
  105. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_option_list.py +0 -0
  106. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_property_list.py +0 -0
  107. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_relationship_kind_list.py +0 -0
  108. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_relationship_list.py +0 -0
  109. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_space_list.py +0 -0
  110. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_status_list.py +0 -0
  111. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_task_doc_relationship_list.py +0 -0
  112. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_task_link_list.py +0 -0
  113. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_task_list.py +0 -0
  114. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_tenant_list.py +0 -0
  115. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_user_dartboard_layout_list.py +0 -0
  116. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_user_list.py +0 -0
  117. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/paginated_view_list.py +0 -0
  118. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/priority.py +0 -0
  119. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/properties_list_kind.py +0 -0
  120. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/property_.py +3 -3
  121. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/property_create.py +3 -3
  122. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/property_kind.py +0 -0
  123. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/property_update.py +3 -3
  124. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/recommendation_status.py +0 -0
  125. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship.py +0 -0
  126. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship_create.py +0 -0
  127. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship_kind.py +0 -0
  128. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship_kind_create.py +0 -0
  129. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship_kind_kind.py +0 -0
  130. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/relationship_kind_update.py +0 -0
  131. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/report_kind.py +0 -0
  132. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/request_body.py +0 -0
  133. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/response_body.py +0 -0
  134. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/slack_integration.py +0 -0
  135. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/slack_integration_tenant_extension_status.py +0 -0
  136. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/sort.py +0 -0
  137. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/space.py +0 -0
  138. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/space_create.py +0 -0
  139. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/space_kind.py +0 -0
  140. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/space_update.py +0 -0
  141. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/sprint_mode.py +0 -0
  142. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/status.py +0 -0
  143. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/status_create.py +0 -0
  144. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/status_kind.py +0 -0
  145. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/status_update.py +0 -0
  146. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/statuses_list_kind.py +0 -0
  147. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/subscription.py +0 -0
  148. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/subtask_display_mode.py +0 -0
  149. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/summary_statistic_kind.py +0 -0
  150. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task.py +0 -0
  151. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_doc_relationship.py +0 -0
  152. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_doc_relationship_create.py +0 -0
  153. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_link.py +0 -0
  154. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_link_create.py +0 -0
  155. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_link_kind.py +0 -0
  156. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_link_update.py +0 -0
  157. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_notion_document.py +0 -0
  158. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_notion_document_block_children_map.py +0 -0
  159. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_notion_document_block_map.py +0 -0
  160. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_notion_document_page_map.py +0 -0
  161. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_properties.py +0 -0
  162. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/task_source_type.py +0 -0
  163. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/tenant_update.py +0 -0
  164. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/theme.py +0 -0
  165. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/transaction.py +0 -0
  166. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/transaction_kind.py +0 -0
  167. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/transaction_response.py +0 -0
  168. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user.py +0 -0
  169. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_dartboard_layout.py +0 -0
  170. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_dartboard_layout_create.py +0 -0
  171. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_data_entity_retrieve_entity_kind.py +0 -0
  172. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_role.py +0 -0
  173. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/user_status.py +0 -0
  174. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/validation_error_response.py +0 -0
  175. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/validation_error_response_items.py +0 -0
  176. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/view_kind.py +0 -0
  177. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/models/yc_integration.py +0 -0
  178. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/py.typed +0 -0
  179. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/generated/types.py +0 -0
  180. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/order_manager.py +0 -0
  181. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart/webhook.py +0 -0
  182. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/dependency_links.txt +0 -0
  183. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/dist/dart-tools-0.3.3.tar.gz +0 -0
  184. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/entry_points.txt +0 -0
  185. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/requires.txt +0 -0
  186. {dart-tools-0.5.4 → dart_tools-0.5.6}/dart_tools.egg-info/top_level.txt +0 -0
  187. {dart-tools-0.5.4 → dart_tools-0.5.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dart-tools
3
- Version: 0.5.4
3
+ Version: 0.5.6
4
4
  Summary: The Dart CLI and Python Library
5
5
  Author-email: Dart Software Team <software@itsdart.com>
6
6
  License: MIT License
@@ -73,6 +73,13 @@ Requires-Dist: platformdirs
73
73
  `dart-tools` is the Dart CLI and Python Library. It enables direct integration with Dart through a terminal CLI or through Python.
74
74
 
75
75
 
76
+ - [Setup](#setup)
77
+ - [Using the CLI](#using-the-cli)
78
+ - [Using the Python Library](#using-the-python-library)
79
+ - [Advanced Usage](#advanced-usage)
80
+ - [Help and Resources](#help-and-resources)
81
+
82
+
76
83
  ## Setup
77
84
 
78
85
  In the terminal, install by running
@@ -12,6 +12,13 @@
12
12
  `dart-tools` is the Dart CLI and Python Library. It enables direct integration with Dart through a terminal CLI or through Python.
13
13
 
14
14
 
15
+ - [Setup](#setup)
16
+ - [Using the CLI](#using-the-cli)
17
+ - [Using the Python Library](#using-the-python-library)
18
+ - [Advanced Usage](#advanced-usage)
19
+ - [Help and Resources](#help-and-resources)
20
+
21
+
15
22
  ## Setup
16
23
 
17
24
  In the terminal, install by running
@@ -79,6 +79,8 @@ _AUTH_TOKEN_KEY = "authToken"
79
79
  _CSRF_TOKEN_KEY = "csrfToken"
80
80
 
81
81
  _DUID_CHARS = string.ascii_lowercase + string.ascii_uppercase + string.digits
82
+ _NON_ALPHANUM_RE = re.compile(r"[^a-zA-Z0-9-]+")
83
+ _REPEATED_DASH_RE = re.compile(r"-{2,}")
82
84
  _PRIORITY_MAP = {
83
85
  0: Priority.CRITICAL,
84
86
  1: Priority.HIGH,
@@ -99,6 +101,23 @@ def _make_duid():
99
101
  return "".join(random.choices(_DUID_CHARS, k=12))
100
102
 
101
103
 
104
+ def trim_slug_str(s: str, length: int, max_under: int | None = None):
105
+ max_under = max_under if max_under is not None else length // 6
106
+ if len(s) <= length:
107
+ return s
108
+ for i in range(1, max_under + 1):
109
+ if s[length - i] == "-":
110
+ return s[: length - i]
111
+ return s[:length]
112
+
113
+
114
+ def slugify_str(s: str, lower=False, trim_kwargs=None):
115
+ lowered = s.lower() if lower else s
116
+ formatted = _NON_ALPHANUM_RE.sub("-", lowered.replace("'", ""))
117
+ formatted = _REPEATED_DASH_RE.sub("-", formatted).strip("-")
118
+ return trim_slug_str(formatted, **trim_kwargs) if trim_kwargs is not None else formatted
119
+
120
+
102
121
  def _run_cmd(cmd):
103
122
  return subprocess.check_output(cmd, shell=True).decode()
104
123
 
@@ -337,23 +356,11 @@ class _Git:
337
356
  raise ex
338
357
  return True
339
358
 
340
- @staticmethod
341
- def _format_for_branch(s):
342
- return re.sub(
343
- r"-{2,}", "-", re.sub(r"[^a-z0-9-]+", "-", s.lower().replace("'", ""))
344
- ).strip("-")
345
-
346
359
  @staticmethod
347
360
  def make_task_name(email, task):
348
- username = _Git._format_for_branch(email.split("@")[0])
349
- title = _Git._format_for_branch(task.title)
350
- long = f"{username}/{task.duid}-{title}"
351
- if len(long) <= 60:
352
- return long
353
- for i in range(1, 11):
354
- if long[60 - i] == "-":
355
- return long[: 60 - i]
356
- return long[:60]
361
+ username = slugify_str(email.split("@")[0], lower=True)
362
+ title = slugify_str(task.title, lower=True)
363
+ return trim_slug_str(f"{username}/{task.duid}-{title}", length=60)
357
364
 
358
365
  @staticmethod
359
366
  def get_current_branch():
@@ -159,6 +159,7 @@ from .view_create import ViewCreate
159
159
  from .view_kind import ViewKind
160
160
  from .view_update import ViewUpdate
161
161
  from .yc_integration import YcIntegration
162
+ from .zapier_integration import ZapierIntegration
162
163
 
163
164
  __all__ = (
164
165
  "Attachment",
@@ -320,4 +321,5 @@ __all__ = (
320
321
  "ViewKind",
321
322
  "ViewUpdate",
322
323
  "YcIntegration",
324
+ "ZapierIntegration",
323
325
  )
@@ -1,5 +1,5 @@
1
1
  import datetime
2
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, TypeVar, Union
2
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, TypeVar, Union, cast
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
@@ -61,6 +61,8 @@ class Dartboard:
61
61
  * `Light Brown` - LIGHT_BROWN
62
62
  * `Light Gray` - LIGHT_GRAY
63
63
  user_duids_to_layout_duids (List['UserDartboardLayout']):
64
+ always_shown_property_duids (List[str]):
65
+ always_hidden_property_duids (List[str]):
64
66
  updated_by_client_duid (Union[Unset, None, str]):
65
67
  index (Optional[int]):
66
68
  started_at (Optional[datetime.datetime]):
@@ -77,6 +79,8 @@ class Dartboard:
77
79
  icon_name_or_emoji: str
78
80
  color_name: ColorName
79
81
  user_duids_to_layout_duids: List["UserDartboardLayout"]
82
+ always_shown_property_duids: List[str]
83
+ always_hidden_property_duids: List[str]
80
84
  index: Optional[int]
81
85
  started_at: Optional[datetime.datetime]
82
86
  finished_at: Optional[datetime.datetime]
@@ -102,6 +106,10 @@ class Dartboard:
102
106
 
103
107
  user_duids_to_layout_duids.append(user_duids_to_layout_duids_item)
104
108
 
109
+ always_shown_property_duids = self.always_shown_property_duids
110
+
111
+ always_hidden_property_duids = self.always_hidden_property_duids
112
+
105
113
  updated_by_client_duid = self.updated_by_client_duid
106
114
  index = self.index
107
115
  started_at = self.started_at.isoformat() if self.started_at else None
@@ -122,6 +130,8 @@ class Dartboard:
122
130
  "iconNameOrEmoji": icon_name_or_emoji,
123
131
  "colorName": color_name,
124
132
  "userDuidsToLayoutDuids": user_duids_to_layout_duids,
133
+ "alwaysShownPropertyDuids": always_shown_property_duids,
134
+ "alwaysHiddenPropertyDuids": always_hidden_property_duids,
125
135
  "index": index,
126
136
  "startedAt": started_at,
127
137
  "finishedAt": finished_at,
@@ -162,6 +172,10 @@ class Dartboard:
162
172
 
163
173
  user_duids_to_layout_duids.append(user_duids_to_layout_duids_item)
164
174
 
175
+ always_shown_property_duids = cast(List[str], d.pop("alwaysShownPropertyDuids"))
176
+
177
+ always_hidden_property_duids = cast(List[str], d.pop("alwaysHiddenPropertyDuids"))
178
+
165
179
  updated_by_client_duid = d.pop("updatedByClientDuid", UNSET)
166
180
 
167
181
  index = d.pop("index")
@@ -191,6 +205,8 @@ class Dartboard:
191
205
  icon_name_or_emoji=icon_name_or_emoji,
192
206
  color_name=color_name,
193
207
  user_duids_to_layout_duids=user_duids_to_layout_duids,
208
+ always_shown_property_duids=always_shown_property_duids,
209
+ always_hidden_property_duids=always_hidden_property_duids,
194
210
  updated_by_client_duid=updated_by_client_duid,
195
211
  index=index,
196
212
  started_at=started_at,
@@ -1,5 +1,5 @@
1
1
  import datetime
2
- from typing import Any, Dict, List, Type, TypeVar, Union
2
+ from typing import Any, Dict, List, Type, TypeVar, Union, cast
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
@@ -59,6 +59,8 @@ class DartboardCreate:
59
59
  index (Union[Unset, None, int]):
60
60
  started_at (Union[Unset, None, datetime.datetime]):
61
61
  finished_at (Union[Unset, None, datetime.datetime]):
62
+ always_shown_property_duids (Union[Unset, List[str]]):
63
+ always_hidden_property_duids (Union[Unset, List[str]]):
62
64
  """
63
65
 
64
66
  duid: str
@@ -73,6 +75,8 @@ class DartboardCreate:
73
75
  index: Union[Unset, None, int] = UNSET
74
76
  started_at: Union[Unset, None, datetime.datetime] = UNSET
75
77
  finished_at: Union[Unset, None, datetime.datetime] = UNSET
78
+ always_shown_property_duids: Union[Unset, List[str]] = UNSET
79
+ always_hidden_property_duids: Union[Unset, List[str]] = UNSET
76
80
  additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
77
81
 
78
82
  def to_dict(self) -> Dict[str, Any]:
@@ -103,6 +107,14 @@ class DartboardCreate:
103
107
  if not isinstance(self.finished_at, Unset):
104
108
  finished_at = self.finished_at.isoformat() if self.finished_at else None
105
109
 
110
+ always_shown_property_duids: Union[Unset, List[str]] = UNSET
111
+ if not isinstance(self.always_shown_property_duids, Unset):
112
+ always_shown_property_duids = self.always_shown_property_duids
113
+
114
+ always_hidden_property_duids: Union[Unset, List[str]] = UNSET
115
+ if not isinstance(self.always_hidden_property_duids, Unset):
116
+ always_hidden_property_duids = self.always_hidden_property_duids
117
+
106
118
  field_dict: Dict[str, Any] = {}
107
119
  field_dict.update(self.additional_properties)
108
120
  field_dict.update(
@@ -130,6 +142,10 @@ class DartboardCreate:
130
142
  field_dict["startedAt"] = started_at
131
143
  if finished_at is not UNSET:
132
144
  field_dict["finishedAt"] = finished_at
145
+ if always_shown_property_duids is not UNSET:
146
+ field_dict["alwaysShownPropertyDuids"] = always_shown_property_duids
147
+ if always_hidden_property_duids is not UNSET:
148
+ field_dict["alwaysHiddenPropertyDuids"] = always_hidden_property_duids
133
149
 
134
150
  return field_dict
135
151
 
@@ -189,6 +205,10 @@ class DartboardCreate:
189
205
  else:
190
206
  finished_at = isoparse(_finished_at)
191
207
 
208
+ always_shown_property_duids = cast(List[str], d.pop("alwaysShownPropertyDuids", UNSET))
209
+
210
+ always_hidden_property_duids = cast(List[str], d.pop("alwaysHiddenPropertyDuids", UNSET))
211
+
192
212
  dartboard_create = cls(
193
213
  duid=duid,
194
214
  space_duid=space_duid,
@@ -202,6 +222,8 @@ class DartboardCreate:
202
222
  index=index,
203
223
  started_at=started_at,
204
224
  finished_at=finished_at,
225
+ always_shown_property_duids=always_shown_property_duids,
226
+ always_hidden_property_duids=always_hidden_property_duids,
205
227
  )
206
228
 
207
229
  dartboard_create.additional_properties = d
@@ -1,5 +1,5 @@
1
1
  import datetime
2
- from typing import Any, Dict, List, Type, TypeVar, Union
2
+ from typing import Any, Dict, List, Type, TypeVar, Union, cast
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
@@ -59,6 +59,8 @@ class DartboardUpdate:
59
59
  index (Union[Unset, None, int]):
60
60
  started_at (Union[Unset, None, datetime.datetime]):
61
61
  finished_at (Union[Unset, None, datetime.datetime]):
62
+ always_shown_property_duids (Union[Unset, List[str]]):
63
+ always_hidden_property_duids (Union[Unset, List[str]]):
62
64
  """
63
65
 
64
66
  duid: str
@@ -73,6 +75,8 @@ class DartboardUpdate:
73
75
  index: Union[Unset, None, int] = UNSET
74
76
  started_at: Union[Unset, None, datetime.datetime] = UNSET
75
77
  finished_at: Union[Unset, None, datetime.datetime] = UNSET
78
+ always_shown_property_duids: Union[Unset, List[str]] = UNSET
79
+ always_hidden_property_duids: Union[Unset, List[str]] = UNSET
76
80
  additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
77
81
 
78
82
  def to_dict(self) -> Dict[str, Any]:
@@ -103,6 +107,14 @@ class DartboardUpdate:
103
107
  if not isinstance(self.finished_at, Unset):
104
108
  finished_at = self.finished_at.isoformat() if self.finished_at else None
105
109
 
110
+ always_shown_property_duids: Union[Unset, List[str]] = UNSET
111
+ if not isinstance(self.always_shown_property_duids, Unset):
112
+ always_shown_property_duids = self.always_shown_property_duids
113
+
114
+ always_hidden_property_duids: Union[Unset, List[str]] = UNSET
115
+ if not isinstance(self.always_hidden_property_duids, Unset):
116
+ always_hidden_property_duids = self.always_hidden_property_duids
117
+
106
118
  field_dict: Dict[str, Any] = {}
107
119
  field_dict.update(self.additional_properties)
108
120
  field_dict.update(
@@ -132,6 +144,10 @@ class DartboardUpdate:
132
144
  field_dict["startedAt"] = started_at
133
145
  if finished_at is not UNSET:
134
146
  field_dict["finishedAt"] = finished_at
147
+ if always_shown_property_duids is not UNSET:
148
+ field_dict["alwaysShownPropertyDuids"] = always_shown_property_duids
149
+ if always_hidden_property_duids is not UNSET:
150
+ field_dict["alwaysHiddenPropertyDuids"] = always_hidden_property_duids
135
151
 
136
152
  return field_dict
137
153
 
@@ -191,6 +207,10 @@ class DartboardUpdate:
191
207
  else:
192
208
  finished_at = isoparse(_finished_at)
193
209
 
210
+ always_shown_property_duids = cast(List[str], d.pop("alwaysShownPropertyDuids", UNSET))
211
+
212
+ always_hidden_property_duids = cast(List[str], d.pop("alwaysHiddenPropertyDuids", UNSET))
213
+
194
214
  dartboard_update = cls(
195
215
  duid=duid,
196
216
  space_duid=space_duid,
@@ -204,6 +224,8 @@ class DartboardUpdate:
204
224
  index=index,
205
225
  started_at=started_at,
206
226
  finished_at=finished_at,
227
+ always_shown_property_duids=always_shown_property_duids,
228
+ always_hidden_property_duids=always_hidden_property_duids,
207
229
  )
208
230
 
209
231
  dartboard_update.additional_properties = d
@@ -17,8 +17,6 @@ class DocCreate:
17
17
  """
18
18
  Attributes:
19
19
  duid (str):
20
- folder_duid (str):
21
- order (str):
22
20
  source_user (Union[Unset, None, str]):
23
21
  source_type (Union[Unset, DocSourceType]): * `Unknown` - UNKNOWN
24
22
  * `Onboarding` - ONBOARDING
@@ -28,10 +26,13 @@ class DocCreate:
28
26
  * `Application` - APPLICATION Default: DocSourceType.UNKNOWN.
29
27
  drafter_duid (Union[Unset, None, str]):
30
28
  in_trash (Union[Unset, bool]):
29
+ folder_duid (Union[Unset, str]):
31
30
  report_kind (Union[Unset, None, ReportKind]): * `Standup` - STANDUP
32
31
  * `Changelog` - CHANGELOG
32
+ order (Union[Unset, str]):
33
33
  title (Union[Unset, str]):
34
34
  text (Union[Unset, Any]):
35
+ text_markdown (Union[Unset, str]):
35
36
  edited_by_ai (Union[Unset, bool]):
36
37
  recommendation_duid (Union[Unset, None, str]):
37
38
  editor_duids (Union[Unset, List[str]]):
@@ -67,15 +68,16 @@ class DocCreate:
67
68
  """
68
69
 
69
70
  duid: str
70
- folder_duid: str
71
- order: str
72
71
  source_user: Union[Unset, None, str] = UNSET
73
72
  source_type: Union[Unset, DocSourceType] = DocSourceType.UNKNOWN
74
73
  drafter_duid: Union[Unset, None, str] = UNSET
75
74
  in_trash: Union[Unset, bool] = UNSET
75
+ folder_duid: Union[Unset, str] = UNSET
76
76
  report_kind: Union[Unset, None, ReportKind] = UNSET
77
+ order: Union[Unset, str] = UNSET
77
78
  title: Union[Unset, str] = UNSET
78
79
  text: Union[Unset, Any] = UNSET
80
+ text_markdown: Union[Unset, str] = UNSET
79
81
  edited_by_ai: Union[Unset, bool] = UNSET
80
82
  recommendation_duid: Union[Unset, None, str] = UNSET
81
83
  editor_duids: Union[Unset, List[str]] = UNSET
@@ -87,8 +89,6 @@ class DocCreate:
87
89
 
88
90
  def to_dict(self) -> Dict[str, Any]:
89
91
  duid = self.duid
90
- folder_duid = self.folder_duid
91
- order = self.order
92
92
  source_user = self.source_user
93
93
  source_type: Union[Unset, str] = UNSET
94
94
  if not isinstance(self.source_type, Unset):
@@ -96,12 +96,15 @@ class DocCreate:
96
96
 
97
97
  drafter_duid = self.drafter_duid
98
98
  in_trash = self.in_trash
99
+ folder_duid = self.folder_duid
99
100
  report_kind: Union[Unset, None, str] = UNSET
100
101
  if not isinstance(self.report_kind, Unset):
101
102
  report_kind = self.report_kind.value if self.report_kind else None
102
103
 
104
+ order = self.order
103
105
  title = self.title
104
106
  text = self.text
107
+ text_markdown = self.text_markdown
105
108
  edited_by_ai = self.edited_by_ai
106
109
  recommendation_duid = self.recommendation_duid
107
110
  editor_duids: Union[Unset, List[str]] = UNSET
@@ -126,8 +129,6 @@ class DocCreate:
126
129
  field_dict.update(
127
130
  {
128
131
  "duid": duid,
129
- "folderDuid": folder_duid,
130
- "order": order,
131
132
  }
132
133
  )
133
134
  if source_user is not UNSET:
@@ -138,12 +139,18 @@ class DocCreate:
138
139
  field_dict["drafterDuid"] = drafter_duid
139
140
  if in_trash is not UNSET:
140
141
  field_dict["inTrash"] = in_trash
142
+ if folder_duid is not UNSET:
143
+ field_dict["folderDuid"] = folder_duid
141
144
  if report_kind is not UNSET:
142
145
  field_dict["reportKind"] = report_kind
146
+ if order is not UNSET:
147
+ field_dict["order"] = order
143
148
  if title is not UNSET:
144
149
  field_dict["title"] = title
145
150
  if text is not UNSET:
146
151
  field_dict["text"] = text
152
+ if text_markdown is not UNSET:
153
+ field_dict["textMarkdown"] = text_markdown
147
154
  if edited_by_ai is not UNSET:
148
155
  field_dict["editedByAi"] = edited_by_ai
149
156
  if recommendation_duid is not UNSET:
@@ -166,10 +173,6 @@ class DocCreate:
166
173
  d = src_dict.copy()
167
174
  duid = d.pop("duid")
168
175
 
169
- folder_duid = d.pop("folderDuid")
170
-
171
- order = d.pop("order")
172
-
173
176
  source_user = d.pop("sourceUser", UNSET)
174
177
 
175
178
  _source_type = d.pop("sourceType", UNSET)
@@ -183,6 +186,8 @@ class DocCreate:
183
186
 
184
187
  in_trash = d.pop("inTrash", UNSET)
185
188
 
189
+ folder_duid = d.pop("folderDuid", UNSET)
190
+
186
191
  _report_kind = d.pop("reportKind", UNSET)
187
192
  report_kind: Union[Unset, None, ReportKind]
188
193
  if _report_kind is None:
@@ -192,10 +197,14 @@ class DocCreate:
192
197
  else:
193
198
  report_kind = ReportKind(_report_kind)
194
199
 
200
+ order = d.pop("order", UNSET)
201
+
195
202
  title = d.pop("title", UNSET)
196
203
 
197
204
  text = d.pop("text", UNSET)
198
205
 
206
+ text_markdown = d.pop("textMarkdown", UNSET)
207
+
199
208
  edited_by_ai = d.pop("editedByAi", UNSET)
200
209
 
201
210
  recommendation_duid = d.pop("recommendationDuid", UNSET)
@@ -222,15 +231,16 @@ class DocCreate:
222
231
 
223
232
  doc_create = cls(
224
233
  duid=duid,
225
- folder_duid=folder_duid,
226
- order=order,
227
234
  source_user=source_user,
228
235
  source_type=source_type,
229
236
  drafter_duid=drafter_duid,
230
237
  in_trash=in_trash,
238
+ folder_duid=folder_duid,
231
239
  report_kind=report_kind,
240
+ order=order,
232
241
  title=title,
233
242
  text=text,
243
+ text_markdown=text_markdown,
234
244
  edited_by_ai=edited_by_ai,
235
245
  recommendation_duid=recommendation_duid,
236
246
  editor_duids=editor_duids,
@@ -32,6 +32,7 @@ class DocUpdate:
32
32
  order (Union[Unset, str]):
33
33
  title (Union[Unset, str]):
34
34
  text (Union[Unset, Any]):
35
+ text_markdown (Union[Unset, str]):
35
36
  edited_by_ai (Union[Unset, bool]):
36
37
  recommendation_duid (Union[Unset, None, str]):
37
38
  editor_duids (Union[Unset, List[str]]):
@@ -76,6 +77,7 @@ class DocUpdate:
76
77
  order: Union[Unset, str] = UNSET
77
78
  title: Union[Unset, str] = UNSET
78
79
  text: Union[Unset, Any] = UNSET
80
+ text_markdown: Union[Unset, str] = UNSET
79
81
  edited_by_ai: Union[Unset, bool] = UNSET
80
82
  recommendation_duid: Union[Unset, None, str] = UNSET
81
83
  editor_duids: Union[Unset, List[str]] = UNSET
@@ -102,6 +104,7 @@ class DocUpdate:
102
104
  order = self.order
103
105
  title = self.title
104
106
  text = self.text
107
+ text_markdown = self.text_markdown
105
108
  edited_by_ai = self.edited_by_ai
106
109
  recommendation_duid = self.recommendation_duid
107
110
  editor_duids: Union[Unset, List[str]] = UNSET
@@ -146,6 +149,8 @@ class DocUpdate:
146
149
  field_dict["title"] = title
147
150
  if text is not UNSET:
148
151
  field_dict["text"] = text
152
+ if text_markdown is not UNSET:
153
+ field_dict["textMarkdown"] = text_markdown
149
154
  if edited_by_ai is not UNSET:
150
155
  field_dict["editedByAi"] = edited_by_ai
151
156
  if recommendation_duid is not UNSET:
@@ -198,6 +203,8 @@ class DocUpdate:
198
203
 
199
204
  text = d.pop("text", UNSET)
200
205
 
206
+ text_markdown = d.pop("textMarkdown", UNSET)
207
+
201
208
  edited_by_ai = d.pop("editedByAi", UNSET)
202
209
 
203
210
  recommendation_duid = d.pop("recommendationDuid", UNSET)
@@ -233,6 +240,7 @@ class DocUpdate:
233
240
  order=order,
234
241
  title=title,
235
242
  text=text,
243
+ text_markdown=text_markdown,
236
244
  edited_by_ai=edited_by_ai,
237
245
  recommendation_duid=recommendation_duid,
238
246
  editor_duids=editor_duids,
@@ -102,13 +102,13 @@ class Event:
102
102
  message (Optional[str]):
103
103
  actor_duid (Optional[str]):
104
104
  actor_str (Optional[EventActor]): * `Dart AI` - DART_AI
105
- * `Dart due date bot` - DART_DUE_DATE_BOT
106
- * `Dart GitHub bot` - DART_GITHUB_BOT
107
- * `Dart metrics bot` - DART_METRICS_BOT
108
- * `Dart recurring task bot` - DART_RECURRING_TASK_BOT
109
- * `Dart reminder bot` - DART_REMINDER_BOT
110
- * `Dart report bot` - DART_REPORT_BOT
111
- * `Dart Slack bot` - DART_SLACK_BOT
105
+ * `Dart Due Date Bot` - DART_DUE_DATE_BOT
106
+ * `Dart GitHub Bot` - DART_GITHUB_BOT
107
+ * `Dart Metrics Bot` - DART_METRICS_BOT
108
+ * `Dart Recurring Task Bot` - DART_RECURRING_TASK_BOT
109
+ * `Dart Reminder Bot` - DART_REMINDER_BOT
110
+ * `Dart Report Bot` - DART_REPORT_BOT
111
+ * `Dart Slack Bot` - DART_SLACK_BOT
112
112
  * `A form user` - FORM_USER
113
113
  * `An email user` - EMAIL_USER
114
114
  * `Stripe webhook` - STRIPE_WEBHOOK
@@ -0,0 +1,18 @@
1
+ from enum import Enum
2
+
3
+
4
+ class EventActor(str, Enum):
5
+ AN_EMAIL_USER = "An email user"
6
+ A_FORM_USER = "A form user"
7
+ DART_AI = "Dart AI"
8
+ DART_DUE_DATE_BOT = "Dart Due Date Bot"
9
+ DART_GITHUB_BOT = "Dart GitHub Bot"
10
+ DART_METRICS_BOT = "Dart Metrics Bot"
11
+ DART_RECURRING_TASK_BOT = "Dart Recurring Task Bot"
12
+ DART_REMINDER_BOT = "Dart Reminder Bot"
13
+ DART_REPORT_BOT = "Dart Report Bot"
14
+ DART_SLACK_BOT = "Dart Slack Bot"
15
+ STRIPE_WEBHOOK = "Stripe webhook"
16
+
17
+ def __str__(self) -> str:
18
+ return str(self.value)