dart-tools 0.4.7__tar.gz → 0.4.8__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.
- {dart-tools-0.4.7/dart_tools.egg-info → dart-tools-0.4.8}/PKG-INFO +8 -8
- {dart-tools-0.4.7 → dart-tools-0.4.8}/README.md +7 -7
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/__init__.py +2 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/dart.py +46 -18
- dart-tools-0.4.8/dart/exception.py +6 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/__init__.py +24 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment.py +8 -0
- dart-tools-0.4.8/dart/generated/models/form.py +153 -0
- dart-tools-0.4.8/dart/generated/models/form_create.py +165 -0
- dart-tools-0.4.8/dart/generated/models/form_field.py +124 -0
- dart-tools-0.4.8/dart/generated/models/form_field_create.py +126 -0
- dart-tools-0.4.8/dart/generated/models/form_field_create_default.py +44 -0
- dart-tools-0.4.8/dart/generated/models/form_field_default.py +44 -0
- dart-tools-0.4.8/dart/generated/models/form_field_update.py +129 -0
- dart-tools-0.4.8/dart/generated/models/form_field_update_default.py +44 -0
- dart-tools-0.4.8/dart/generated/models/form_update.py +166 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout.py +18 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/models_response.py +44 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/operation.py +106 -40
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/operation_model_kind.py +2 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_.py +4 -1
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_create.py +4 -1
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_kind.py +3 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_update.py +4 -1
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/status_create.py +8 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/status_update.py +8 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task.py +27 -13
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_create.py +45 -9
- dart-tools-0.4.8/dart/generated/models/task_create_properties.py +44 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_source_type.py +2 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_update.py +45 -9
- dart-tools-0.4.8/dart/generated/models/task_update_properties.py +44 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/transaction.py +3 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/transaction_kind.py +3 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user.py +11 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_create.py +19 -0
- dart-tools-0.4.8/dart/generated/models/user_role.py +10 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_update.py +19 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/order_manager.py +2 -4
- dart-tools-0.4.8/dart/webhook.py +18 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8/dart_tools.egg-info}/PKG-INFO +8 -8
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/SOURCES.txt +14 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/pyproject.toml +1 -1
- {dart-tools-0.4.7 → dart-tools-0.4.8}/LICENSE +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/__init__.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/api/__init__.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/api/transactions/__init__.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/api/transactions/transactions_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/client.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/errors.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/batch.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/color_name.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_create_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_reaction.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_reaction_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_reaction_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/comment_update_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/cycle_mode.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/dartboard.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/dartboard_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/dartboard_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/dartboard_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/discord_integration.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_create_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_source_type.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/doc_update_text.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_create_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_subscription.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_subscription_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_subscription_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/event_update_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_applicability.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_assignee.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_connector.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_group.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_search.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/filter_set.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/folder.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/folder_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/folder_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/folder_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/github_integration.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/github_integration_tenant_extension_status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/google_data.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/icon_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_config.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_create_filter_group.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_create_kind_config_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_create_sorts.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_kind_config_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_update_filter_group.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_update_kind_config_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/layout_update_sorts.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/notion_integration.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/notion_integration_tenant_extension_status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/operation_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/option.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/option_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/option_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/priority.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_create_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/property_update_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/recommendation_status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_kind_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_kind_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_kind_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/relationship_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/request_body.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/response_body.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/slack_integration.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/slack_integration_tenant_extension_status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/sort.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/space.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/space_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/space_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/space_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/status_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/subscription.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/subtask_display_mode.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/summary_statistic_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_attachment.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_attachment_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_attachment_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_create_description.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_create_recurrence.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_description.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_doc_relationship.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_doc_relationship_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_doc_relationship_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_link.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_link_adtl.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_link_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_link_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_link_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_notion_document.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_notion_document_block_children_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_notion_document_block_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_notion_document_page_map.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_properties.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_recurrence.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_update_description.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/task_update_recurrence.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/tenant.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/tenant_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/tenant_entitlement_overrides.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/tenant_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/theme.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/transaction_response.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_dartboard_layout.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_dartboard_layout_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_dartboard_layout_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/user_status.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/validation_error_response.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/validation_error_response_items.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/view.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/view_create.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/view_kind.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/view_update.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/models/yc_integration.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart/generated/types.py +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/dependency_links.txt +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/dist/dart-tools-0.3.3.tar.gz +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/entry_points.txt +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/requires.txt +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/dart_tools.egg-info/top_level.txt +0 -0
- {dart-tools-0.4.7 → dart-tools-0.4.8}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dart-tools
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.8
|
|
4
4
|
Summary: The Dart CLI and Python Library
|
|
5
5
|
Author-email: Dart Software Team <software@itsdart.com>
|
|
6
6
|
License: MIT License
|
|
@@ -106,17 +106,17 @@ In Python, you can run something like
|
|
|
106
106
|
import os
|
|
107
107
|
from dart import is_logged_in, login, create_task, update_task
|
|
108
108
|
|
|
109
|
-
#
|
|
109
|
+
# Login based on information stored in environment variables, but only if needed
|
|
110
110
|
if not is_logged_in():
|
|
111
111
|
login(email=os.environ["DART_EMAIL"], password=os.environ["DART_PASSWORD"])
|
|
112
112
|
|
|
113
|
-
#
|
|
114
|
-
#
|
|
113
|
+
# Create a new task called 'Update the landing page'
|
|
114
|
+
# With priority 'Critical' (i.e. p0) and with the 'marketing' tag
|
|
115
115
|
new_task = create_task(
|
|
116
116
|
"Update the landing page", priority_int=0, tag_titles=["marketing"]
|
|
117
117
|
)
|
|
118
118
|
|
|
119
|
-
#
|
|
119
|
+
# Update the task to be 'Done'
|
|
120
120
|
update_task(new_task.duid, status_title="Done")
|
|
121
121
|
```
|
|
122
122
|
|
|
@@ -140,10 +140,10 @@ from dart import (
|
|
|
140
140
|
TransactionKind,
|
|
141
141
|
)
|
|
142
142
|
|
|
143
|
-
#
|
|
143
|
+
# Initialize the inner client
|
|
144
144
|
dart = Dart()
|
|
145
145
|
|
|
146
|
-
#
|
|
146
|
+
# Prepare the update operation
|
|
147
147
|
task_update = TaskUpdate(
|
|
148
148
|
duid="[DUID]",
|
|
149
149
|
size=5,
|
|
@@ -154,7 +154,7 @@ task_update_op = Operation(
|
|
|
154
154
|
data=task_update,
|
|
155
155
|
)
|
|
156
156
|
|
|
157
|
-
#
|
|
157
|
+
# Call the operation transactionally to preform the update
|
|
158
158
|
response = dart.transact([task_update_op], TransactionKind.TASK_UPDATE)
|
|
159
159
|
```
|
|
160
160
|
|
|
@@ -49,17 +49,17 @@ In Python, you can run something like
|
|
|
49
49
|
import os
|
|
50
50
|
from dart import is_logged_in, login, create_task, update_task
|
|
51
51
|
|
|
52
|
-
#
|
|
52
|
+
# Login based on information stored in environment variables, but only if needed
|
|
53
53
|
if not is_logged_in():
|
|
54
54
|
login(email=os.environ["DART_EMAIL"], password=os.environ["DART_PASSWORD"])
|
|
55
55
|
|
|
56
|
-
#
|
|
57
|
-
#
|
|
56
|
+
# Create a new task called 'Update the landing page'
|
|
57
|
+
# With priority 'Critical' (i.e. p0) and with the 'marketing' tag
|
|
58
58
|
new_task = create_task(
|
|
59
59
|
"Update the landing page", priority_int=0, tag_titles=["marketing"]
|
|
60
60
|
)
|
|
61
61
|
|
|
62
|
-
#
|
|
62
|
+
# Update the task to be 'Done'
|
|
63
63
|
update_task(new_task.duid, status_title="Done")
|
|
64
64
|
```
|
|
65
65
|
|
|
@@ -83,10 +83,10 @@ from dart import (
|
|
|
83
83
|
TransactionKind,
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
-
#
|
|
86
|
+
# Initialize the inner client
|
|
87
87
|
dart = Dart()
|
|
88
88
|
|
|
89
|
-
#
|
|
89
|
+
# Prepare the update operation
|
|
90
90
|
task_update = TaskUpdate(
|
|
91
91
|
duid="[DUID]",
|
|
92
92
|
size=5,
|
|
@@ -97,7 +97,7 @@ task_update_op = Operation(
|
|
|
97
97
|
data=task_update,
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
#
|
|
100
|
+
# Call the operation transactionally to preform the update
|
|
101
101
|
response = dart.transact([task_update_op], TransactionKind.TASK_UPDATE)
|
|
102
102
|
```
|
|
103
103
|
|
|
@@ -23,6 +23,7 @@ import dateparser
|
|
|
23
23
|
from pick import pick
|
|
24
24
|
import requests
|
|
25
25
|
|
|
26
|
+
from .exception import DartException
|
|
26
27
|
from .generated import Client
|
|
27
28
|
from .generated.models import (
|
|
28
29
|
DartboardKind,
|
|
@@ -32,6 +33,7 @@ from .generated.models import (
|
|
|
32
33
|
Priority,
|
|
33
34
|
PropertyKind,
|
|
34
35
|
RequestBody,
|
|
36
|
+
Space,
|
|
35
37
|
SpaceKind,
|
|
36
38
|
StatusKind,
|
|
37
39
|
Task,
|
|
@@ -62,6 +64,7 @@ _CSRF_URL_FRAG = _ROOT_API_URL_FRAG + "/csrf-token"
|
|
|
62
64
|
_LOGIN_URL_FRAG = _ROOT_API_URL_FRAG + "/login"
|
|
63
65
|
_CURRENT_USER_URL_FRAG = _ROOT_API_URL_FRAG + "/user-data?mode=auto"
|
|
64
66
|
_COPY_BRANCH_URL_FRAG = _ROOT_API_URL_FRAG + "/vcs/copy-branch-link"
|
|
67
|
+
_REPLICATE_SPACE_URL_FRAG_FMT = _ROOT_API_URL_FRAG + "/spaces/replicate/{duid}"
|
|
65
68
|
|
|
66
69
|
_CONFIG_FPATH = os.path.expanduser("~/.dart-tools")
|
|
67
70
|
_CSRF_TOKEN_COOKIE = "csrftoken"
|
|
@@ -96,6 +99,10 @@ def _run_cmd(cmd):
|
|
|
96
99
|
return subprocess.check_output(cmd, shell=True).decode()
|
|
97
100
|
|
|
98
101
|
|
|
102
|
+
def _get_space_url(host, duid):
|
|
103
|
+
return f"{host}/s/{duid}"
|
|
104
|
+
|
|
105
|
+
|
|
99
106
|
def _get_task_url(host, duid):
|
|
100
107
|
return f"{host}/t/{duid}"
|
|
101
108
|
|
|
@@ -111,8 +118,14 @@ def _suppress_exception(fn):
|
|
|
111
118
|
return wrapper
|
|
112
119
|
|
|
113
120
|
|
|
121
|
+
def _dart_exit(message):
|
|
122
|
+
if _is_cli:
|
|
123
|
+
sys.exit(message)
|
|
124
|
+
raise DartException(message)
|
|
125
|
+
|
|
126
|
+
|
|
114
127
|
def _exit_gracefully(_signal_received, _frame) -> None:
|
|
115
|
-
|
|
128
|
+
_dart_exit("Quitting.")
|
|
116
129
|
|
|
117
130
|
|
|
118
131
|
def _log(s):
|
|
@@ -343,13 +356,13 @@ class _Git:
|
|
|
343
356
|
def ensure_in_repo():
|
|
344
357
|
if _Git._cmd_succeeds("git rev-parse --is-inside-work-tree"):
|
|
345
358
|
return
|
|
346
|
-
|
|
359
|
+
_dart_exit("You are not in a git repo.")
|
|
347
360
|
|
|
348
361
|
@staticmethod
|
|
349
362
|
def ensure_no_unstaged_changes():
|
|
350
363
|
if _run_cmd("git status --porcelain") == "":
|
|
351
364
|
return
|
|
352
|
-
|
|
365
|
+
_dart_exit("You have uncommitted changes. Please commit or stash them.")
|
|
353
366
|
|
|
354
367
|
@staticmethod
|
|
355
368
|
def ensure_on_main_or_intended():
|
|
@@ -396,11 +409,11 @@ def set_host(host):
|
|
|
396
409
|
|
|
397
410
|
|
|
398
411
|
def _auth_failure_exit():
|
|
399
|
-
|
|
412
|
+
_dart_exit(f"Not logged in, run\n\n{_PROG} {_LOGIN_CMD}\n\nto log in.")
|
|
400
413
|
|
|
401
414
|
|
|
402
415
|
def _unknown_failure_exit() -> NoReturn:
|
|
403
|
-
|
|
416
|
+
_dart_exit(f"Not logged in, run\n\n{_PROG} {_LOGIN_CMD}\n\nto log in.")
|
|
404
417
|
|
|
405
418
|
|
|
406
419
|
def _check_request_response_and_maybe_exit(response):
|
|
@@ -475,7 +488,7 @@ def login(*, email=None, password=None):
|
|
|
475
488
|
|
|
476
489
|
result = session.post(_LOGIN_URL_FRAG, json={"email": email, "password": password})
|
|
477
490
|
if result.status_code in {401, 403}:
|
|
478
|
-
|
|
491
|
+
_dart_exit("Invalid login information.")
|
|
479
492
|
_check_request_response_and_maybe_exit(result)
|
|
480
493
|
|
|
481
494
|
cookies = result.cookies.get_dict()
|
|
@@ -538,7 +551,7 @@ def begin_task():
|
|
|
538
551
|
filtered_tasks.sort(key=lambda e: e["order"])
|
|
539
552
|
|
|
540
553
|
if len(filtered_tasks) == 0:
|
|
541
|
-
|
|
554
|
+
_dart_exit("No active, incomplete tasks found.")
|
|
542
555
|
|
|
543
556
|
picked_idx = pick(
|
|
544
557
|
[e["title"] for e in filtered_tasks],
|
|
@@ -587,7 +600,7 @@ def create_task(
|
|
|
587
600
|
None,
|
|
588
601
|
)
|
|
589
602
|
if dartboard is None:
|
|
590
|
-
|
|
603
|
+
_dart_exit(f"No dartboard found with title '{dartboard_title}'.")
|
|
591
604
|
else:
|
|
592
605
|
dartboard = next(e for e in dartboards if e["kind"] == DartboardKind.ACTIVE)
|
|
593
606
|
dartboard_duid = dartboard["duid"]
|
|
@@ -605,7 +618,7 @@ def create_task(
|
|
|
605
618
|
(e for e in statuses if e["title"].lower() == status_title_norm), None
|
|
606
619
|
)
|
|
607
620
|
if status is None:
|
|
608
|
-
|
|
621
|
+
_dart_exit(f"No status found with title '{status_title}'.")
|
|
609
622
|
else:
|
|
610
623
|
status = next(
|
|
611
624
|
e for e in statuses if e["kind"] == StatusKind.UNSTARTED and e["locked"]
|
|
@@ -620,7 +633,7 @@ def create_task(
|
|
|
620
633
|
for assignee_email in assignee_emails:
|
|
621
634
|
assignee_email_norm = assignee_email.strip().lower()
|
|
622
635
|
if assignee_email_norm not in user_emails_to_duids:
|
|
623
|
-
|
|
636
|
+
_dart_exit(f"No user found with email '{assignee_email}'.")
|
|
624
637
|
assignee_duids.append(user_emails_to_duids[assignee_email_norm])
|
|
625
638
|
subscriber_duids.append(user_emails_to_duids[assignee_email_norm])
|
|
626
639
|
else:
|
|
@@ -636,7 +649,7 @@ def create_task(
|
|
|
636
649
|
for tag_title in tag_titles:
|
|
637
650
|
tag_title_norm = tag_title.strip().lower()
|
|
638
651
|
if tag_title_norm not in tag_titles_to_duids:
|
|
639
|
-
|
|
652
|
+
_dart_exit(f"No tag found with title '{tag_title}'.")
|
|
640
653
|
tag_duids.append(tag_titles_to_duids[tag_title_norm])
|
|
641
654
|
|
|
642
655
|
priority = None
|
|
@@ -649,7 +662,7 @@ def create_task(
|
|
|
649
662
|
if due_at_str is not None:
|
|
650
663
|
due_at = dateparser.parse(due_at_str)
|
|
651
664
|
if due_at is None:
|
|
652
|
-
|
|
665
|
+
_dart_exit(f"Could not parse due date '{due_at_str}'.")
|
|
653
666
|
due_at = due_at.replace(
|
|
654
667
|
hour=9, minute=0, second=0, microsecond=0, tzinfo=timezone.utc
|
|
655
668
|
)
|
|
@@ -712,7 +725,7 @@ def update_task(
|
|
|
712
725
|
tasks = user_bundle.tasks
|
|
713
726
|
old_task = next((e for e in tasks if e["duid"] == duid), None)
|
|
714
727
|
if old_task is None:
|
|
715
|
-
|
|
728
|
+
_dart_exit(f"No task found with DUID '{duid}'.")
|
|
716
729
|
|
|
717
730
|
task_update_kwargs = {"duid": duid}
|
|
718
731
|
|
|
@@ -731,7 +744,7 @@ def update_task(
|
|
|
731
744
|
None,
|
|
732
745
|
)
|
|
733
746
|
if dartboard is None:
|
|
734
|
-
|
|
747
|
+
_dart_exit(f"No dartboard found with title '{dartboard_title}'.")
|
|
735
748
|
dartboard_duid = dartboard["duid"]
|
|
736
749
|
if dartboard_duid != old_task["dartboardDuid"]:
|
|
737
750
|
task_update_kwargs["dartboard_duid"] = dartboard_duid
|
|
@@ -743,7 +756,7 @@ def update_task(
|
|
|
743
756
|
(e for e in statuses if e["title"].lower() == status_title_norm), None
|
|
744
757
|
)
|
|
745
758
|
if status is None:
|
|
746
|
-
|
|
759
|
+
_dart_exit(f"No status found with title '{status_title}'.")
|
|
747
760
|
status_duid = status["duid"]
|
|
748
761
|
if status_duid != old_task["statusDuid"]:
|
|
749
762
|
task_update_kwargs["status_duid"] = status_duid
|
|
@@ -756,7 +769,7 @@ def update_task(
|
|
|
756
769
|
for assignee_email in assignee_emails:
|
|
757
770
|
assignee_email_norm = assignee_email.strip().lower()
|
|
758
771
|
if assignee_email_norm not in user_emails_to_duids:
|
|
759
|
-
|
|
772
|
+
_dart_exit(f"No user found with email '{assignee_email}'.")
|
|
760
773
|
assignee_duids.append(user_emails_to_duids[assignee_email_norm])
|
|
761
774
|
subscriber_duids.append(user_emails_to_duids[assignee_email_norm])
|
|
762
775
|
assignee_duids = sorted(set(assignee_duids))
|
|
@@ -777,7 +790,7 @@ def update_task(
|
|
|
777
790
|
for tag_title in tag_titles:
|
|
778
791
|
tag_title_norm = tag_title.strip().lower()
|
|
779
792
|
if tag_title_norm not in tag_titles_to_duids:
|
|
780
|
-
|
|
793
|
+
_dart_exit(f"No tag found with title '{tag_title}'.")
|
|
781
794
|
tag_duids.append(tag_titles_to_duids[tag_title_norm])
|
|
782
795
|
task_update_kwargs["tag_duids"] = tag_duids
|
|
783
796
|
|
|
@@ -795,7 +808,7 @@ def update_task(
|
|
|
795
808
|
if due_at_str is not None:
|
|
796
809
|
due_at = dateparser.parse(due_at_str)
|
|
797
810
|
if due_at is None:
|
|
798
|
-
|
|
811
|
+
_dart_exit(f"Could not parse due date '{due_at_str}'.")
|
|
799
812
|
due_at = due_at.replace(
|
|
800
813
|
hour=9, minute=0, second=0, microsecond=0, tzinfo=timezone.utc
|
|
801
814
|
)
|
|
@@ -819,6 +832,21 @@ def update_task(
|
|
|
819
832
|
return task
|
|
820
833
|
|
|
821
834
|
|
|
835
|
+
def replicate_space(duid):
|
|
836
|
+
config = _Config()
|
|
837
|
+
session = _Session(config)
|
|
838
|
+
|
|
839
|
+
response = session.post(_REPLICATE_SPACE_URL_FRAG_FMT.format(duid=duid))
|
|
840
|
+
print()
|
|
841
|
+
_check_request_response_and_maybe_exit(response)
|
|
842
|
+
|
|
843
|
+
space = Space.from_dict(response.json()["item"])
|
|
844
|
+
|
|
845
|
+
_log(f"Replicated space {space.title} at {_get_space_url(config.host, space.duid)}")
|
|
846
|
+
_log("Done.")
|
|
847
|
+
return space
|
|
848
|
+
|
|
849
|
+
|
|
822
850
|
def _add_standard_task_arguments(parser):
|
|
823
851
|
parser.add_argument(
|
|
824
852
|
"-d", "--dartboard", dest="dartboard_title", help="dartboard title"
|
|
@@ -44,6 +44,15 @@ from .folder import Folder
|
|
|
44
44
|
from .folder_create import FolderCreate
|
|
45
45
|
from .folder_kind import FolderKind
|
|
46
46
|
from .folder_update import FolderUpdate
|
|
47
|
+
from .form import Form
|
|
48
|
+
from .form_create import FormCreate
|
|
49
|
+
from .form_field import FormField
|
|
50
|
+
from .form_field_create import FormFieldCreate
|
|
51
|
+
from .form_field_create_default import FormFieldCreateDefault
|
|
52
|
+
from .form_field_default import FormFieldDefault
|
|
53
|
+
from .form_field_update import FormFieldUpdate
|
|
54
|
+
from .form_field_update_default import FormFieldUpdateDefault
|
|
55
|
+
from .form_update import FormUpdate
|
|
47
56
|
from .github_integration import GithubIntegration
|
|
48
57
|
from .github_integration_tenant_extension_status import GithubIntegrationTenantExtensionStatus
|
|
49
58
|
from .google_data import GoogleData
|
|
@@ -107,6 +116,7 @@ from .task_attachment_create import TaskAttachmentCreate
|
|
|
107
116
|
from .task_attachment_update import TaskAttachmentUpdate
|
|
108
117
|
from .task_create import TaskCreate
|
|
109
118
|
from .task_create_description import TaskCreateDescription
|
|
119
|
+
from .task_create_properties import TaskCreateProperties
|
|
110
120
|
from .task_create_recurrence import TaskCreateRecurrence
|
|
111
121
|
from .task_description import TaskDescription
|
|
112
122
|
from .task_doc_relationship import TaskDocRelationship
|
|
@@ -126,6 +136,7 @@ from .task_recurrence import TaskRecurrence
|
|
|
126
136
|
from .task_source_type import TaskSourceType
|
|
127
137
|
from .task_update import TaskUpdate
|
|
128
138
|
from .task_update_description import TaskUpdateDescription
|
|
139
|
+
from .task_update_properties import TaskUpdateProperties
|
|
129
140
|
from .task_update_recurrence import TaskUpdateRecurrence
|
|
130
141
|
from .tenant import Tenant
|
|
131
142
|
from .tenant_create import TenantCreate
|
|
@@ -140,6 +151,7 @@ from .user_create import UserCreate
|
|
|
140
151
|
from .user_dartboard_layout import UserDartboardLayout
|
|
141
152
|
from .user_dartboard_layout_create import UserDartboardLayoutCreate
|
|
142
153
|
from .user_dartboard_layout_update import UserDartboardLayoutUpdate
|
|
154
|
+
from .user_role import UserRole
|
|
143
155
|
from .user_status import UserStatus
|
|
144
156
|
from .user_update import UserUpdate
|
|
145
157
|
from .validation_error_response import ValidationErrorResponse
|
|
@@ -195,6 +207,15 @@ __all__ = (
|
|
|
195
207
|
"FolderCreate",
|
|
196
208
|
"FolderKind",
|
|
197
209
|
"FolderUpdate",
|
|
210
|
+
"Form",
|
|
211
|
+
"FormCreate",
|
|
212
|
+
"FormField",
|
|
213
|
+
"FormFieldCreate",
|
|
214
|
+
"FormFieldCreateDefault",
|
|
215
|
+
"FormFieldDefault",
|
|
216
|
+
"FormFieldUpdate",
|
|
217
|
+
"FormFieldUpdateDefault",
|
|
218
|
+
"FormUpdate",
|
|
198
219
|
"GithubIntegration",
|
|
199
220
|
"GithubIntegrationTenantExtensionStatus",
|
|
200
221
|
"GoogleData",
|
|
@@ -258,6 +279,7 @@ __all__ = (
|
|
|
258
279
|
"TaskAttachmentUpdate",
|
|
259
280
|
"TaskCreate",
|
|
260
281
|
"TaskCreateDescription",
|
|
282
|
+
"TaskCreateProperties",
|
|
261
283
|
"TaskCreateRecurrence",
|
|
262
284
|
"TaskDescription",
|
|
263
285
|
"TaskDocRelationship",
|
|
@@ -277,6 +299,7 @@ __all__ = (
|
|
|
277
299
|
"TaskSourceType",
|
|
278
300
|
"TaskUpdate",
|
|
279
301
|
"TaskUpdateDescription",
|
|
302
|
+
"TaskUpdateProperties",
|
|
280
303
|
"TaskUpdateRecurrence",
|
|
281
304
|
"Tenant",
|
|
282
305
|
"TenantCreate",
|
|
@@ -291,6 +314,7 @@ __all__ = (
|
|
|
291
314
|
"UserDartboardLayout",
|
|
292
315
|
"UserDartboardLayoutCreate",
|
|
293
316
|
"UserDartboardLayoutUpdate",
|
|
317
|
+
"UserRole",
|
|
294
318
|
"UserStatus",
|
|
295
319
|
"UserUpdate",
|
|
296
320
|
"ValidationErrorResponse",
|
|
@@ -20,6 +20,7 @@ class Comment:
|
|
|
20
20
|
"""
|
|
21
21
|
Attributes:
|
|
22
22
|
duid (str):
|
|
23
|
+
created_at (datetime.datetime):
|
|
23
24
|
updated_at (datetime.datetime):
|
|
24
25
|
task_duid (str):
|
|
25
26
|
authored_by_ai (bool):
|
|
@@ -34,6 +35,7 @@ class Comment:
|
|
|
34
35
|
"""
|
|
35
36
|
|
|
36
37
|
duid: str
|
|
38
|
+
created_at: datetime.datetime
|
|
37
39
|
updated_at: datetime.datetime
|
|
38
40
|
task_duid: str
|
|
39
41
|
authored_by_ai: bool
|
|
@@ -49,6 +51,8 @@ class Comment:
|
|
|
49
51
|
|
|
50
52
|
def to_dict(self) -> Dict[str, Any]:
|
|
51
53
|
duid = self.duid
|
|
54
|
+
created_at = self.created_at.isoformat()
|
|
55
|
+
|
|
52
56
|
updated_at = self.updated_at.isoformat()
|
|
53
57
|
|
|
54
58
|
task_duid = self.task_duid
|
|
@@ -73,6 +77,7 @@ class Comment:
|
|
|
73
77
|
field_dict.update(
|
|
74
78
|
{
|
|
75
79
|
"duid": duid,
|
|
80
|
+
"createdAt": created_at,
|
|
76
81
|
"updatedAt": updated_at,
|
|
77
82
|
"taskDuid": task_duid,
|
|
78
83
|
"authoredByAi": authored_by_ai,
|
|
@@ -98,6 +103,8 @@ class Comment:
|
|
|
98
103
|
d = src_dict.copy()
|
|
99
104
|
duid = d.pop("duid")
|
|
100
105
|
|
|
106
|
+
created_at = isoparse(d.pop("createdAt"))
|
|
107
|
+
|
|
101
108
|
updated_at = isoparse(d.pop("updatedAt"))
|
|
102
109
|
|
|
103
110
|
task_duid = d.pop("taskDuid")
|
|
@@ -132,6 +139,7 @@ class Comment:
|
|
|
132
139
|
|
|
133
140
|
comment = cls(
|
|
134
141
|
duid=duid,
|
|
142
|
+
created_at=created_at,
|
|
135
143
|
updated_at=updated_at,
|
|
136
144
|
task_duid=task_duid,
|
|
137
145
|
authored_by_ai=authored_by_ai,
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar, Union
|
|
2
|
+
|
|
3
|
+
from attrs import define as _attrs_define
|
|
4
|
+
from attrs import field as _attrs_field
|
|
5
|
+
|
|
6
|
+
from ..models.color_name import ColorName
|
|
7
|
+
from ..models.icon_kind import IconKind
|
|
8
|
+
from ..types import UNSET, Unset
|
|
9
|
+
|
|
10
|
+
T = TypeVar("T", bound="Form")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@_attrs_define
|
|
14
|
+
class Form:
|
|
15
|
+
"""
|
|
16
|
+
Attributes:
|
|
17
|
+
duid (str):
|
|
18
|
+
hidden (bool):
|
|
19
|
+
public (bool):
|
|
20
|
+
order (str):
|
|
21
|
+
title (str):
|
|
22
|
+
description (str):
|
|
23
|
+
icon_kind (IconKind): * `None` - NONE
|
|
24
|
+
* `Icon` - ICON
|
|
25
|
+
* `Emoji` - EMOJI
|
|
26
|
+
icon_name_or_emoji (str):
|
|
27
|
+
color_name (ColorName): * `Red` - RED
|
|
28
|
+
* `Dark Blue` - DARK_BLUE
|
|
29
|
+
* `Dark Orange` - DARK_ORANGE
|
|
30
|
+
* `Dark Green` - DARK_GREEN
|
|
31
|
+
* `Purple` - PURPLE
|
|
32
|
+
* `Dark Teal` - DARK_TEAL
|
|
33
|
+
* `Pink` - PINK
|
|
34
|
+
* `Orange` - ORANGE
|
|
35
|
+
* `Green` - GREEN
|
|
36
|
+
* `Yellow` - YELLOW
|
|
37
|
+
* `Brown` - BROWN
|
|
38
|
+
* `Dark Red` - DARK_RED
|
|
39
|
+
* `Flat Green` - FLAT_GREEN
|
|
40
|
+
* `Red Orange` - RED_ORANGE
|
|
41
|
+
* `Teal` - TEAL
|
|
42
|
+
* `Light Green` - LIGHT_GREEN
|
|
43
|
+
* `Light Blue` - LIGHT_BLUE
|
|
44
|
+
* `Light Purple` - LIGHT_PURPLE
|
|
45
|
+
* `Light Orange` - LIGHT_ORANGE
|
|
46
|
+
* `Light Pink` - LIGHT_PINK
|
|
47
|
+
* `Tan` - TAN
|
|
48
|
+
* `Dark Gray` - DARK_GRAY
|
|
49
|
+
* `Light Brown` - LIGHT_BROWN
|
|
50
|
+
* `Light Gray` - LIGHT_GRAY
|
|
51
|
+
updated_by_client_duid (Union[Unset, None, str]):
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
duid: str
|
|
55
|
+
hidden: bool
|
|
56
|
+
public: bool
|
|
57
|
+
order: str
|
|
58
|
+
title: str
|
|
59
|
+
description: str
|
|
60
|
+
icon_kind: IconKind
|
|
61
|
+
icon_name_or_emoji: str
|
|
62
|
+
color_name: ColorName
|
|
63
|
+
updated_by_client_duid: Union[Unset, None, str] = UNSET
|
|
64
|
+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
65
|
+
|
|
66
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
67
|
+
duid = self.duid
|
|
68
|
+
hidden = self.hidden
|
|
69
|
+
public = self.public
|
|
70
|
+
order = self.order
|
|
71
|
+
title = self.title
|
|
72
|
+
description = self.description
|
|
73
|
+
icon_kind = self.icon_kind.value
|
|
74
|
+
|
|
75
|
+
icon_name_or_emoji = self.icon_name_or_emoji
|
|
76
|
+
color_name = self.color_name.value
|
|
77
|
+
|
|
78
|
+
updated_by_client_duid = self.updated_by_client_duid
|
|
79
|
+
|
|
80
|
+
field_dict: Dict[str, Any] = {}
|
|
81
|
+
field_dict.update(self.additional_properties)
|
|
82
|
+
field_dict.update(
|
|
83
|
+
{
|
|
84
|
+
"duid": duid,
|
|
85
|
+
"hidden": hidden,
|
|
86
|
+
"public": public,
|
|
87
|
+
"order": order,
|
|
88
|
+
"title": title,
|
|
89
|
+
"description": description,
|
|
90
|
+
"iconKind": icon_kind,
|
|
91
|
+
"iconNameOrEmoji": icon_name_or_emoji,
|
|
92
|
+
"colorName": color_name,
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
if updated_by_client_duid is not UNSET:
|
|
96
|
+
field_dict["updatedByClientDuid"] = updated_by_client_duid
|
|
97
|
+
|
|
98
|
+
return field_dict
|
|
99
|
+
|
|
100
|
+
@classmethod
|
|
101
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
102
|
+
d = src_dict.copy()
|
|
103
|
+
duid = d.pop("duid")
|
|
104
|
+
|
|
105
|
+
hidden = d.pop("hidden")
|
|
106
|
+
|
|
107
|
+
public = d.pop("public")
|
|
108
|
+
|
|
109
|
+
order = d.pop("order")
|
|
110
|
+
|
|
111
|
+
title = d.pop("title")
|
|
112
|
+
|
|
113
|
+
description = d.pop("description")
|
|
114
|
+
|
|
115
|
+
icon_kind = IconKind(d.pop("iconKind"))
|
|
116
|
+
|
|
117
|
+
icon_name_or_emoji = d.pop("iconNameOrEmoji")
|
|
118
|
+
|
|
119
|
+
color_name = ColorName(d.pop("colorName"))
|
|
120
|
+
|
|
121
|
+
updated_by_client_duid = d.pop("updatedByClientDuid", UNSET)
|
|
122
|
+
|
|
123
|
+
form = cls(
|
|
124
|
+
duid=duid,
|
|
125
|
+
hidden=hidden,
|
|
126
|
+
public=public,
|
|
127
|
+
order=order,
|
|
128
|
+
title=title,
|
|
129
|
+
description=description,
|
|
130
|
+
icon_kind=icon_kind,
|
|
131
|
+
icon_name_or_emoji=icon_name_or_emoji,
|
|
132
|
+
color_name=color_name,
|
|
133
|
+
updated_by_client_duid=updated_by_client_duid,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
form.additional_properties = d
|
|
137
|
+
return form
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def additional_keys(self) -> List[str]:
|
|
141
|
+
return list(self.additional_properties.keys())
|
|
142
|
+
|
|
143
|
+
def __getitem__(self, key: str) -> Any:
|
|
144
|
+
return self.additional_properties[key]
|
|
145
|
+
|
|
146
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
147
|
+
self.additional_properties[key] = value
|
|
148
|
+
|
|
149
|
+
def __delitem__(self, key: str) -> None:
|
|
150
|
+
del self.additional_properties[key]
|
|
151
|
+
|
|
152
|
+
def __contains__(self, key: str) -> bool:
|
|
153
|
+
return key in self.additional_properties
|