Skip to content

batch_parsing

Functions to parse asset names, versions from file names

get_folder_by_name_case_not_sensitive(project_name, folder_name, all_selected_folder_ids=None, log=None)

Handle more cases in file names

Source code in client/ayon_traypublisher/batch_parsing.py
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
def get_folder_by_name_case_not_sensitive(
    project_name,
    folder_name,
    all_selected_folder_ids=None,
    log=None
):
    """Handle more cases in file names"""
    if not log:
        log = Logger.get_logger(__name__)
    folder_name = re.compile(folder_name, re.IGNORECASE)

    folder_entities = list(ayon_api.get_folders(
        project_name,
        folder_ids=all_selected_folder_ids,
        folder_names=[folder_name]
    ))

    if len(folder_entities) > 1:
        log.warning("Too many records found for {}".format(
            folder_name))
        return None

    if folder_entities:
        return folder_entities.pop()

get_folder_entity_from_filename(project_name, source_filename, version_regex, all_selected_folder_ids=None)

Try to parse out folder name from file name provided.

Artists might provide various file name formats. Currently handled: - chair.mov - chair_v001.mov - my_chair_to_upload.mov

Source code in client/ayon_traypublisher/batch_parsing.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def get_folder_entity_from_filename(
    project_name,
    source_filename,
    version_regex,
    all_selected_folder_ids=None
):
    """Try to parse out folder name from file name provided.

    Artists might provide various file name formats.
    Currently handled:
        - chair.mov
        - chair_v001.mov
        - my_chair_to_upload.mov
    """
    version = None
    folder_name = os.path.splitext(source_filename)[0]
    # Always first check if source filename is directly folder
    #   (eg. 'chair.mov')
    matching_folder_entity = get_folder_by_name_case_not_sensitive(
        project_name, folder_name, all_selected_folder_ids)

    if matching_folder_entity is None:
        # name contains also a version
        matching_folder_entity, version = (
            parse_with_version(
                project_name,
                folder_name,
                version_regex,
                all_selected_folder_ids
            )
        )

    if matching_folder_entity is None:
        matching_folder_entity = parse_containing(
            project_name,
            folder_name,
            all_selected_folder_ids
        )

    return matching_folder_entity, version

parse_containing(project_name, folder_name, all_selected_folder_ids=None)

Look if file name contains any existing folder name

Source code in client/ayon_traypublisher/batch_parsing.py
85
86
87
88
89
90
91
92
93
94
95
96
def parse_containing(project_name, folder_name, all_selected_folder_ids=None):
    """Look if file name contains any existing folder name"""
    for folder_entity in ayon_api.get_folders(
        project_name,
        folder_ids=all_selected_folder_ids,
        fields={"id", "name"}
    ):
        if folder_entity["name"].lower() in folder_name.lower():
            return ayon_api.get_folder_by_id(
                project_name,
                folder_entity["id"]
            )

parse_with_version(project_name, folder_name, version_regex, all_selected_folder_ids=None, log=None)

Try to parse folder name from a file name containing version too

Eg. 'chair_v001.mov' >> 'chair', 1

Source code in client/ayon_traypublisher/batch_parsing.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def parse_with_version(
    project_name,
    folder_name,
    version_regex,
    all_selected_folder_ids=None,
    log=None
):
    """Try to parse folder name from a file name containing version too

    Eg. 'chair_v001.mov' >> 'chair', 1
    """
    if not log:
        log = Logger.get_logger(__name__)
    log.debug(
        ("Folder entity by \"{}\" was not found, trying version regex.".
         format(folder_name)))

    matching_folder_entity = version_number = None

    regex_result = version_regex.findall(folder_name)
    if regex_result:
        _folder_name, _version_number = regex_result[0]
        matching_folder_entity = get_folder_by_name_case_not_sensitive(
            project_name,
            _folder_name,
            all_selected_folder_ids=all_selected_folder_ids
        )
        if matching_folder_entity:
            version_number = int(_version_number)

    return matching_folder_entity, version_number