mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
implemented helper function to prepare initial context data
This commit is contained in:
parent
f86874df3d
commit
28bcbc8053
1 changed files with 84 additions and 52 deletions
|
|
@ -277,52 +277,15 @@ class ContextDialogController:
|
|||
def is_initial_context_valid(self):
|
||||
return self._initial_folder_found and self._initial_project_found
|
||||
|
||||
def set_initial_context(
|
||||
self, project_name=None, asset_name=None, folder_path=None
|
||||
):
|
||||
if project_name is None:
|
||||
project_found = True
|
||||
asset_name = None
|
||||
folder_path = None
|
||||
|
||||
else:
|
||||
project = ayon_api.get_project(project_name)
|
||||
project_found = project is not None
|
||||
|
||||
folder_id = None
|
||||
folder_found = True
|
||||
folder_label = None
|
||||
if folder_path:
|
||||
folder_label = folder_path
|
||||
folder = ayon_api.get_folder_by_path(project_name, folder_path)
|
||||
if folder:
|
||||
folder_id = folder["id"]
|
||||
else:
|
||||
folder_found = False
|
||||
elif asset_name:
|
||||
folder_label = asset_name
|
||||
for folder in ayon_api.get_folders(
|
||||
project_name, folder_names=[asset_name]
|
||||
):
|
||||
folder_id = folder["id"]
|
||||
break
|
||||
if not folder_id:
|
||||
folder_found = False
|
||||
|
||||
tasks_found = True
|
||||
if folder_found and (folder_path or asset_name):
|
||||
tasks = list(ayon_api.get_tasks(
|
||||
project_name, folder_ids=[folder_id], fields=["id"]
|
||||
))
|
||||
if not tasks:
|
||||
tasks_found = False
|
||||
def set_initial_context(self, project_name=None, asset_name=None):
|
||||
result = self._prepare_initial_context(project_name, asset_name)
|
||||
|
||||
self._initial_project_name = project_name
|
||||
self._initial_folder_id = folder_id
|
||||
self._initial_folder_label = folder_label
|
||||
self._initial_folder_found = project_found
|
||||
self._initial_folder_found = folder_found
|
||||
self._initial_tasks_found = tasks_found
|
||||
self._initial_folder_id = result["folder_id"]
|
||||
self._initial_folder_label = result["folder_label"]
|
||||
self._initial_project_found = result["project_found"]
|
||||
self._initial_folder_found = result["folder_found"]
|
||||
self._initial_tasks_found = result["tasks_found"]
|
||||
self._emit_event(
|
||||
"initial.context.changed",
|
||||
self.get_initial_context()
|
||||
|
|
@ -345,15 +308,36 @@ class ContextDialogController:
|
|||
|
||||
# Result of this tool
|
||||
def get_selected_context(self):
|
||||
project_name = None
|
||||
folder_id = None
|
||||
task_id = None
|
||||
task_name = None
|
||||
folder_path = None
|
||||
folder_name = None
|
||||
if self._confirmed:
|
||||
project_name = self.get_selected_project_name()
|
||||
folder_id = self.get_selected_folder_id()
|
||||
task_id = self.get_selected_task_id()
|
||||
task_name = self.get_selected_task_name()
|
||||
|
||||
folder_item = None
|
||||
if folder_id:
|
||||
folder_item = self._hierarchy_model.get_folder_item(
|
||||
project_name, folder_id)
|
||||
|
||||
if folder_item:
|
||||
folder_path = folder_item.path
|
||||
folder_name = folder_item.name
|
||||
return {
|
||||
"project": None,
|
||||
"project_name": None,
|
||||
"asset": None,
|
||||
"folder_id": None,
|
||||
"folder_path": None,
|
||||
"task": None,
|
||||
"task_id": None,
|
||||
"task_name": None,
|
||||
"project": project_name,
|
||||
"project_name": project_name,
|
||||
"asset": folder_name,
|
||||
"folder_id": folder_id,
|
||||
"folder_path": folder_path,
|
||||
"task": task_name,
|
||||
"task_name": task_name,
|
||||
"task_id": task_id,
|
||||
"initial_context_valid": self.is_initial_context_valid(),
|
||||
}
|
||||
|
||||
def confirm_selection(self):
|
||||
|
|
@ -368,6 +352,54 @@ class ContextDialogController:
|
|||
with open(self._output_path, "w") as stream:
|
||||
json.dump(self.get_selected_context(), stream, indent=4)
|
||||
|
||||
def _prepare_initial_context(self, project_name, asset_name):
|
||||
project_found = True
|
||||
output = {
|
||||
"project_found": project_found,
|
||||
"folder_id": None,
|
||||
"folder_label": None,
|
||||
"folder_found": True,
|
||||
"tasks_found": True,
|
||||
}
|
||||
if project_name is None:
|
||||
asset_name = None
|
||||
else:
|
||||
project = ayon_api.get_project(project_name)
|
||||
project_found = project is not None
|
||||
output["project_found"] = project_found
|
||||
if not project_found or not asset_name:
|
||||
return output
|
||||
|
||||
output["folder_label"] = asset_name
|
||||
|
||||
folder_id = None
|
||||
folder_found = False
|
||||
# First try to find by path
|
||||
folder = ayon_api.get_folder_by_path(project_name, asset_name)
|
||||
# Try to find by name if folder was not found by path
|
||||
# - prevent to query by name if 'asset_name' contains '/'
|
||||
if not folder and "/" not in asset_name:
|
||||
folder = next(
|
||||
ayon_api.get_folders(
|
||||
project_name, folder_names=[asset_name], fields=["id"]),
|
||||
None
|
||||
)
|
||||
|
||||
if folder:
|
||||
folder_id = folder["id"]
|
||||
folder_found = True
|
||||
|
||||
output["folder_id"] = folder_id
|
||||
output["folder_found"] = folder_found
|
||||
if not folder_found:
|
||||
return output
|
||||
|
||||
tasks = list(ayon_api.get_tasks(
|
||||
project_name, folder_ids=[folder_id], fields=["id"]
|
||||
))
|
||||
output["tasks_found"] = bool(tasks)
|
||||
return output
|
||||
|
||||
def _get_event_system(self):
|
||||
"""Inner event system for workfiles tool controller.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue