From 22a2a433c15477d7ff625097c3374002c1233d04 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 31 Dec 2021 12:42:01 +0100 Subject: [PATCH] created function to create extra folders in workdir --- openpype/lib/__init__.py | 4 ++- openpype/lib/path_tools.py | 53 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/openpype/lib/__init__.py b/openpype/lib/__init__.py index c99e3bc28d..0b8a4dfa15 100644 --- a/openpype/lib/__init__.py +++ b/openpype/lib/__init__.py @@ -148,7 +148,8 @@ from .path_tools import ( get_version_from_path, get_last_version_from_path, create_project_folders, - get_project_basic_paths + create_workdir_extra_folders, + get_project_basic_paths, ) from .editorial import ( @@ -290,6 +291,7 @@ __all__ = [ "frames_to_timecode", "make_sequence_collection", "create_project_folders", + "create_workdir_extra_folders", "get_project_basic_paths", "get_openpype_version", diff --git a/openpype/lib/path_tools.py b/openpype/lib/path_tools.py index ea6258f9f9..12e9e2db9c 100644 --- a/openpype/lib/path_tools.py +++ b/openpype/lib/path_tools.py @@ -9,6 +9,7 @@ from openpype.settings import get_project_settings from openpype.settings.lib import get_site_local_overrides from .anatomy import Anatomy +from .profiles_filtering import filter_profiles log = logging.getLogger(__name__) @@ -201,6 +202,58 @@ def get_project_basic_paths(project_name): return _list_path_items(folder_structure) +def create_workdir_extra_folders( + workdir, host_name, task_type, task_name, project_name, + project_settings=None +): + """Create extra folders in work directory based on context. + + Args: + workdir (str): Path to workdir where workfiles is stored. + host_name (str): Name of host implementation. + task_type (str): Type of task for which extra folders should be + created. + task_name (str): Name of task for which extra folders should be + created. + project_name (str): Name of project on which task is. + project_settings (dict): Prepared project settings. Are loaded if not + passed. + """ + # Load project settings if not set + if not project_settings: + project_settings = get_project_settings(project_name) + + # Load extra folders profiles + extra_folders_profiles = ( + project_settings["global"]["tools"]["Workfiles"]["extra_folders"] + ) + # Skip if are empty + if not extra_folders_profiles: + return + + # Prepare profiles filters + filter_data = { + "task_types": task_type, + "task_names": task_name, + "hosts": host_name + } + profile = filter_profiles(extra_folders_profiles, filter_data) + if profile is None: + return + + for subfolder in profile["folders"]: + # Make sure backslashes are converted to forwards slashes + # and does not start with slash + subfolder = subfolder.replace("\\", "/").lstrip("/") + # Skip empty strings + if not subfolder: + continue + + fullpath = os.path.join(workdir, subfolder) + if not os.path.exists(fullpath): + os.makedirs(fullpath) + + @six.add_metaclass(abc.ABCMeta) class HostDirmap: """