ayon-python-api 1.1.3__tar.gz → 1.1.4__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.
Files changed (27) hide show
  1. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/PKG-INFO +1 -1
  2. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/__init__.py +36 -0
  3. ayon-python-api-1.1.4/ayon_api/_actions.py +300 -0
  4. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/_api.py +597 -5
  5. ayon-python-api-1.1.4/ayon_api/_base.py +46 -0
  6. ayon-python-api-1.1.4/ayon_api/_lists.py +414 -0
  7. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/constants.py +52 -3
  8. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/graphql_queries.py +34 -26
  9. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/operations.py +1 -1
  10. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/server_api.py +253 -123
  11. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/typing.py +139 -0
  12. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/version.py +1 -1
  13. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_python_api.egg-info/PKG-INFO +1 -1
  14. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_python_api.egg-info/SOURCES.txt +3 -0
  15. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/pyproject.toml +2 -2
  16. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/setup.py +1 -1
  17. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/LICENSE +0 -0
  18. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/README.md +0 -0
  19. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/entity_hub.py +0 -0
  20. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/events.py +0 -0
  21. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/exceptions.py +0 -0
  22. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/graphql.py +0 -0
  23. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_api/utils.py +0 -0
  24. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_python_api.egg-info/dependency_links.txt +0 -0
  25. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_python_api.egg-info/requires.txt +0 -0
  26. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/ayon_python_api.egg-info/top_level.txt +0 -0
  27. {ayon-python-api-1.1.3 → ayon-python-api-1.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ayon-python-api
3
- Version: 1.1.3
3
+ Version: 1.1.4
4
4
  Summary: AYON Python API
5
5
  Home-page: https://github.com/ynput/ayon-python-api
6
6
  Author: ynput.io
@@ -243,6 +243,24 @@ from ._api import (
243
243
  get_representation_links,
244
244
  send_batch_operations,
245
245
  send_activities_batch_operations,
246
+ get_actions,
247
+ trigger_action,
248
+ get_action_config,
249
+ set_action_config,
250
+ take_action,
251
+ abort_action,
252
+ get_entity_lists,
253
+ get_entity_list_rest,
254
+ get_entity_list_by_id,
255
+ create_entity_list,
256
+ update_entity_list,
257
+ delete_entity_list,
258
+ get_entity_list_attribute_definitions,
259
+ set_entity_list_attribute_definitions,
260
+ create_entity_list_item,
261
+ update_entity_list_items,
262
+ update_entity_list_item,
263
+ delete_entity_list_item,
246
264
  )
247
265
 
248
266
 
@@ -489,4 +507,22 @@ __all__ = (
489
507
  "get_representation_links",
490
508
  "send_batch_operations",
491
509
  "send_activities_batch_operations",
510
+ "get_actions",
511
+ "trigger_action",
512
+ "get_action_config",
513
+ "set_action_config",
514
+ "take_action",
515
+ "abort_action",
516
+ "get_entity_lists",
517
+ "get_entity_list_rest",
518
+ "get_entity_list_by_id",
519
+ "create_entity_list",
520
+ "update_entity_list",
521
+ "delete_entity_list",
522
+ "get_entity_list_attribute_definitions",
523
+ "set_entity_list_attribute_definitions",
524
+ "create_entity_list_item",
525
+ "update_entity_list_items",
526
+ "update_entity_list_item",
527
+ "delete_entity_list_item",
492
528
  )
@@ -0,0 +1,300 @@
1
+ import typing
2
+ from typing import Optional, Dict, List, Any
3
+
4
+ from .utils import prepare_query_string
5
+ from ._base import _BaseServerAPI
6
+
7
+ if typing.TYPE_CHECKING:
8
+ from .typing import (
9
+ ActionEntityTypes,
10
+ ActionManifestDict,
11
+ ActionTriggerResponse,
12
+ ActionTakeResponse,
13
+ ActionConfigResponse,
14
+ ActionModeType,
15
+ )
16
+
17
+
18
+ class _ActionsAPI(_BaseServerAPI):
19
+ """Implementation of actions API for ServerAPI."""
20
+ def get_actions(
21
+ self,
22
+ project_name: Optional[str] = None,
23
+ entity_type: Optional["ActionEntityTypes"] = None,
24
+ entity_ids: Optional[List[str]] = None,
25
+ entity_subtypes: Optional[List[str]] = None,
26
+ form_data: Optional[Dict[str, Any]] = None,
27
+ *,
28
+ variant: Optional[str] = None,
29
+ mode: Optional["ActionModeType"] = None,
30
+ ) -> List["ActionManifestDict"]:
31
+ """Get actions for a context.
32
+
33
+ Args:
34
+ project_name (Optional[str]): Name of the project. None for global
35
+ actions.
36
+ entity_type (Optional[ActionEntityTypes]): Entity type where the
37
+ action is triggered. None for global actions.
38
+ entity_ids (Optional[List[str]]): List of entity ids where the
39
+ action is triggered. None for global actions.
40
+ entity_subtypes (Optional[List[str]]): List of entity subtypes
41
+ folder types for folder ids, task types for tasks ids.
42
+ form_data (Optional[Dict[str, Any]]): Form data of the action.
43
+ variant (Optional[str]): Settings variant.
44
+ mode (Optional[ActionModeType]): Action modes.
45
+
46
+ Returns:
47
+ List[ActionManifestDict]: List of action manifests.
48
+
49
+ """
50
+ if variant is None:
51
+ variant = self.get_default_settings_variant()
52
+ query_data = {"variant": variant}
53
+ if mode:
54
+ query_data["mode"] = mode
55
+ query = prepare_query_string(query_data)
56
+ kwargs = {
57
+ key: value
58
+ for key, value in (
59
+ ("projectName", project_name),
60
+ ("entityType", entity_type),
61
+ ("entityIds", entity_ids),
62
+ ("entitySubtypes", entity_subtypes),
63
+ ("formData", form_data),
64
+ )
65
+ if value is not None
66
+ }
67
+ response = self.post(f"actions/list{query}", **kwargs)
68
+ response.raise_for_status()
69
+ return response.data["actions"]
70
+
71
+ def trigger_action(
72
+ self,
73
+ identifier: str,
74
+ addon_name: str,
75
+ addon_version: str,
76
+ project_name: Optional[str] = None,
77
+ entity_type: Optional["ActionEntityTypes"] = None,
78
+ entity_ids: Optional[List[str]] = None,
79
+ entity_subtypes: Optional[List[str]] = None,
80
+ form_data: Optional[Dict[str, Any]] = None,
81
+ *,
82
+ variant: Optional[str] = None,
83
+ ) -> "ActionTriggerResponse":
84
+ """Trigger action.
85
+
86
+ Args:
87
+ identifier (str): Identifier of the action.
88
+ addon_name (str): Name of the addon.
89
+ addon_version (str): Version of the addon.
90
+ project_name (Optional[str]): Name of the project. None for global
91
+ actions.
92
+ entity_type (Optional[ActionEntityTypes]): Entity type where the
93
+ action is triggered. None for global actions.
94
+ entity_ids (Optional[List[str]]): List of entity ids where the
95
+ action is triggered. None for global actions.
96
+ entity_subtypes (Optional[List[str]]): List of entity subtypes
97
+ folder types for folder ids, task types for tasks ids.
98
+ form_data (Optional[Dict[str, Any]]): Form data of the action.
99
+ variant (Optional[str]): Settings variant.
100
+
101
+ """
102
+ if variant is None:
103
+ variant = self.get_default_settings_variant()
104
+ query_data = {
105
+ "addonName": addon_name,
106
+ "addonVersion": addon_version,
107
+ "identifier": identifier,
108
+ "variant": variant,
109
+ }
110
+ query = prepare_query_string(query_data)
111
+
112
+ kwargs = {
113
+ key: value
114
+ for key, value in (
115
+ ("projectName", project_name),
116
+ ("entityType", entity_type),
117
+ ("entityIds", entity_ids),
118
+ ("entitySubtypes", entity_subtypes),
119
+ ("formData", form_data),
120
+ )
121
+ if value is not None
122
+ }
123
+
124
+ response = self.post(f"actions/execute{query}", **kwargs)
125
+ response.raise_for_status()
126
+ return response.data
127
+
128
+ def get_action_config(
129
+ self,
130
+ identifier: str,
131
+ addon_name: str,
132
+ addon_version: str,
133
+ project_name: Optional[str] = None,
134
+ entity_type: Optional["ActionEntityTypes"] = None,
135
+ entity_ids: Optional[List[str]] = None,
136
+ entity_subtypes: Optional[List[str]] = None,
137
+ form_data: Optional[Dict[str, Any]] = None,
138
+ *,
139
+ variant: Optional[str] = None,
140
+ ) -> "ActionConfigResponse":
141
+ """Get action configuration.
142
+
143
+ Args:
144
+ identifier (str): Identifier of the action.
145
+ addon_name (str): Name of the addon.
146
+ addon_version (str): Version of the addon.
147
+ project_name (Optional[str]): Name of the project. None for global
148
+ actions.
149
+ entity_type (Optional[ActionEntityTypes]): Entity type where the
150
+ action is triggered. None for global actions.
151
+ entity_ids (Optional[List[str]]): List of entity ids where the
152
+ action is triggered. None for global actions.
153
+ entity_subtypes (Optional[List[str]]): List of entity subtypes
154
+ folder types for folder ids, task types for tasks ids.
155
+ form_data (Optional[Dict[str, Any]]): Form data of the action.
156
+ variant (Optional[str]): Settings variant.
157
+
158
+ Returns:
159
+ ActionConfigResponse: Action configuration data.
160
+
161
+ """
162
+ return self._send_config_request(
163
+ identifier,
164
+ addon_name,
165
+ addon_version,
166
+ None,
167
+ project_name,
168
+ entity_type,
169
+ entity_ids,
170
+ entity_subtypes,
171
+ form_data,
172
+ variant,
173
+ )
174
+
175
+ def set_action_config(
176
+ self,
177
+ identifier: str,
178
+ addon_name: str,
179
+ addon_version: str,
180
+ value: Dict[str, Any],
181
+ project_name: Optional[str] = None,
182
+ entity_type: Optional["ActionEntityTypes"] = None,
183
+ entity_ids: Optional[List[str]] = None,
184
+ entity_subtypes: Optional[List[str]] = None,
185
+ form_data: Optional[Dict[str, Any]] = None,
186
+ *,
187
+ variant: Optional[str] = None,
188
+ ) -> "ActionConfigResponse":
189
+ """Set action configuration.
190
+
191
+ Args:
192
+ identifier (str): Identifier of the action.
193
+ addon_name (str): Name of the addon.
194
+ addon_version (str): Version of the addon.
195
+ value (Optional[Dict[str, Any]]): Value of the action
196
+ configuration.
197
+ project_name (Optional[str]): Name of the project. None for global
198
+ actions.
199
+ entity_type (Optional[ActionEntityTypes]): Entity type where the
200
+ action is triggered. None for global actions.
201
+ entity_ids (Optional[List[str]]): List of entity ids where the
202
+ action is triggered. None for global actions.
203
+ entity_subtypes (Optional[List[str]]): List of entity subtypes
204
+ folder types for folder ids, task types for tasks ids.
205
+ form_data (Optional[Dict[str, Any]]): Form data of the action.
206
+ variant (Optional[str]): Settings variant.
207
+
208
+ Returns:
209
+ ActionConfigResponse: New action configuration data.
210
+
211
+ """
212
+ return self._send_config_request(
213
+ identifier,
214
+ addon_name,
215
+ addon_version,
216
+ value,
217
+ project_name,
218
+ entity_type,
219
+ entity_ids,
220
+ entity_subtypes,
221
+ form_data,
222
+ variant,
223
+ )
224
+
225
+ def take_action(self, action_token: str) -> "ActionTakeResponse":
226
+ """Take action metadata using an action token.
227
+
228
+ Args:
229
+ action_token (str): AYON launcher action token.
230
+
231
+ Returns:
232
+ ActionTakeResponse: Action metadata describing how to launch
233
+ action.
234
+
235
+ """
236
+ response = self.get(f"actions/abort/{action_token}")
237
+ response.raise_for_status()
238
+ return response.data
239
+
240
+ def abort_action(
241
+ self,
242
+ action_token: str,
243
+ message: Optional[str] = None,
244
+ ) -> None:
245
+ """Abort action using an action token.
246
+
247
+ Args:
248
+ action_token (str): AYON launcher action token.
249
+ message (Optional[str]): Message to display in the UI.
250
+
251
+ """
252
+ if message is None:
253
+ message = "Action aborted"
254
+ response = self.post(
255
+ f"actions/abort/{action_token}",
256
+ message=message,
257
+ )
258
+ response.raise_for_status()
259
+
260
+ def _send_config_request(
261
+ self,
262
+ identifier: str,
263
+ addon_name: str,
264
+ addon_version: str,
265
+ value: Optional[Dict[str, Any]],
266
+ project_name: Optional[str],
267
+ entity_type: Optional["ActionEntityTypes"],
268
+ entity_ids: Optional[List[str]],
269
+ entity_subtypes: Optional[List[str]],
270
+ form_data: Optional[Dict[str, Any]],
271
+ variant: Optional[str],
272
+ ) -> "ActionConfigResponse":
273
+ """Set and get action configuration."""
274
+ if variant is None:
275
+ variant = self.get_default_settings_variant()
276
+ query_data = {
277
+ "addonName": addon_name,
278
+ "addonVersion": addon_version,
279
+ "identifier": identifier,
280
+ "variant": variant,
281
+ }
282
+ query = prepare_query_string(query_data)
283
+
284
+ kwargs = {
285
+ query_key: query_value
286
+ for query_key, query_value in (
287
+ ("projectName", project_name),
288
+ ("entityType", entity_type),
289
+ ("entityIds", entity_ids),
290
+ ("entitySubtypes", entity_subtypes),
291
+ ("formData", form_data),
292
+ )
293
+ if query_value is not None
294
+ }
295
+ if value is not None:
296
+ kwargs["value"] = value
297
+
298
+ response = self.post(f"actions/config{query}", **kwargs)
299
+ response.raise_for_status()
300
+ return response.data