Skip to content

Commit f54096a

Browse files
authored
Merge pull request #1169 from BigRoy/enhancement/project_root_folders_support_list_of_str_for_leaf_folders
Create Project Folder Structure: support list of str for leaf folders
2 parents 7c4fb2d + 618539c commit f54096a

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

client/ayon_core/pipeline/project_folders.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from __future__ import annotations
12
import os
23
import re
34
import json
5+
from typing import Any, Union
46

57
from ayon_core.settings import get_project_settings
68
from ayon_core.lib import Logger
@@ -9,7 +11,7 @@
911
from .template_data import get_project_template_data
1012

1113

12-
def concatenate_splitted_paths(split_paths, anatomy):
14+
def concatenate_splitted_paths(split_paths, anatomy: Anatomy):
1315
log = Logger.get_logger("concatenate_splitted_paths")
1416
pattern_array = re.compile(r"\[.*\]")
1517
output = []
@@ -47,7 +49,7 @@ def concatenate_splitted_paths(split_paths, anatomy):
4749
return output
4850

4951

50-
def fill_paths(path_list, anatomy):
52+
def fill_paths(path_list: list[str], anatomy: Anatomy):
5153
format_data = get_project_template_data(project_name=anatomy.project_name)
5254
format_data["root"] = anatomy.roots
5355
filled_paths = []
@@ -59,7 +61,7 @@ def fill_paths(path_list, anatomy):
5961
return filled_paths
6062

6163

62-
def create_project_folders(project_name, basic_paths=None):
64+
def create_project_folders(project_name: str, basic_paths=None):
6365
log = Logger.get_logger("create_project_folders")
6466
anatomy = Anatomy(project_name)
6567
if basic_paths is None:
@@ -80,8 +82,19 @@ def create_project_folders(project_name, basic_paths=None):
8082
os.makedirs(path)
8183

8284

83-
def _list_path_items(folder_structure):
85+
def _list_path_items(
86+
folder_structure: Union[dict[str, Any], list[str]]):
8487
output = []
88+
89+
# Allow leaf folders of the `project_folder_structure` to use a list of
90+
# strings instead of a dictionary of keys with empty values.
91+
if isinstance(folder_structure, list):
92+
if not all(isinstance(item, str) for item in folder_structure):
93+
raise ValueError(
94+
f"List items must all be strings. Got: {folder_structure}")
95+
return [[path] for path in folder_structure]
96+
97+
# Process key, value as key for folder names and value its subfolders
8598
for key, value in folder_structure.items():
8699
if not value:
87100
output.append(key)
@@ -99,7 +112,7 @@ def _list_path_items(folder_structure):
99112
return output
100113

101114

102-
def get_project_basic_paths(project_name):
115+
def get_project_basic_paths(project_name: str):
103116
project_settings = get_project_settings(project_name)
104117
folder_structure = (
105118
project_settings["core"]["project_folder_structure"]

0 commit comments

Comments
 (0)