Skip to content

Commit a1b1b3b

Browse files
committed
Merge branch 'develop'
2 parents cd4c03f + 3457abe commit a1b1b3b

6 files changed

Lines changed: 804 additions & 58 deletions

File tree

ayon_api/__init__.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,31 @@
5959
get_addon_url,
6060
download_addon_private_file,
6161

62+
get_installers,
63+
create_installer,
64+
update_installer,
65+
delete_installer,
66+
download_installer,
67+
upload_installer,
68+
6269
get_dependencies_info,
6370
update_dependency_info,
71+
get_dependency_packages,
72+
create_dependency_package,
73+
update_dependency_package,
74+
delete_dependency_package,
6475

6576
download_dependency_package,
6677
upload_dependency_package,
67-
delete_dependency_package,
6878

79+
get_bundles,
80+
create_bundle,
81+
update_bundle,
82+
delete_bundle,
83+
84+
get_info,
85+
get_server_version,
86+
get_server_version_tuple,
6987
get_user,
7088
get_users,
7189

@@ -87,9 +105,11 @@
87105
get_addons_project_settings,
88106
get_addons_settings,
89107

108+
get_project_names,
90109
get_projects,
91110
get_project,
92111
create_project,
112+
update_project,
93113
delete_project,
94114

95115
get_folder_by_id,
@@ -218,13 +238,31 @@
218238
"get_addon_url",
219239
"download_addon_private_file",
220240

241+
"get_installers",
242+
"create_installer",
243+
"update_installer",
244+
"delete_installer",
245+
"download_installer",
246+
"upload_installer",
247+
221248
"get_dependencies_info",
222249
"update_dependency_info",
250+
"get_dependency_packages",
251+
"create_dependency_package",
252+
"update_dependency_package",
253+
"delete_dependency_package",
223254

224255
"download_dependency_package",
225256
"upload_dependency_package",
226-
"delete_dependency_package",
227257

258+
"get_bundles",
259+
"create_bundle",
260+
"update_bundle",
261+
"delete_bundle",
262+
263+
"get_info",
264+
"get_server_version",
265+
"get_server_version_tuple",
228266
"get_user",
229267
"get_users",
230268

@@ -245,9 +283,11 @@
245283
"get_addons_project_settings",
246284
"get_addons_settings",
247285

286+
"get_project_names",
248287
"get_projects",
249288
"get_project",
250289
"create_project",
290+
"update_project",
251291
"delete_project",
252292

253293
"get_folder_by_id",

ayon_api/_api.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,53 @@ def download_addon_private_file(*args, **kwargs):
531531
return con.download_addon_private_file(*args, **kwargs)
532532

533533

534+
def get_info(*args, **kwargs):
535+
con = get_server_api_connection()
536+
return con.get_info(*args, **kwargs)
537+
538+
539+
def get_server_version(*args, **kwargs):
540+
con = get_server_api_connection()
541+
return con.get_server_version(*args, **kwargs)
542+
543+
544+
def get_server_version_tuple(*args, **kwargs):
545+
con = get_server_api_connection()
546+
return con.get_server_version_tuple(*args, **kwargs)
547+
548+
549+
# Installers
550+
def get_installers(*args, **kwargs):
551+
con = get_server_api_connection()
552+
return con.get_installers(*args, **kwargs)
553+
554+
555+
def create_installer(*args, **kwargs):
556+
con = get_server_api_connection()
557+
return con.create_installer(*args, **kwargs)
558+
559+
560+
def update_installer(*args, **kwargs):
561+
con = get_server_api_connection()
562+
return con.update_installer(*args, **kwargs)
563+
564+
565+
def delete_installer(*args, **kwargs):
566+
con = get_server_api_connection()
567+
return con.delete_installer(*args, **kwargs)
568+
569+
570+
def download_installer(*args, **kwargs):
571+
con = get_server_api_connection()
572+
con.download_installer(*args, **kwargs)
573+
574+
575+
def upload_installer(*args, **kwargs):
576+
con = get_server_api_connection()
577+
con.upload_installer(*args, **kwargs)
578+
579+
580+
# Dependency packages
534581
def get_dependencies_info(*args, **kwargs):
535582
con = get_server_api_connection()
536583
return con.get_dependencies_info(*args, **kwargs)
@@ -551,6 +598,21 @@ def upload_dependency_package(*args, **kwargs):
551598
return con.upload_dependency_package(*args, **kwargs)
552599

553600

601+
def get_dependency_packages(*args, **kwargs):
602+
con = get_server_api_connection()
603+
return con.get_dependency_packages(*args, **kwargs)
604+
605+
606+
def create_dependency_package(*args, **kwargs):
607+
con = get_server_api_connection()
608+
return con.create_dependency_package(*args, **kwargs)
609+
610+
611+
def update_dependency_package(*args, **kwargs):
612+
con = get_server_api_connection()
613+
return con.update_dependency_package(*args, **kwargs)
614+
615+
554616
def delete_dependency_package(*args, **kwargs):
555617
con = get_server_api_connection()
556618
return con.delete_dependency_package(*args, **kwargs)
@@ -561,6 +623,26 @@ def get_project_anatomy_presets(*args, **kwargs):
561623
return con.get_project_anatomy_presets(*args, **kwargs)
562624

563625

626+
def get_bundles(*args, **kwargs):
627+
con = get_server_api_connection()
628+
return con.get_bundles(*args, **kwargs)
629+
630+
631+
def create_bundle(*args, **kwargs):
632+
con = get_server_api_connection()
633+
return con.create_bundle(*args, **kwargs)
634+
635+
636+
def update_bundle(*args, **kwargs):
637+
con = get_server_api_connection()
638+
return con.update_bundle(*args, **kwargs)
639+
640+
641+
def delete_bundle(*args, **kwargs):
642+
con = get_server_api_connection()
643+
return con.delete_bundle(*args, **kwargs)
644+
645+
564646
def get_project_anatomy_preset(*args, **kwargs):
565647
con = get_server_api_connection()
566648
return con.get_project_anatomy_preset(*args, **kwargs)
@@ -621,6 +703,11 @@ def get_addons_settings(*args, **kwargs):
621703
return con.get_addons_settings(*args, **kwargs)
622704

623705

706+
def get_project_names(*args, **kwargs):
707+
con = get_server_api_connection()
708+
return con.get_project_names(*args, **kwargs)
709+
710+
624711
def get_project(*args, **kwargs):
625712
con = get_server_api_connection()
626713
return con.get_project(*args, **kwargs)
@@ -801,6 +888,11 @@ def create_project(
801888
)
802889

803890

891+
def update_project(project_name, *args, **kwargs):
892+
con = get_server_api_connection()
893+
return con.update_project(project_name, *args, **kwargs)
894+
895+
804896
def delete_project(project_name):
805897
con = get_server_api_connection()
806898
return con.delete_project(project_name)

ayon_api/entity_hub.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,13 +683,92 @@ def _get_delete_body(self, entity):
683683
"entityId": entity.id
684684
}
685685

686+
def _pre_commit_types_changes(
687+
self, project_changes, orig_types, changes_key, post_changes
688+
):
689+
"""Compare changes of types on a project.
690+
691+
Compare old and new types. Change project changes content if some old
692+
types were removed. In that case the final change of types will
693+
happen when all other entities have changed.
694+
695+
Args:
696+
project_changes (dict[str, Any]): Project changes.
697+
orig_types (list[dict[str, Any]]): Original types.
698+
changes_key (Literal[folderTypes, taskTypes]): Key of type changes
699+
in project changes.
700+
post_changes (dict[str, Any]): An object where post changes will
701+
be stored.
702+
"""
703+
704+
if changes_key not in project_changes:
705+
return
706+
707+
new_types = project_changes[changes_key]
708+
709+
orig_types_by_name = {
710+
type_info["name"]: type_info
711+
for type_info in orig_types
712+
}
713+
new_names = {
714+
type_info["name"]
715+
for type_info in new_types
716+
}
717+
diff_names = set(orig_types_by_name) - new_names
718+
if not diff_names:
719+
return
720+
721+
# Create copy of folder type changes to post changes
722+
# - post changes will be commited at the end
723+
post_changes[changes_key] = copy.deepcopy(new_types)
724+
725+
for type_name in diff_names:
726+
new_types.append(orig_types_by_name[type_name])
727+
728+
def _pre_commit_project(self):
729+
"""Some project changes cannot be committed before hierarchy changes.
730+
731+
It is not possible to change folder types or task types if there are
732+
existing hierarchy items using the removed types. For that purposes
733+
is first committed union of all old and new types and post changes
734+
are prepared when all existing entities are changed.
735+
736+
Returns:
737+
dict[str, Any]: Changes that will be committed after hierarchy
738+
changes.
739+
"""
740+
741+
project_changes = self.project_entity.changes
742+
743+
post_changes = {}
744+
if not project_changes:
745+
return post_changes
746+
747+
self._pre_commit_types_changes(
748+
project_changes,
749+
self.project_entity.get_orig_folder_types(),
750+
"folderType",
751+
post_changes
752+
)
753+
self._pre_commit_types_changes(
754+
project_changes,
755+
self.project_entity.get_orig_task_types(),
756+
"taskType",
757+
post_changes
758+
)
759+
self._connection.update_project(self.project_name, **project_changes)
760+
return post_changes
761+
686762
def commit_changes(self):
687763
"""Commit any changes that happened on entities.
688764
689765
Todos:
690766
Use Operations Session instead of known operations body.
691767
"""
692768

769+
post_project_changes = self._pre_commit_project()
770+
self.project_entity.lock()
771+
693772
project_changes = self.project_entity.changes
694773
if project_changes:
695774
response = self._connection.patch(
@@ -760,6 +839,9 @@ def commit_changes(self):
760839
self._connection.send_batch_operations(
761840
self.project_name, operations_body
762841
)
842+
if post_project_changes:
843+
self._connection.update_project(
844+
self.project_name, **post_project_changes)
763845

764846
self.lock()
765847

@@ -1463,6 +1545,9 @@ def set_parent(self, parent):
14631545

14641546
parent = property(get_parent, set_parent)
14651547

1548+
def get_orig_folder_types(self):
1549+
return copy.deepcopy(self._orig_folder_types)
1550+
14661551
def get_folder_types(self):
14671552
return copy.deepcopy(self._folder_types)
14681553

@@ -1474,6 +1559,9 @@ def set_folder_types(self, folder_types):
14741559
new_folder_types.append(folder_type)
14751560
self._folder_types = new_folder_types
14761561

1562+
def get_orig_task_types(self):
1563+
return copy.deepcopy(self._orig_task_types)
1564+
14771565
def get_task_types(self):
14781566
return copy.deepcopy(self._task_types)
14791567

0 commit comments

Comments
 (0)