ayon-python-api 1.2.13.dev0__py3-none-any.whl → 1.2.14.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -132,6 +132,11 @@ class BaseServerAPI:
132
132
  ) -> Optional[dict[str, Any]]:
133
133
  raise NotImplementedError()
134
134
 
135
+ def get_attributes_for_type(
136
+ self, entity_type: AttributeScope
137
+ ) -> set[str]:
138
+ raise NotImplementedError()
139
+
135
140
  def get_attributes_fields_for_type(
136
141
  self, entity_type: AttributeScope
137
142
  ) -> set[str]:
@@ -162,6 +162,9 @@ class ProjectsAPI(BaseServerAPI):
162
162
  if response.status != 200:
163
163
  return None
164
164
  project = response.data
165
+ attrib = project["attrib"]
166
+ for attr_name in self.get_attributes_for_type("project"):
167
+ attrib.setdefault(attr_name, None)
165
168
  self._fill_project_entity_data(project)
166
169
  return project
167
170
 
@@ -291,16 +294,14 @@ class ProjectsAPI(BaseServerAPI):
291
294
  return
292
295
  projects_by_name = {p["name"]: p for p in projects}
293
296
 
294
- for project in self.get_rest_projects(active, library):
297
+ for project in self.get_rest_projects(active=active, library=library):
298
+ if own_attributes:
299
+ fill_own_attribs(project)
300
+
295
301
  name = project["name"]
296
- graphql_p = projects_by_name.get(name)
297
- if graphql_p:
298
- for key in (
299
- "productTypes",
300
- "usedTags",
301
- ):
302
- if key in graphql_p:
303
- project[key] = graphql_p[key]
302
+ graphql_project = projects_by_name.get(name)
303
+ self._merge_project_graphql_data(project, graphql_project)
304
+
304
305
  yield project
305
306
 
306
307
  def get_project(
@@ -332,6 +333,7 @@ class ProjectsAPI(BaseServerAPI):
332
333
  graphql_project = next(self._get_graphql_projects(
333
334
  None,
334
335
  None,
336
+ project_name=project_name,
335
337
  fields=graphql_fields,
336
338
  own_attributes=own_attributes,
337
339
  ), None)
@@ -341,13 +343,9 @@ class ProjectsAPI(BaseServerAPI):
341
343
  project = self.get_rest_project(project_name)
342
344
  if own_attributes:
343
345
  fill_own_attribs(project)
344
- if graphql_project:
345
- for key in (
346
- "productTypes",
347
- "usedTags",
348
- ):
349
- if key in graphql_project:
350
- project[key] = graphql_project[key]
346
+
347
+ self._merge_project_graphql_data(project, graphql_project)
348
+
351
349
  return project
352
350
 
353
351
  def create_project(
@@ -817,6 +815,25 @@ class ProjectsAPI(BaseServerAPI):
817
815
  self._fill_project_entity_data(project)
818
816
  yield project
819
817
 
818
+ def _merge_project_graphql_data(
819
+ self,
820
+ rest_project: dict[str, Any],
821
+ graphql_project: Optional[dict[str, Any]],
822
+ ) -> None:
823
+ if not graphql_project:
824
+ return
825
+
826
+ for key, value in graphql_project.items():
827
+ if (
828
+ key not in rest_project
829
+ or key in (
830
+ "productBaseTypes",
831
+ "productTypes",
832
+ "usedTags",
833
+ )
834
+ ):
835
+ rest_project[key] = value
836
+
820
837
  def _get_project_roots_values(
821
838
  self,
822
839
  project_name: str,
ayon_api/server_api.py CHANGED
@@ -1228,6 +1228,20 @@ class ServerAPI(
1228
1228
  for retry_idx in reversed(range(max_retries)):
1229
1229
  try:
1230
1230
  response = function(url, **kwargs)
1231
+
1232
+ # Usually these mean, try later.
1233
+ # 502: returned by the proxy: nginx
1234
+ # 503: returned by the server: if no capacity
1235
+ if response.status_code in {502, 503}:
1236
+ new_response = RestApiResponse(response)
1237
+ self.log.warning(
1238
+ "Server returned %s status code."
1239
+ " Retrying with longer delay...",
1240
+ response.status_code
1241
+ )
1242
+ if retry_idx != 0:
1243
+ time.sleep(2)
1244
+ continue
1231
1245
  break
1232
1246
 
1233
1247
  except ConnectionRefusedError:
@@ -1269,7 +1283,8 @@ class ServerAPI(
1269
1283
  }
1270
1284
  )
1271
1285
 
1272
- time.sleep(0.1)
1286
+ if retry_idx != 0:
1287
+ time.sleep(0.1)
1273
1288
 
1274
1289
  if new_response is not None:
1275
1290
  return new_response
@@ -1419,7 +1434,7 @@ class ServerAPI(
1419
1434
  requests.exceptions.Timeout,
1420
1435
  requests.exceptions.ConnectionError,
1421
1436
  ):
1422
- if attempt == retries:
1437
+ if attempt == retries - 1:
1423
1438
  raise
1424
1439
  progress.next_attempt()
1425
1440
 
@@ -1838,7 +1853,7 @@ class ServerAPI(
1838
1853
  requests.exceptions.Timeout,
1839
1854
  requests.exceptions.ConnectionError,
1840
1855
  ):
1841
- if attempt == retries:
1856
+ if attempt == retries - 1:
1842
1857
  raise
1843
1858
  progress.next_attempt()
1844
1859
  progress.reset_transferred()
ayon_api/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  """Package declaring Python API for AYON server."""
2
- __version__ = "1.2.13-dev"
2
+ __version__ = "1.2.14-dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ayon_python_api
3
- Version: 1.2.13.dev0
3
+ Version: 1.2.14.dev0
4
4
  Summary: AYON Python API
5
5
  Home-page: https://github.com/ynput/ayon-python-api
6
6
  Author: ynput.io
@@ -7,15 +7,15 @@ ayon_api/exceptions.py,sha256=FOOSgShGEqno6U3kxSOdALkWuIhfhuYzSup0TjwkgkM,3495
7
7
  ayon_api/graphql.py,sha256=PgsdNVAwZymEOoFqUuTtnswv8bjtV0IIfBij2R9WKPU,29749
8
8
  ayon_api/graphql_queries.py,sha256=ro75ILIz47TEHKgCraUaQiLzy1q5ijUpP2E27jhRWFc,28253
9
9
  ayon_api/operations.py,sha256=BL9r5V8wXqHx63FhQOUpayceuMd0A5B-vJIb5TcKynQ,55501
10
- ayon_api/server_api.py,sha256=w_n01YUR2LR822Hm8lOQXEA58CbyM9e7fploQgPzhuw,79447
10
+ ayon_api/server_api.py,sha256=5h_y3TEILyoX-9cR44MpZimb75I8ZeutHhFifAUhxxY,80097
11
11
  ayon_api/typing.py,sha256=aawFfY4pJ3Vuh-N4GHpAForH1y8K5xffuSdHBhUOTPM,11997
12
12
  ayon_api/utils.py,sha256=QVWtS-29dRFJ6SKSc5GZce9iRHod2AWPC9SfJ40iIOI,32972
13
- ayon_api/version.py,sha256=PJEITRxr4ePjtmsUccPR1aLUq17-Nn-oyhaweQVW4UA,79
13
+ ayon_api/version.py,sha256=-Am2rynZn8snPA7l06TGSRpTIgaRbgbFL31Xis_dt6c,79
14
14
  ayon_api/_api_helpers/__init__.py,sha256=15wxNshWe1htzZhFnwTTflBfQ3tYJzTe6-0hrEUCQbw,1076
15
15
  ayon_api/_api_helpers/actions.py,sha256=OBRAEJSVnhGP0xf8ktQL3M7Ubz64nDmn957qZehaRQ0,10578
16
16
  ayon_api/_api_helpers/activities.py,sha256=0iknRHukYsVf0M6KRChBs3EsQH8bgg-yzhAx-1VivYs,10445
17
17
  ayon_api/_api_helpers/attributes.py,sha256=bdC6KzoszFZmwBGmbwcGdG5jZDmGHW9wQ0z-ffCvn1w,4674
18
- ayon_api/_api_helpers/base.py,sha256=bm1hWBswfwisOxqWpaEC_ttDi_leXP9E7zNuIvVMyFo,4361
18
+ ayon_api/_api_helpers/base.py,sha256=COGf9b8EtJbtPal17Hkgohdc4xzQ1wUBcjww87h07Gc,4492
19
19
  ayon_api/_api_helpers/bundles_addons.py,sha256=_AvquS0GZuUiGbCapRYu3vb_5Pp835HlbNfg9ipD3VU,31087
20
20
  ayon_api/_api_helpers/dependency_packages.py,sha256=nghndRoxwLCo1j9EvBtYRQYBHGoGljuUOGFpYGI7PwE,8211
21
21
  ayon_api/_api_helpers/events.py,sha256=vCH5L4whFlx44nH0bRWuZhyy7F4Uw1uTpcCkDMKTYwk,16572
@@ -24,15 +24,15 @@ ayon_api/_api_helpers/installers.py,sha256=Q45sg6rfKUht6g4bSPHHYFj8mDo_EAm9ahg9Z
24
24
  ayon_api/_api_helpers/links.py,sha256=ylbk7J3fzGstKI3sWdrpYHbodBuxcBhHvMe2r3AFO8E,22186
25
25
  ayon_api/_api_helpers/lists.py,sha256=W1YHFVByPF9jzrJWQ3Dy4Cmvf5-YHS2zkZjgaGcsXBo,15109
26
26
  ayon_api/_api_helpers/products.py,sha256=fX9Ez_2RGRhDmZU02ucULZzfe8FGZAOFK7Qze1BTI1c,18521
27
- ayon_api/_api_helpers/projects.py,sha256=t1rD5cUTR6csAHkzO-n-YPUG9xC_bcoB7U5-cdAX98Y,28804
27
+ ayon_api/_api_helpers/projects.py,sha256=CI-M5KKmAbqrcSqpGsawGQ7JAQjUioNFT2a3O3aeQGw,29294
28
28
  ayon_api/_api_helpers/representations.py,sha256=BU0Oq_JOh6F6zIoiEtTGhRoHdr9WwMXMiaDDs-Oc7Yg,27736
29
29
  ayon_api/_api_helpers/secrets.py,sha256=L74qN38Bp22tDs9CQHWdgw3gsJm7GbnHKU75mCaWuj8,1955
30
30
  ayon_api/_api_helpers/tasks.py,sha256=1bqGOFbbtM_RSHWIirzj1201MsJfe1WAD2zZkVW9UTg,18770
31
31
  ayon_api/_api_helpers/thumbnails.py,sha256=2mQWU4cSY98J18ImYYt_5CRpm7DyOCO2wCmcLXwtdhk,12281
32
32
  ayon_api/_api_helpers/versions.py,sha256=c9ebZdM9i3J24B4bs2BRRoH937JWvRTWlJ3cFRscdug,22413
33
33
  ayon_api/_api_helpers/workfiles.py,sha256=8ksjCZ5xn7nEAKX792PeIwFNF5flslQwzbcHnJZwcu8,17679
34
- ayon_python_api-1.2.13.dev0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
- ayon_python_api-1.2.13.dev0.dist-info/METADATA,sha256=azgodGr-b5gK2gpqcA-17N131ZT7dWrz191I93FNHAs,16271
36
- ayon_python_api-1.2.13.dev0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
37
- ayon_python_api-1.2.13.dev0.dist-info/top_level.txt,sha256=PKrQbX5Cz53_UmSTR_nIySnBkGyHcBTS88SCw9tuVlc,9
38
- ayon_python_api-1.2.13.dev0.dist-info/RECORD,,
34
+ ayon_python_api-1.2.14.dev0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
+ ayon_python_api-1.2.14.dev0.dist-info/METADATA,sha256=zUXjVmEKICkcWk8hMvVRE_rE7chvaXf5NED8lpU_6Xc,16271
36
+ ayon_python_api-1.2.14.dev0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
37
+ ayon_python_api-1.2.14.dev0.dist-info/top_level.txt,sha256=PKrQbX5Cz53_UmSTR_nIySnBkGyHcBTS88SCw9tuVlc,9
38
+ ayon_python_api-1.2.14.dev0.dist-info/RECORD,,