From 0daf9ec5046f944d7e83b7f8781fa9973504802e Mon Sep 17 00:00:00 2001 From: Tomas Poveda Date: Thu, 13 Aug 2020 22:46:38 +0200 Subject: [PATCH] Now folders creation works in both Artella Indie and Artella Enterprise --- .../artellamanager/core/artellamanager.py | 11 ++-- .../widgets/artellamanagertool.py | 4 +- .../widgets/artellamanagerwidget.py | 4 +- .../tools/artellamanager/widgets/workers.py | 66 +++++++++++++++++-- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/artellapipe/tools/artellamanager/core/artellamanager.py b/artellapipe/tools/artellamanager/core/artellamanager.py index 987d154..524c834 100644 --- a/artellapipe/tools/artellamanager/core/artellamanager.py +++ b/artellapipe/tools/artellamanager/core/artellamanager.py @@ -12,22 +12,19 @@ __maintainer__ = "Tomas Poveda" __email__ = "tpovedatd@gmail.com" -import artellapipe +from artellapipe.core import tool # Defines ID of the tool TOOL_ID = 'artellapipe-tools-artellamanager' -# We skip the reloading of this module when launching the tool -no_reload = True - -class ArtellapipeManagerTool(artellapipe.Tool, object): +class ArtellapipeManagerTool(tool.ArtellaTool, object): def __init__(self, *args, **kwargs): super(ArtellapipeManagerTool, self).__init__(*args, **kwargs) @classmethod def config_dict(cls, file_name=None): - base_tool_config = artellapipe.Tool.config_dict(file_name=file_name) + base_tool_config = tool.ArtellaTool.config_dict(file_name=file_name) tool_config = { 'name': 'Artella Manager', 'id': 'artellapipe-tools-artellamanager', @@ -52,7 +49,7 @@ def config_dict(cls, file_name=None): return base_tool_config -class ArtellapipeManagerToolset(artellapipe.Toolset, object): +class ArtellapipeManagerToolset(tool.ArtellaToolset, object): ID = TOOL_ID def __init__(self, *args, **kwargs): diff --git a/artellapipe/tools/artellamanager/widgets/artellamanagertool.py b/artellapipe/tools/artellamanager/widgets/artellamanagertool.py index ef6db8e..c42bd89 100644 --- a/artellapipe/tools/artellamanager/widgets/artellamanagertool.py +++ b/artellapipe/tools/artellamanager/widgets/artellamanagertool.py @@ -12,11 +12,11 @@ __maintainer__ = "Tomas Poveda" __email__ = "tpovedatd@gmail.com" -import artellapipe +from artellapipe.core import tool from artellapipe.tools.artellamanager.widgets import artellamanagerwidget -class ArtellaManager(artellapipe.ToolWidget, object): +class ArtellaManager(tool.ArtellaToolWidget, object): def __init__(self, project, config, settings, parent): super(ArtellaManager, self).__init__(project=project, config=config, settings=settings, parent=parent) diff --git a/artellapipe/tools/artellamanager/widgets/artellamanagerwidget.py b/artellapipe/tools/artellamanager/widgets/artellamanagerwidget.py index a1c8148..4c3c9f4 100644 --- a/artellapipe/tools/artellamanager/widgets/artellamanagerwidget.py +++ b/artellapipe/tools/artellamanager/widgets/artellamanagerwidget.py @@ -49,7 +49,7 @@ def __init__(self, project, parent=None): self._artella_timer.setInterval(6000) self._artella_timer.timeout.connect(self._on_update_metadata) - self.METADATA = artellalib.get_metadata() + self.METADATA = artellalib.artella.get_metadata() self._on_artella_checked(bool(self.METADATA)) def get_main_layout(self): @@ -363,7 +363,7 @@ def _on_get_folder_status(self, status, path): text='Impossible to retrieve data from Artella. Maybe Artella is down.', duration=5, parent=self) - self.METADATA = artellalib.get_metadata() + self.METADATA = artellalib.artella.get_metadata() if not self.METADATA: self._artella_not_available() return diff --git a/artellapipe/tools/artellamanager/widgets/workers.py b/artellapipe/tools/artellamanager/widgets/workers.py index f59a621..20886d3 100644 --- a/artellapipe/tools/artellamanager/widgets/workers.py +++ b/artellapipe/tools/artellamanager/widgets/workers.py @@ -31,7 +31,61 @@ def __init__(self, path, project): def run(self): folders_found = list() - status = artellalib.get_status(self._path) + + if not self._project: + self.signals.dirsUpdated.emit(folders_found) + return + + folders_found = self._run_enterprise() if self._project.is_enterprise() else self._run_indie() + + return folders_found + + def _run_enterprise(self): + """ + Internal function that downloads available folders in given path for Artella Indie + :param status: dict + """ + + status = artellalib.artella.get_status(self._path, include_remote=True) + + folders_found = list() + if not status: + return folders_found + + for handle, status_data in status.items(): + if 'local_info' not in status_data: + continue + local_info = status_data.get('local_info', dict()) + remote_info = status_data.get('remote_info', dict()) + + signature = local_info.get('signature', '') + folder_path = local_info.get('path', '') + if not signature or not folder_path: + name = remote_info.get('name', '') + signature = remote_info.get('signature', '') + folder_path = os.path.join(self._path, name) + + if (not signature or signature != 'folder') or not folder_path: + continue + if os.path.normpath(self._path) == os.path.normpath(folder_path): + continue + + folders_found.append(folder_path) + + self.signals.dirsUpdated.emit(folders_found) + + return folders_found + + def _run_indie(self): + """ + Internal function that downloads available folders in given path for Artella Indie + :param status: artellaclasses + """ + + status = artellalib.artella.get_status(self._path) + + folders_found = list() + is_asset = False if isinstance(status, artellaclasses.ArtellaDirectoryMetaData): for ref_name, ref_data in status.references.items(): @@ -43,7 +97,7 @@ def run(self): elif isinstance(status, artellaclasses.ArtellaAssetMetaData): working_folder = self._project.get_working_folder() working_path = os.path.join(status.path, working_folder) - artella_data = artellalib.get_status(working_path) + artella_data = artellalib.artella.get_status(working_path) if isinstance(artella_data, artellaclasses.ArtellaDirectoryMetaData): folders_found.append(working_path) is_asset = True @@ -61,6 +115,8 @@ def run(self): published_folders_found.append(version_path) self.signals.publishedDirsUpdated.emit(published_folders_found) + return folders_found + class GetArtellaFolderStatusWorkerSignals(QObject, object): statusRetrieved = Signal(object, str) @@ -76,7 +132,7 @@ def run(self): if not self._path: return - status = artellalib.get_status(self._path) + status = artellalib.artella.get_status(self._path) self.signals.statusRetrieved.emit(status, self._path) @@ -112,7 +168,7 @@ def run(self): if self._abort: self.signals.progressAbort.emit() return - status = artellalib.get_status(path) + status = artellalib.artella.get_status(path) self.signals.progressTick.emit(i, path, status) self.signals.progressDone.emit() @@ -129,7 +185,7 @@ def __init__(self): self.signals = ArtellaCheckWorkerSignals() def run(self): - metadata = artellalib.get_metadata() + metadata = artellalib.artella.get_metadata() if metadata is not None: self.signals.artellaAvailable.emit(True) else: