Ayon-Python-Api 0.2.2__tar.gz → 0.3.0__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-0.3.0/PKG-INFO +283 -0
  2. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/__init__.py +2 -0
  3. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/_api.py +5 -0
  4. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/server_api.py +200 -59
  5. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/version.py +1 -1
  6. ayon-python-api-0.3.0/ayon_python_api.egg-info/PKG-INFO +283 -0
  7. ayon-python-api-0.3.0/pyproject.toml +40 -0
  8. ayon-python-api-0.2.2/PKG-INFO +0 -80
  9. ayon-python-api-0.2.2/ayon_python_api.egg-info/PKG-INFO +0 -80
  10. ayon-python-api-0.2.2/pyproject.toml +0 -19
  11. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/LICENSE +0 -0
  12. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/README.md +0 -0
  13. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/constants.py +0 -0
  14. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/entity_hub.py +0 -0
  15. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/events.py +0 -0
  16. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/exceptions.py +0 -0
  17. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/graphql.py +0 -0
  18. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/graphql_queries.py +0 -0
  19. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/operations.py +0 -0
  20. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/thumbnails.py +0 -0
  21. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_api/utils.py +0 -0
  22. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_python_api.egg-info/SOURCES.txt +0 -0
  23. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_python_api.egg-info/dependency_links.txt +0 -0
  24. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_python_api.egg-info/requires.txt +0 -0
  25. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/ayon_python_api.egg-info/top_level.txt +0 -0
  26. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/setup.cfg +0 -0
  27. {ayon-python-api-0.2.2 → ayon-python-api-0.3.0}/setup.py +0 -0
@@ -0,0 +1,283 @@
1
+ Metadata-Version: 2.1
2
+ Name: ayon-python-api
3
+ Version: 0.3.0
4
+ Summary: AYON Python API
5
+ Home-page: https://github.com/ynput/ayon-python-api
6
+ Author: ynput.io
7
+ Author-email: "ynput.io" <info@ynput.io>
8
+ License: Apache License
9
+ Version 2.0, January 2004
10
+ http://www.apache.org/licenses/
11
+
12
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
13
+
14
+ 1. Definitions.
15
+
16
+ "License" shall mean the terms and conditions for use, reproduction,
17
+ and distribution as defined by Sections 1 through 9 of this document.
18
+
19
+ "Licensor" shall mean the copyright owner or entity authorized by
20
+ the copyright owner that is granting the License.
21
+
22
+ "Legal Entity" shall mean the union of the acting entity and all
23
+ other entities that control, are controlled by, or are under common
24
+ control with that entity. For the purposes of this definition,
25
+ "control" means (i) the power, direct or indirect, to cause the
26
+ direction or management of such entity, whether by contract or
27
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
28
+ outstanding shares, or (iii) beneficial ownership of such entity.
29
+
30
+ "You" (or "Your") shall mean an individual or Legal Entity
31
+ exercising permissions granted by this License.
32
+
33
+ "Source" form shall mean the preferred form for making modifications,
34
+ including but not limited to software source code, documentation
35
+ source, and configuration files.
36
+
37
+ "Object" form shall mean any form resulting from mechanical
38
+ transformation or translation of a Source form, including but
39
+ not limited to compiled object code, generated documentation,
40
+ and conversions to other media types.
41
+
42
+ "Work" shall mean the work of authorship, whether in Source or
43
+ Object form, made available under the License, as indicated by a
44
+ copyright notice that is included in or attached to the work
45
+ (an example is provided in the Appendix below).
46
+
47
+ "Derivative Works" shall mean any work, whether in Source or Object
48
+ form, that is based on (or derived from) the Work and for which the
49
+ editorial revisions, annotations, elaborations, or other modifications
50
+ represent, as a whole, an original work of authorship. For the purposes
51
+ of this License, Derivative Works shall not include works that remain
52
+ separable from, or merely link (or bind by name) to the interfaces of,
53
+ the Work and Derivative Works thereof.
54
+
55
+ "Contribution" shall mean any work of authorship, including
56
+ the original version of the Work and any modifications or additions
57
+ to that Work or Derivative Works thereof, that is intentionally
58
+ submitted to Licensor for inclusion in the Work by the copyright owner
59
+ or by an individual or Legal Entity authorized to submit on behalf of
60
+ the copyright owner. For the purposes of this definition, "submitted"
61
+ means any form of electronic, verbal, or written communication sent
62
+ to the Licensor or its representatives, including but not limited to
63
+ communication on electronic mailing lists, source code control systems,
64
+ and issue tracking systems that are managed by, or on behalf of, the
65
+ Licensor for the purpose of discussing and improving the Work, but
66
+ excluding communication that is conspicuously marked or otherwise
67
+ designated in writing by the copyright owner as "Not a Contribution."
68
+
69
+ "Contributor" shall mean Licensor and any individual or Legal Entity
70
+ on behalf of whom a Contribution has been received by Licensor and
71
+ subsequently incorporated within the Work.
72
+
73
+ 2. Grant of Copyright License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ copyright license to reproduce, prepare Derivative Works of,
77
+ publicly display, publicly perform, sublicense, and distribute the
78
+ Work and such Derivative Works in Source or Object form.
79
+
80
+ 3. Grant of Patent License. Subject to the terms and conditions of
81
+ this License, each Contributor hereby grants to You a perpetual,
82
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
83
+ (except as stated in this section) patent license to make, have made,
84
+ use, offer to sell, sell, import, and otherwise transfer the Work,
85
+ where such license applies only to those patent claims licensable
86
+ by such Contributor that are necessarily infringed by their
87
+ Contribution(s) alone or by combination of their Contribution(s)
88
+ with the Work to which such Contribution(s) was submitted. If You
89
+ institute patent litigation against any entity (including a
90
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
91
+ or a Contribution incorporated within the Work constitutes direct
92
+ or contributory patent infringement, then any patent licenses
93
+ granted to You under this License for that Work shall terminate
94
+ as of the date such litigation is filed.
95
+
96
+ 4. Redistribution. You may reproduce and distribute copies of the
97
+ Work or Derivative Works thereof in any medium, with or without
98
+ modifications, and in Source or Object form, provided that You
99
+ meet the following conditions:
100
+
101
+ (a) You must give any other recipients of the Work or
102
+ Derivative Works a copy of this License; and
103
+
104
+ (b) You must cause any modified files to carry prominent notices
105
+ stating that You changed the files; and
106
+
107
+ (c) You must retain, in the Source form of any Derivative Works
108
+ that You distribute, all copyright, patent, trademark, and
109
+ attribution notices from the Source form of the Work,
110
+ excluding those notices that do not pertain to any part of
111
+ the Derivative Works; and
112
+
113
+ (d) If the Work includes a "NOTICE" text file as part of its
114
+ distribution, then any Derivative Works that You distribute must
115
+ include a readable copy of the attribution notices contained
116
+ within such NOTICE file, excluding those notices that do not
117
+ pertain to any part of the Derivative Works, in at least one
118
+ of the following places: within a NOTICE text file distributed
119
+ as part of the Derivative Works; within the Source form or
120
+ documentation, if provided along with the Derivative Works; or,
121
+ within a display generated by the Derivative Works, if and
122
+ wherever such third-party notices normally appear. The contents
123
+ of the NOTICE file are for informational purposes only and
124
+ do not modify the License. You may add Your own attribution
125
+ notices within Derivative Works that You distribute, alongside
126
+ or as an addendum to the NOTICE text from the Work, provided
127
+ that such additional attribution notices cannot be construed
128
+ as modifying the License.
129
+
130
+ You may add Your own copyright statement to Your modifications and
131
+ may provide additional or different license terms and conditions
132
+ for use, reproduction, or distribution of Your modifications, or
133
+ for any such Derivative Works as a whole, provided Your use,
134
+ reproduction, and distribution of the Work otherwise complies with
135
+ the conditions stated in this License.
136
+
137
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
138
+ any Contribution intentionally submitted for inclusion in the Work
139
+ by You to the Licensor shall be under the terms and conditions of
140
+ this License, without any additional terms or conditions.
141
+ Notwithstanding the above, nothing herein shall supersede or modify
142
+ the terms of any separate license agreement you may have executed
143
+ with Licensor regarding such Contributions.
144
+
145
+ 6. Trademarks. This License does not grant permission to use the trade
146
+ names, trademarks, service marks, or product names of the Licensor,
147
+ except as required for reasonable and customary use in describing the
148
+ origin of the Work and reproducing the content of the NOTICE file.
149
+
150
+ 7. Disclaimer of Warranty. Unless required by applicable law or
151
+ agreed to in writing, Licensor provides the Work (and each
152
+ Contributor provides its Contributions) on an "AS IS" BASIS,
153
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
154
+ implied, including, without limitation, any warranties or conditions
155
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
156
+ PARTICULAR PURPOSE. You are solely responsible for determining the
157
+ appropriateness of using or redistributing the Work and assume any
158
+ risks associated with Your exercise of permissions under this License.
159
+
160
+ 8. Limitation of Liability. In no event and under no legal theory,
161
+ whether in tort (including negligence), contract, or otherwise,
162
+ unless required by applicable law (such as deliberate and grossly
163
+ negligent acts) or agreed to in writing, shall any Contributor be
164
+ liable to You for damages, including any direct, indirect, special,
165
+ incidental, or consequential damages of any character arising as a
166
+ result of this License or out of the use or inability to use the
167
+ Work (including but not limited to damages for loss of goodwill,
168
+ work stoppage, computer failure or malfunction, or any and all
169
+ other commercial damages or losses), even if such Contributor
170
+ has been advised of the possibility of such damages.
171
+
172
+ 9. Accepting Warranty or Additional Liability. While redistributing
173
+ the Work or Derivative Works thereof, You may choose to offer,
174
+ and charge a fee for, acceptance of support, warranty, indemnity,
175
+ or other liability obligations and/or rights consistent with this
176
+ License. However, in accepting such obligations, You may act only
177
+ on Your own behalf and on Your sole responsibility, not on behalf
178
+ of any other Contributor, and only if You agree to indemnify,
179
+ defend, and hold each Contributor harmless for any liability
180
+ incurred by, or claims asserted against, such Contributor by reason
181
+ of your accepting any such warranty or additional liability.
182
+
183
+ END OF TERMS AND CONDITIONS
184
+
185
+ APPENDIX: How to apply the Apache License to your work.
186
+
187
+ To apply the Apache License to your work, attach the following
188
+ boilerplate notice, with the fields enclosed by brackets "[]"
189
+ replaced with your own identifying information. (Don't include
190
+ the brackets!) The text should be enclosed in the appropriate
191
+ comment syntax for the file format. We also recommend that a
192
+ file or class name and description of purpose be included on the
193
+ same "printed page" as the copyright notice for easier
194
+ identification within third-party archives.
195
+
196
+ Copyright [yyyy] [name of copyright owner]
197
+
198
+ Licensed under the Apache License, Version 2.0 (the "License");
199
+ you may not use this file except in compliance with the License.
200
+ You may obtain a copy of the License at
201
+
202
+ http://www.apache.org/licenses/LICENSE-2.0
203
+
204
+ Unless required by applicable law or agreed to in writing, software
205
+ distributed under the License is distributed on an "AS IS" BASIS,
206
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
207
+ See the License for the specific language governing permissions and
208
+ limitations under the License.
209
+
210
+ Project-URL: Repository, https://github.com/ynput/ayon-python-api
211
+ Project-URL: Changelog, https://github.com/ynput/ayon-python-api/releases
212
+ Keywords: AYON,ynput,OpenPype,vfx
213
+ Classifier: Development Status :: 3 - Alpha
214
+ Classifier: Programming Language :: Python
215
+ Classifier: Programming Language :: Python :: 2
216
+ Classifier: Programming Language :: Python :: 3
217
+ Description-Content-Type: text/markdown
218
+ License-File: LICENSE
219
+
220
+ # AYON server API
221
+ Python client for connection server. Client must be (at least for some time) Python 2 compatible because will be used in DCC that are "older".
222
+
223
+ AYON Python api should support connection to server with raw REST functions and prepared functionality for work with entities. Must not contain only functionality that can be used with core server functionality.
224
+
225
+ Module support singleton connection which is using `AYON_SERVER_URL` and `AYON_API_KEY` environment variables as source for connection. The singleton connection is using `ServerAPI` object. There can be created multiple connection to different server at one time, for that purpose use `ServerAPIBase` object.
226
+
227
+ ## Install
228
+ AYON python api is available on PyPi:
229
+
230
+ pip install ayon-python-api
231
+
232
+ For development purposes you may follow [build](#build-wheel) guide to build and install custom wheels.
233
+
234
+
235
+ ## Cloning the repository
236
+ Repository does not have submodules or special cases. Clone is simple as:
237
+
238
+ git clone git@github.com:ynput/ayon-python-api.git
239
+
240
+
241
+ ## Build wheel
242
+ For wheel build is required a `wheel` module from PyPi:
243
+
244
+ pip install wheel
245
+
246
+ Open terminal and change directory to ayon-python-api repository and build wheel:
247
+
248
+ cd <REPOSITORY ROOT>/ayon-python-api
249
+ python setup.py sdist bdist_wheel
250
+
251
+
252
+ Once finished a wheel should be created in `./dist/ayon_python_api-<VERSION>-py3-none-any`.
253
+
254
+ ---
255
+
256
+ ### Wheel installation
257
+ The wheel file can be used to install using pip:
258
+
259
+ pip install <REPOSITORY ROOT>/dist/ayon_python_api-<VERSION>-py3-none-any
260
+
261
+ If pip complain that `ayon-python-api` is already installed just uninstall existing one first:
262
+
263
+ pip uninstall ayon-python-api
264
+
265
+
266
+ ## TODOs
267
+ - Find more suitable name of `ServerAPI` objects (right now is used `con` or `connection`)
268
+ - Add all available CRUD operation on entities using REST
269
+ - Add folder and task changes to operations
270
+ - Enhance entity hub
271
+ - Missing docstrings in EntityHub -> especially entity arguments are missing
272
+ - Better order of arguments for entity classes
273
+ - Move entity hub to first place
274
+ - Skip those which are invalid for the entity and fake it for base or remove it from base
275
+ - Entity hub should use operations session to do changes
276
+ - Entity hub could also handle 'subset', 'version' and 'representation' entities
277
+ - Missing 'statuses' on project
278
+ - Missing 'status' on folders
279
+ - Missing assignees on tasks
280
+ - Pass docstrings and arguments definitions from `ServerAPI` methods to global functions
281
+ - Split `ServerAPI` into smaller chunks (somehow), the class has 4k+ lines of code
282
+ - Add .pyi stub for ServerAPI
283
+ - Missing websockets connection
@@ -101,6 +101,7 @@ from ._api import (
101
101
  get_addon_studio_settings,
102
102
  get_addon_project_settings,
103
103
  get_addon_settings,
104
+ get_bundle_settings,
104
105
  get_addons_studio_settings,
105
106
  get_addons_project_settings,
106
107
  get_addons_settings,
@@ -280,6 +281,7 @@ __all__ = (
280
281
  "get_addon_studio_settings",
281
282
  "get_addon_project_settings",
282
283
  "get_addon_settings",
284
+ "get_bundle_settings",
283
285
  "get_addons_studio_settings",
284
286
  "get_addons_project_settings",
285
287
  "get_addons_settings",
@@ -688,6 +688,11 @@ def get_addon_site_settings(*args, **kwargs):
688
688
  return con.get_addon_site_settings(*args, **kwargs)
689
689
 
690
690
 
691
+ def get_bundle_settings(*args, **kwargs):
692
+ con = get_server_api_connection()
693
+ return con.get_bundle_settings(*args, **kwargs)
694
+
695
+
691
696
  def get_addons_studio_settings(*args, **kwargs):
692
697
  con = get_server_api_connection()
693
698
  return con.get_addons_studio_settings(*args, **kwargs)
@@ -310,9 +310,9 @@ class ServerAPI(object):
310
310
  connection is created from the same machine under same user.
311
311
  client_version (Optional[str]): Version of client application (used in
312
312
  desktop client application).
313
- default_settings_variant (Optional[str]): Settings variant used by
314
- default if a method for settings won't get any (by default is
315
- 'production').
313
+ default_settings_variant (Optional[Literal["production", "staging"]]):
314
+ Settings variant used by default if a method for settings won't
315
+ get any (by default is 'production').
316
316
  ssl_verify (Union[bool, str, None]): Verify SSL certificate
317
317
  Looks for env variable value 'AYON_CA_FILE' by default. If not
318
318
  available then 'True' is used.
@@ -341,7 +341,10 @@ class ServerAPI(object):
341
341
  self._access_token = token
342
342
  self._site_id = site_id
343
343
  self._client_version = client_version
344
- self._default_settings_variant = default_settings_variant
344
+ self._default_settings_variant = (
345
+ default_settings_variant
346
+ or "production"
347
+ )
345
348
 
346
349
  if ssl_verify is None:
347
350
  # Custom AYON env variable for CA file or 'True'
@@ -527,9 +530,13 @@ class ServerAPI(object):
527
530
  as default variant.
528
531
 
529
532
  Args:
530
- variant (Union[str, None]): Settings variant name.
533
+ variant (Literal['production', 'staging']): Settings variant name.
531
534
  """
532
535
 
536
+ if variant not in ("production", "staging"):
537
+ raise ValueError((
538
+ "Invalid variant name {}. Expected 'production' or 'staging'"
539
+ ).format(variant))
533
540
  self._default_settings_variant = variant
534
541
 
535
542
  default_settings_variant = property(
@@ -2038,12 +2045,13 @@ class ServerAPI(object):
2038
2045
  """
2039
2046
 
2040
2047
  major, minor, patch, _, _ = self.server_version_tuple
2041
- if major == 0 and (minor < 2 or (minor == 2 and patch < 1)):
2048
+ if major == 0 and (minor > 2 or (minor == 2 and patch >= 1)):
2049
+ url = "desktop/dependency_packages/{}".format(filename)
2050
+ else:
2051
+ # Backwards compatibility for AYON server 0.2.0 and lower
2042
2052
  if platform_name is None:
2043
2053
  platform_name = platform.system().lower()
2044
2054
  url = "dependencies/{}/{}".format(filename, platform_name)
2045
- else:
2046
- url = "desktop/dependency_packages/{}".format(filename)
2047
2055
 
2048
2056
  response = self.delete(url)
2049
2057
  if response.status != 200:
@@ -2082,12 +2090,13 @@ class ServerAPI(object):
2082
2090
  """
2083
2091
 
2084
2092
  major, minor, patch, _, _ = self.server_version_tuple
2085
- if major == 0 and (minor < 2 or (minor == 2 and patch < 1)):
2093
+ if major == 0 and (minor > 2 or (minor == 2 and patch >= 1)):
2094
+ url = "desktop/dependency_packages/{}".format(src_filename)
2095
+ else:
2096
+ # Backwards compatibility for AYON server 0.2.0 and lower
2086
2097
  if platform_name is None:
2087
2098
  platform_name = platform.system().lower()
2088
2099
  url = "dependencies/{}/{}".format(src_filename, platform_name)
2089
- else:
2090
- url = "desktop/dependency_packages/{}".format(src_filename)
2091
2100
 
2092
2101
  package_filepath = os.path.join(dst_directory, dst_filename)
2093
2102
  self.download_file(
@@ -2114,12 +2123,13 @@ class ServerAPI(object):
2114
2123
  """
2115
2124
 
2116
2125
  major, minor, patch, _, _ = self.server_version_tuple
2117
- if major == 0 and (minor < 2 or (minor == 2 and patch < 1)):
2126
+ if major == 0 and (minor > 2 or (minor == 2 and patch >= 1)):
2127
+ url = "desktop/dependency_packages/{}".format(dst_filename)
2128
+ else:
2129
+ # Backwards compatibility for AYON server 0.2.0 and lower
2118
2130
  if platform_name is None:
2119
2131
  platform_name = platform.system().lower()
2120
2132
  url = "dependencies/{}/{}".format(dst_filename, platform_name)
2121
- else:
2122
- url = "desktop/dependency_packages/{}".format(dst_filename)
2123
2133
 
2124
2134
  self.upload_file(url, src_filepath, progress=progress)
2125
2135
 
@@ -2404,17 +2414,17 @@ class ServerAPI(object):
2404
2414
  ):
2405
2415
  """Addon studio settings.
2406
2416
 
2407
- Receive studio settings for specific version of an addon.
2417
+ Receive studio settings for specific version of an addon.
2408
2418
 
2409
- Args:
2410
- addon_name (str): Name of addon.
2411
- addon_version (str): Version of addon.
2412
- variant (Optional[str]): Name of settings variant. By default,
2413
- is used 'default_settings_variant' passed on init.
2419
+ Args:
2420
+ addon_name (str): Name of addon.
2421
+ addon_version (str): Version of addon.
2422
+ variant (Optional[Literal['production', 'staging']]): Name of
2423
+ settings variant. Used 'default_settings_variant' by default.
2414
2424
 
2415
- Returns:
2425
+ Returns:
2416
2426
  dict[str, Any]: Addon settings.
2417
- """
2427
+ """
2418
2428
 
2419
2429
  if variant is None:
2420
2430
  variant = self.default_settings_variant
@@ -2452,8 +2462,8 @@ class ServerAPI(object):
2452
2462
  addon_version (str): Version of addon.
2453
2463
  project_name (str): Name of project for which the settings are
2454
2464
  received.
2455
- variant (Optional[str]): Name of settings variant. By default,
2456
- is used 'production'.
2465
+ variant (Optional[Literal['production', 'staging']]): Name of
2466
+ settings variant. Used 'default_settings_variant' by default.
2457
2467
  site_id (Optional[str]): Name of site which is used for site
2458
2468
  overrides. Is filled with connection 'site_id' attribute
2459
2469
  if not passed.
@@ -2509,8 +2519,8 @@ class ServerAPI(object):
2509
2519
  project_name (Optional[str]): Name of project for which the
2510
2520
  settings are received. A studio settings values are received
2511
2521
  if is 'None'.
2512
- variant (Optional[str]): Name of settings variant. By default,
2513
- is used 'production'.
2522
+ variant (Optional[Literal['production', 'staging']]): Name of
2523
+ settings variant. Used 'default_settings_variant' by default.
2514
2524
  site_id (Optional[str]): Name of site which is used for site
2515
2525
  overrides. Is filled with connection 'site_id' attribute
2516
2526
  if not passed.
@@ -2560,12 +2570,106 @@ class ServerAPI(object):
2560
2570
  result.raise_for_status()
2561
2571
  return result.data
2562
2572
 
2563
- def get_addons_studio_settings(self, variant=None, only_values=True):
2573
+ def get_bundle_settings(
2574
+ self,
2575
+ bundle_name=None,
2576
+ project_name=None,
2577
+ variant=None,
2578
+ site_id=None,
2579
+ use_site=True
2580
+ ):
2581
+ """Get complete set of settings for given data.
2582
+
2583
+ If project is not passed then studio settings are returned. If variant
2584
+ is not passed 'default_settings_variant' is used. If bundle name is
2585
+ not passed then current production/staging bundle is used, based on
2586
+ variant value.
2587
+
2588
+ Output contains addon settings and site settings in single dictionary.
2589
+
2590
+ TODOs:
2591
+ - test how it behaves if there is not any bundle.
2592
+ - test how it behaves if there is not any production/staging
2593
+ bundle.
2594
+
2595
+ Warnings:
2596
+ For AYON server < 0.3.0 bundle name will be ignored.
2597
+
2598
+ Example output:
2599
+ {
2600
+ "addons": [
2601
+ {
2602
+ "name": "addon-name",
2603
+ "version": "addon-version",
2604
+ "settings": {...}
2605
+ "siteSettings": {...}
2606
+ }
2607
+ ]
2608
+ }
2609
+
2610
+ Returns:
2611
+ dict[str, Any]: All settings for single bundle.
2612
+ """
2613
+
2614
+ major, minor, _, _, _ = self.server_version_tuple
2615
+ query_values = {
2616
+ key: value
2617
+ for key, value in (
2618
+ ("project_name", project_name),
2619
+ ("variant", variant or self.default_settings_variant),
2620
+ ("bundle_name", bundle_name),
2621
+ )
2622
+ if value
2623
+ }
2624
+ if use_site:
2625
+ if not site_id:
2626
+ site_id = self.site_id
2627
+ if site_id:
2628
+ query_values["site_id"] = site_id
2629
+
2630
+ if major == 0 and minor >= 3:
2631
+ url = "settings"
2632
+ else:
2633
+ # Backward compatibility for AYON server < 0.3.0
2634
+ url = "settings/addons"
2635
+ query_values.pop("bundle_name", None)
2636
+ for new_key, old_key in (
2637
+ ("project_name", "project"),
2638
+ ("site_id", "site"),
2639
+ ):
2640
+ if new_key in query_values:
2641
+ query_values[old_key] = query_values.pop(new_key)
2642
+
2643
+ query = prepare_query_string(query_values)
2644
+ response = self.get("{}{}".format(url, query))
2645
+ response.raise_for_status()
2646
+ return response.data
2647
+
2648
+ def get_addons_studio_settings(
2649
+ self,
2650
+ bundle_name=None,
2651
+ variant=None,
2652
+ site_id=None,
2653
+ use_site=True,
2654
+ only_values=True
2655
+ ):
2564
2656
  """All addons settings in one bulk.
2565
2657
 
2658
+ Warnings:
2659
+ Behavior of this function changed with AYON server version 0.3.0.
2660
+ Structure of output from server changed. If using
2661
+ 'only_values=True' then output should be same as before.
2662
+
2566
2663
  Args:
2567
- variant (Optional[Literal[production, staging]]): Variant of
2568
- settings. By default, is used 'production'.
2664
+ bundle_name (Optional[str]): Name of bundle for which should be
2665
+ settings received.
2666
+ variant (Optional[Literal['production', 'staging']]): Name of
2667
+ settings variant. Used 'default_settings_variant' by default.
2668
+ site_id (Optional[str]): Id of site for which want to receive
2669
+ site overrides.
2670
+ use_site (bool): To force disable option of using site overrides
2671
+ set to 'False'. In that case won't be applied any site
2672
+ overrides.
2569
2673
  only_values (Optional[bool]): Output will contain only settings
2570
2674
  values without metadata about addons.
2571
2675
 
@@ -2573,20 +2677,28 @@ class ServerAPI(object):
2573
2677
  dict[str, Any]: Settings of all addons on server.
2574
2678
  """
2575
2679
 
2576
- query_values = {}
2577
- if variant:
2578
- query_values["variant"] = variant
2579
- query = prepare_query_string(query_values)
2580
- response = self.get("settings/addons{}".format(query))
2581
- response.raise_for_status()
2582
- output = response.data
2680
+ output = self.get_bundle_settings(
2681
+ bundle_name=bundle_name,
2682
+ variant=variant,
2683
+ site_id=site_id,
2684
+ use_site=use_site
2685
+ )
2583
2686
  if only_values:
2584
- output = output["settings"]
2687
+ major, minor, patch, _, _ = self.server_version_tuple
2688
+ if major == 0 and minor >= 3:
2689
+ output = {
2690
+ addon["name"]: addon["settings"]
2691
+ for addon in output["addons"]
2692
+ }
2693
+ else:
2694
+ # Backward compatibility for AYON server < 0.3.0
2695
+ output = output["settings"]
2585
2696
  return output
2586
2697
 
2587
2698
  def get_addons_project_settings(
2588
2699
  self,
2589
2700
  project_name,
2701
+ bundle_name=None,
2590
2702
  variant=None,
2591
2703
  site_id=None,
2592
2704
  use_site=True,
@@ -2605,11 +2717,18 @@ class ServerAPI(object):
2605
2717
  argument which is by default set to 'True'. In that case output
2606
2718
  contains only value of 'settings' key.
2607
2719
 
2720
+ Warnings:
2721
+ Behavior of this function changed with AYON server version 0.3.0.
2722
+ Structure of output from server changed. If using
2723
+ 'only_values=True' then output should be same as before.
2724
+
2608
2725
  Args:
2609
2726
  project_name (str): Name of project for which are settings
2610
2727
  received.
2611
- variant (Optional[Literal[production, staging]]): Variant of
2612
- settings. By default, is used 'production'.
2728
+ bundle_name (Optional[str]): Name of bundle for which should be
2729
+ settings received.
2730
+ variant (Optional[Literal['production', 'staging']]): Name of
2731
+ settings variant. Used 'default_settings_variant' by default.
2613
2732
  site_id (Optional[str]): Id of site for which want to receive
2614
2733
  site overrides.
2615
2734
  use_site (bool): To force disable option of using site overrides
@@ -2623,27 +2742,31 @@ class ServerAPI(object):
2623
2742
  project.
2624
2743
  """
2625
2744
 
2626
- query_values = {
2627
- "project": project_name
2628
- }
2629
- if variant:
2630
- query_values["variant"] = variant
2631
-
2632
- if use_site:
2633
- if not site_id:
2634
- site_id = self.default_settings_variant
2635
- if site_id:
2636
- query_values["site"] = site_id
2637
- query = prepare_query_string(query_values)
2638
- response = self.get("settings/addons{}".format(query))
2639
- response.raise_for_status()
2640
- output = response.data
2745
+ if not project_name:
2746
+ raise ValueError("Project name must be passed.")
2747
+
2748
+ output = self.get_bundle_settings(
2749
+ project_name=project_name,
2750
+ bundle_name=bundle_name,
2751
+ variant=variant,
2752
+ site_id=site_id,
2753
+ use_site=use_site
2754
+ )
2641
2755
  if only_values:
2642
- output = output["settings"]
2756
+ major, minor, patch, _, _ = self.server_version_tuple
2757
+ if major == 0 and minor >= 3:
2758
+ output = {
2759
+ addon["name"]: addon["settings"]
2760
+ for addon in output["addons"]
2761
+ }
2762
+ else:
2763
+ # Backward compatibility for AYON server < 0.3.0
2764
+ output = output["settings"]
2643
2765
  return output
2644
2766
 
2645
2767
  def get_addons_settings(
2646
2768
  self,
2769
+ bundle_name=None,
2647
2770
  project_name=None,
2648
2771
  variant=None,
2649
2772
  site_id=None,
@@ -2655,11 +2778,18 @@ class ServerAPI(object):
2655
2778
  Based on 'project_name' will receive studio settings or project
2656
2779
  settings. In case project is not passed is 'site_id' ignored.
2657
2780
 
2781
+ Warnings:
2782
+ Behavior of this function changed with AYON server version 0.3.0.
2783
+ Structure of output from server changed. If using
2784
+ 'only_values=True' then output should be same as before.
2785
+
2658
2786
  Args:
2787
+ bundle_name (Optional[str]): Name of bundle for which should be
2788
+ settings received.
2659
2789
  project_name (Optional[str]): Name of project for which should be
2660
2790
  settings received.
2661
- variant (Optional[Literal[production, staging]]): Settings variant.
2662
- By default, is used 'production'.
2791
+ variant (Optional[Literal['production', 'staging']]): Name of
2792
+ settings variant. Used 'default_settings_variant' by default.
2663
2793
  site_id (Optional[str]): Id of site for which want to receive
2664
2794
  site overrides.
2665
2795
  use_site (Optional[bool]): To force disable option of using site
@@ -2670,10 +2800,21 @@ class ServerAPI(object):
2670
2800
  """
2671
2801
 
2672
2802
  if project_name is None:
2673
- return self.get_addons_studio_settings(variant, only_values)
2803
+ return self.get_addons_studio_settings(
2804
+ bundle_name=bundle_name,
2805
+ variant=variant,
2806
+ site_id=site_id,
2807
+ use_site=use_site,
2808
+ only_values=only_values
2809
+ )
2674
2810
 
2675
2811
  return self.get_addons_project_settings(
2676
- project_name, variant, site_id, use_site, only_values
2812
+ project_name=project_name,
2813
+ bundle_name=bundle_name,
2814
+ variant=variant,
2815
+ site_id=site_id,
2816
+ use_site=use_site,
2817
+ only_values=only_values
2677
2818
  )
2678
2819
 
2679
2820
  # Entity getters
@@ -1,2 +1,2 @@
1
1
  """Package declaring Python API for Ayon server."""
2
- __version__ = "0.2.2"
2
+ __version__ = "0.3.0"
@@ -0,0 +1,283 @@
1
+ Metadata-Version: 2.1
2
+ Name: ayon-python-api
3
+ Version: 0.3.0
4
+ Summary: AYON Python API
5
+ Home-page: https://github.com/ynput/ayon-python-api
6
+ Author: ynput.io
7
+ Author-email: "ynput.io" <info@ynput.io>
8
+ License: Apache License
9
+ Version 2.0, January 2004
10
+ http://www.apache.org/licenses/
11
+
12
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
13
+
14
+ 1. Definitions.
15
+
16
+ "License" shall mean the terms and conditions for use, reproduction,
17
+ and distribution as defined by Sections 1 through 9 of this document.
18
+
19
+ "Licensor" shall mean the copyright owner or entity authorized by
20
+ the copyright owner that is granting the License.
21
+
22
+ "Legal Entity" shall mean the union of the acting entity and all
23
+ other entities that control, are controlled by, or are under common
24
+ control with that entity. For the purposes of this definition,
25
+ "control" means (i) the power, direct or indirect, to cause the
26
+ direction or management of such entity, whether by contract or
27
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
28
+ outstanding shares, or (iii) beneficial ownership of such entity.
29
+
30
+ "You" (or "Your") shall mean an individual or Legal Entity
31
+ exercising permissions granted by this License.
32
+
33
+ "Source" form shall mean the preferred form for making modifications,
34
+ including but not limited to software source code, documentation
35
+ source, and configuration files.
36
+
37
+ "Object" form shall mean any form resulting from mechanical
38
+ transformation or translation of a Source form, including but
39
+ not limited to compiled object code, generated documentation,
40
+ and conversions to other media types.
41
+
42
+ "Work" shall mean the work of authorship, whether in Source or
43
+ Object form, made available under the License, as indicated by a
44
+ copyright notice that is included in or attached to the work
45
+ (an example is provided in the Appendix below).
46
+
47
+ "Derivative Works" shall mean any work, whether in Source or Object
48
+ form, that is based on (or derived from) the Work and for which the
49
+ editorial revisions, annotations, elaborations, or other modifications
50
+ represent, as a whole, an original work of authorship. For the purposes
51
+ of this License, Derivative Works shall not include works that remain
52
+ separable from, or merely link (or bind by name) to the interfaces of,
53
+ the Work and Derivative Works thereof.
54
+
55
+ "Contribution" shall mean any work of authorship, including
56
+ the original version of the Work and any modifications or additions
57
+ to that Work or Derivative Works thereof, that is intentionally
58
+ submitted to Licensor for inclusion in the Work by the copyright owner
59
+ or by an individual or Legal Entity authorized to submit on behalf of
60
+ the copyright owner. For the purposes of this definition, "submitted"
61
+ means any form of electronic, verbal, or written communication sent
62
+ to the Licensor or its representatives, including but not limited to
63
+ communication on electronic mailing lists, source code control systems,
64
+ and issue tracking systems that are managed by, or on behalf of, the
65
+ Licensor for the purpose of discussing and improving the Work, but
66
+ excluding communication that is conspicuously marked or otherwise
67
+ designated in writing by the copyright owner as "Not a Contribution."
68
+
69
+ "Contributor" shall mean Licensor and any individual or Legal Entity
70
+ on behalf of whom a Contribution has been received by Licensor and
71
+ subsequently incorporated within the Work.
72
+
73
+ 2. Grant of Copyright License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ copyright license to reproduce, prepare Derivative Works of,
77
+ publicly display, publicly perform, sublicense, and distribute the
78
+ Work and such Derivative Works in Source or Object form.
79
+
80
+ 3. Grant of Patent License. Subject to the terms and conditions of
81
+ this License, each Contributor hereby grants to You a perpetual,
82
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
83
+ (except as stated in this section) patent license to make, have made,
84
+ use, offer to sell, sell, import, and otherwise transfer the Work,
85
+ where such license applies only to those patent claims licensable
86
+ by such Contributor that are necessarily infringed by their
87
+ Contribution(s) alone or by combination of their Contribution(s)
88
+ with the Work to which such Contribution(s) was submitted. If You
89
+ institute patent litigation against any entity (including a
90
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
91
+ or a Contribution incorporated within the Work constitutes direct
92
+ or contributory patent infringement, then any patent licenses
93
+ granted to You under this License for that Work shall terminate
94
+ as of the date such litigation is filed.
95
+
96
+ 4. Redistribution. You may reproduce and distribute copies of the
97
+ Work or Derivative Works thereof in any medium, with or without
98
+ modifications, and in Source or Object form, provided that You
99
+ meet the following conditions:
100
+
101
+ (a) You must give any other recipients of the Work or
102
+ Derivative Works a copy of this License; and
103
+
104
+ (b) You must cause any modified files to carry prominent notices
105
+ stating that You changed the files; and
106
+
107
+ (c) You must retain, in the Source form of any Derivative Works
108
+ that You distribute, all copyright, patent, trademark, and
109
+ attribution notices from the Source form of the Work,
110
+ excluding those notices that do not pertain to any part of
111
+ the Derivative Works; and
112
+
113
+ (d) If the Work includes a "NOTICE" text file as part of its
114
+ distribution, then any Derivative Works that You distribute must
115
+ include a readable copy of the attribution notices contained
116
+ within such NOTICE file, excluding those notices that do not
117
+ pertain to any part of the Derivative Works, in at least one
118
+ of the following places: within a NOTICE text file distributed
119
+ as part of the Derivative Works; within the Source form or
120
+ documentation, if provided along with the Derivative Works; or,
121
+ within a display generated by the Derivative Works, if and
122
+ wherever such third-party notices normally appear. The contents
123
+ of the NOTICE file are for informational purposes only and
124
+ do not modify the License. You may add Your own attribution
125
+ notices within Derivative Works that You distribute, alongside
126
+ or as an addendum to the NOTICE text from the Work, provided
127
+ that such additional attribution notices cannot be construed
128
+ as modifying the License.
129
+
130
+ You may add Your own copyright statement to Your modifications and
131
+ may provide additional or different license terms and conditions
132
+ for use, reproduction, or distribution of Your modifications, or
133
+ for any such Derivative Works as a whole, provided Your use,
134
+ reproduction, and distribution of the Work otherwise complies with
135
+ the conditions stated in this License.
136
+
137
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
138
+ any Contribution intentionally submitted for inclusion in the Work
139
+ by You to the Licensor shall be under the terms and conditions of
140
+ this License, without any additional terms or conditions.
141
+ Notwithstanding the above, nothing herein shall supersede or modify
142
+ the terms of any separate license agreement you may have executed
143
+ with Licensor regarding such Contributions.
144
+
145
+ 6. Trademarks. This License does not grant permission to use the trade
146
+ names, trademarks, service marks, or product names of the Licensor,
147
+ except as required for reasonable and customary use in describing the
148
+ origin of the Work and reproducing the content of the NOTICE file.
149
+
150
+ 7. Disclaimer of Warranty. Unless required by applicable law or
151
+ agreed to in writing, Licensor provides the Work (and each
152
+ Contributor provides its Contributions) on an "AS IS" BASIS,
153
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
154
+ implied, including, without limitation, any warranties or conditions
155
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
156
+ PARTICULAR PURPOSE. You are solely responsible for determining the
157
+ appropriateness of using or redistributing the Work and assume any
158
+ risks associated with Your exercise of permissions under this License.
159
+
160
+ 8. Limitation of Liability. In no event and under no legal theory,
161
+ whether in tort (including negligence), contract, or otherwise,
162
+ unless required by applicable law (such as deliberate and grossly
163
+ negligent acts) or agreed to in writing, shall any Contributor be
164
+ liable to You for damages, including any direct, indirect, special,
165
+ incidental, or consequential damages of any character arising as a
166
+ result of this License or out of the use or inability to use the
167
+ Work (including but not limited to damages for loss of goodwill,
168
+ work stoppage, computer failure or malfunction, or any and all
169
+ other commercial damages or losses), even if such Contributor
170
+ has been advised of the possibility of such damages.
171
+
172
+ 9. Accepting Warranty or Additional Liability. While redistributing
173
+ the Work or Derivative Works thereof, You may choose to offer,
174
+ and charge a fee for, acceptance of support, warranty, indemnity,
175
+ or other liability obligations and/or rights consistent with this
176
+ License. However, in accepting such obligations, You may act only
177
+ on Your own behalf and on Your sole responsibility, not on behalf
178
+ of any other Contributor, and only if You agree to indemnify,
179
+ defend, and hold each Contributor harmless for any liability
180
+ incurred by, or claims asserted against, such Contributor by reason
181
+ of your accepting any such warranty or additional liability.
182
+
183
+ END OF TERMS AND CONDITIONS
184
+
185
+ APPENDIX: How to apply the Apache License to your work.
186
+
187
+ To apply the Apache License to your work, attach the following
188
+ boilerplate notice, with the fields enclosed by brackets "[]"
189
+ replaced with your own identifying information. (Don't include
190
+ the brackets!) The text should be enclosed in the appropriate
191
+ comment syntax for the file format. We also recommend that a
192
+ file or class name and description of purpose be included on the
193
+ same "printed page" as the copyright notice for easier
194
+ identification within third-party archives.
195
+
196
+ Copyright [yyyy] [name of copyright owner]
197
+
198
+ Licensed under the Apache License, Version 2.0 (the "License");
199
+ you may not use this file except in compliance with the License.
200
+ You may obtain a copy of the License at
201
+
202
+ http://www.apache.org/licenses/LICENSE-2.0
203
+
204
+ Unless required by applicable law or agreed to in writing, software
205
+ distributed under the License is distributed on an "AS IS" BASIS,
206
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
207
+ See the License for the specific language governing permissions and
208
+ limitations under the License.
209
+
210
+ Project-URL: Repository, https://github.com/ynput/ayon-python-api
211
+ Project-URL: Changelog, https://github.com/ynput/ayon-python-api/releases
212
+ Keywords: AYON,ynput,OpenPype,vfx
213
+ Classifier: Development Status :: 3 - Alpha
214
+ Classifier: Programming Language :: Python
215
+ Classifier: Programming Language :: Python :: 2
216
+ Classifier: Programming Language :: Python :: 3
217
+ Description-Content-Type: text/markdown
218
+ License-File: LICENSE
219
+
220
+ # AYON server API
221
+ Python client for connection server. Client must be (at least for some time) Python 2 compatible because will be used in DCC that are "older".
222
+
223
+ AYON Python api should support connection to server with raw REST functions and prepared functionality for work with entities. Must not contain only functionality that can be used with core server functionality.
224
+
225
+ Module support singleton connection which is using `AYON_SERVER_URL` and `AYON_API_KEY` environment variables as source for connection. The singleton connection is using `ServerAPI` object. There can be created multiple connection to different server at one time, for that purpose use `ServerAPIBase` object.
226
+
227
+ ## Install
228
+ AYON python api is available on PyPi:
229
+
230
+ pip install ayon-python-api
231
+
232
+ For development purposes you may follow [build](#build-wheel) guide to build and install custom wheels.
233
+
234
+
235
+ ## Cloning the repository
236
+ Repository does not have submodules or special cases. Clone is simple as:
237
+
238
+ git clone git@github.com:ynput/ayon-python-api.git
239
+
240
+
241
+ ## Build wheel
242
+ For wheel build is required a `wheel` module from PyPi:
243
+
244
+ pip install wheel
245
+
246
+ Open terminal and change directory to ayon-python-api repository and build wheel:
247
+
248
+ cd <REPOSITORY ROOT>/ayon-python-api
249
+ python setup.py sdist bdist_wheel
250
+
251
+
252
+ Once finished a wheel should be created in `./dist/ayon_python_api-<VERSION>-py3-none-any`.
253
+
254
+ ---
255
+
256
+ ### Wheel installation
257
+ The wheel file can be used to install using pip:
258
+
259
+ pip install <REPOSITORY ROOT>/dist/ayon_python_api-<VERSION>-py3-none-any
260
+
261
+ If pip complain that `ayon-python-api` is already installed just uninstall existing one first:
262
+
263
+ pip uninstall ayon-python-api
264
+
265
+
266
+ ## TODOs
267
+ - Find more suitable name of `ServerAPI` objects (right now is used `con` or `connection`)
268
+ - Add all available CRUD operation on entities using REST
269
+ - Add folder and task changes to operations
270
+ - Enhance entity hub
271
+ - Missing docstrings in EntityHub -> especially entity arguments are missing
272
+ - Better order of arguments for entity classes
273
+ - Move entity hub to first place
274
+ - Skip those which are invalid for the entity and fake it for base or remove it from base
275
+ - Entity hub should use operations session to do changes
276
+ - Entity hub could also handle 'subset', 'version' and 'representation' entities
277
+ - Missing 'statuses' on project
278
+ - Missing 'status' on folders
279
+ - Missing assignees on tasks
280
+ - Pass docstrings and arguments definitions from `ServerAPI` methods to global functions
281
+ - Split `ServerAPI` into smaller chunks (somehow), the class has 4k+ lines of code
282
+ - Add .pyi stub for ServerAPI
283
+ - Missing websockets connection
@@ -0,0 +1,40 @@
1
+ [project]
2
+ name = "ayon-python-api"
3
+ version = "0.3.0"
4
+ description = "AYON Python API"
5
+ license = {file = "LICENSE"}
6
+ readme = {file = "README.md", content-type = "text/markdown"}
7
+ authors = [
8
+ {name = "ynput.io", email = "info@ynput.io"}
9
+ ]
10
+ keywords = ["AYON", "ynput", "OpenPype", "vfx"]
11
+ classifiers = [
12
+ "Development Status :: 3 - Alpha",
13
+ "Programming Language :: Python",
14
+ "Programming Language :: Python :: 2",
15
+ "Programming Language :: Python :: 3",
16
+ ]
17
+ dependencies = [
18
+ "requests >= 2.27.1",
19
+ "six >= 1.15",
20
+ "Unidecode >= 1.2.0",
21
+ "appdirs >=1, <2",
22
+ ]
23
+
24
+ [project.urls]
25
+ Repository = "https://github.com/ynput/ayon-python-api"
26
+ Changelog = "https://github.com/ynput/ayon-python-api/releases"
27
+
28
+ [build-system]
29
+ requires = ["poetry-core>=1.0.0"]
30
+ build-backend = "poetry.core.masonry.api"
31
+
32
+ [tool.poetry.dependencies]
33
+ python = ">=2.7,>=3.6.5"
34
+ requests = "^2.28.1"
35
+ six = "^1.15"
36
+ Unidecode = "1.2.0" # Python 2 support
37
+ appdirs = "^1.4"
38
+
39
+ [tool.poetry.dev-dependencies]
40
+ pytest = "^5.2"
@@ -1,80 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: ayon-python-api
3
- Version: 0.2.2
4
- Summary: AYON Python API
5
- Home-page: https://github.com/ynput/ayon-python-api
6
- Author: ynput.io
7
- Author-email: info@ynput.io
8
- License: Apache License (2.0)
9
- Keywords: AYON,ynput,OpenPype,vfx
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: Programming Language :: Python
12
- Classifier: Programming Language :: Python :: 2
13
- Classifier: Programming Language :: Python :: 3
14
- Description-Content-Type: text/markdown
15
- License-File: LICENSE
16
-
17
- # AYON server API
18
- Python client for connection server. Client must be (at least for some time) Python 2 compatible because will be used in DCC that are "older".
19
-
20
- AYON Python api should support connection to server with raw REST functions and prepared functionality for work with entities. Must not contain only functionality that can be used with core server functionality.
21
-
22
- Module support singleton connection which is using `AYON_SERVER_URL` and `AYON_API_KEY` environment variables as source for connection. The singleton connection is using `ServerAPI` object. There can be created multiple connection to different server at one time, for that purpose use `ServerAPIBase` object.
23
-
24
- ## Install
25
- AYON python api is available on PyPi:
26
-
27
- pip install ayon-python-api
28
-
29
- For development purposes you may follow [build](#build-wheel) guide to build and install custom wheels.
30
-
31
-
32
- ## Cloning the repository
33
- Repository does not have submodules or special cases. Clone is simple as:
34
-
35
- git clone git@github.com:ynput/ayon-python-api.git
36
-
37
-
38
- ## Build wheel
39
- For wheel build is required a `wheel` module from PyPi:
40
-
41
- pip install wheel
42
-
43
- Open terminal and change directory to ayon-python-api repository and build wheel:
44
-
45
- cd <REPOSITORY ROOT>/ayon-python-api
46
- python setup.py sdist bdist_wheel
47
-
48
-
49
- Once finished a wheel should be created in `./dist/ayon_python_api-<VERSION>-py3-none-any`.
50
-
51
- ---
52
-
53
- ### Wheel installation
54
- The wheel file can be used to install using pip:
55
-
56
- pip install <REPOSITORY ROOT>/dist/ayon_python_api-<VERSION>-py3-none-any
57
-
58
- If pip complain that `ayon-python-api` is already installed just uninstall existing one first:
59
-
60
- pip uninstall ayon-python-api
61
-
62
-
63
- ## TODOs
64
- - Find more suitable name of `ServerAPI` objects (right now is used `con` or `connection`)
65
- - Add all available CRUD operation on entities using REST
66
- - Add folder and task changes to operations
67
- - Enhance entity hub
68
- - Missing docstrings in EntityHub -> especially entity arguments are missing
69
- - Better order of arguments for entity classes
70
- - Move entity hub to first place
71
- - Skip those which are invalid for the entity and fake it for base or remove it from base
72
- - Entity hub should use operations session to do changes
73
- - Entity hub could also handle 'subset', 'version' and 'representation' entities
74
- - Missing 'statuses' on project
75
- - Missing 'status' on folders
76
- - Missing assignees on tasks
77
- - Pass docstrings and arguments definitions from `ServerAPI` methods to global functions
78
- - Split `ServerAPI` into smaller chunks (somehow), the class has 4k+ lines of code
79
- - Add .pyi stub for ServerAPI
80
- - Missing websockets connection
@@ -1,80 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: ayon-python-api
3
- Version: 0.2.2
4
- Summary: AYON Python API
5
- Home-page: https://github.com/ynput/ayon-python-api
6
- Author: ynput.io
7
- Author-email: info@ynput.io
8
- License: Apache License (2.0)
9
- Keywords: AYON,ynput,OpenPype,vfx
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: Programming Language :: Python
12
- Classifier: Programming Language :: Python :: 2
13
- Classifier: Programming Language :: Python :: 3
14
- Description-Content-Type: text/markdown
15
- License-File: LICENSE
16
-
17
- # AYON server API
18
- Python client for connection server. Client must be (at least for some time) Python 2 compatible because will be used in DCC that are "older".
19
-
20
- AYON Python api should support connection to server with raw REST functions and prepared functionality for work with entities. Must not contain only functionality that can be used with core server functionality.
21
-
22
- Module support singleton connection which is using `AYON_SERVER_URL` and `AYON_API_KEY` environment variables as source for connection. The singleton connection is using `ServerAPI` object. There can be created multiple connection to different server at one time, for that purpose use `ServerAPIBase` object.
23
-
24
- ## Install
25
- AYON python api is available on PyPi:
26
-
27
- pip install ayon-python-api
28
-
29
- For development purposes you may follow [build](#build-wheel) guide to build and install custom wheels.
30
-
31
-
32
- ## Cloning the repository
33
- Repository does not have submodules or special cases. Clone is simple as:
34
-
35
- git clone git@github.com:ynput/ayon-python-api.git
36
-
37
-
38
- ## Build wheel
39
- For wheel build is required a `wheel` module from PyPi:
40
-
41
- pip install wheel
42
-
43
- Open terminal and change directory to ayon-python-api repository and build wheel:
44
-
45
- cd <REPOSITORY ROOT>/ayon-python-api
46
- python setup.py sdist bdist_wheel
47
-
48
-
49
- Once finished a wheel should be created in `./dist/ayon_python_api-<VERSION>-py3-none-any`.
50
-
51
- ---
52
-
53
- ### Wheel installation
54
- The wheel file can be used to install using pip:
55
-
56
- pip install <REPOSITORY ROOT>/dist/ayon_python_api-<VERSION>-py3-none-any
57
-
58
- If pip complain that `ayon-python-api` is already installed just uninstall existing one first:
59
-
60
- pip uninstall ayon-python-api
61
-
62
-
63
- ## TODOs
64
- - Find more suitable name of `ServerAPI` objects (right now is used `con` or `connection`)
65
- - Add all available CRUD operation on entities using REST
66
- - Add folder and task changes to operations
67
- - Enhance entity hub
68
- - Missing docstrings in EntityHub -> especially entity arguments are missing
69
- - Better order of arguments for entity classes
70
- - Move entity hub to first place
71
- - Skip those which are invalid for the entity and fake it for base or remove it from base
72
- - Entity hub should use operations session to do changes
73
- - Entity hub could also handle 'subset', 'version' and 'representation' entities
74
- - Missing 'statuses' on project
75
- - Missing 'status' on folders
76
- - Missing assignees on tasks
77
- - Pass docstrings and arguments definitions from `ServerAPI` methods to global functions
78
- - Split `ServerAPI` into smaller chunks (somehow), the class has 4k+ lines of code
79
- - Add .pyi stub for ServerAPI
80
- - Missing websockets connection
@@ -1,19 +0,0 @@
1
- [tool.poetry]
2
- name = "ayon_api"
3
- version = "0.2.2"
4
- description = "Python api for AYON server"
5
- authors = ["ynput.io <info@ynput.io>"]
6
-
7
- [tool.poetry.dependencies]
8
- python = ">=2.7,>=3.6.5"
9
- requests = "^2.28.1"
10
- six = "^1.15"
11
- Unidecode = "1.2.0" # Python 2 support
12
- appdirs = "^1.4"
13
-
14
- [tool.poetry.dev-dependencies]
15
- pytest = "^5.2"
16
-
17
- [build-system]
18
- requires = ["poetry-core>=1.0.0"]
19
- build-backend = "poetry.core.masonry.api"
File without changes