Skip to content

batch_parsing

Functions to parse folder names and versions from file names.

get_folder_entities_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
50
51
52
53
def get_folder_entities_from_filename(
    project_name,
    source_filename,
    version_regex,
    all_selected_folder_ids=None,
) -> tuple[list[dict[str, Any]], Optional[int]]:
    """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
    """
    folder_name = os.path.splitext(source_filename)[0]
    # Always first check if source filename is directly folder
    #   (eg. 'chair.mov')
    matching_folder_entities = list(ayon_api.get_folders(
        project_name,
        folder_ids=all_selected_folder_ids,
        folder_names=[folder_name]
    ))

    if matching_folder_entities:
        return matching_folder_entities, None

    # name contains also a version
    matching_folder_entities, version = parse_with_version(
        project_name,
        folder_name,
        version_regex,
        all_selected_folder_ids
    )

    if matching_folder_entities:
        return matching_folder_entities, version

    matching_folder_entities = parse_containing(
        project_name,
        folder_name,
        all_selected_folder_ids
    )

    return matching_folder_entities, None

parse_containing(project_name, folder_name, all_selected_folder_ids=None)

Return folder entities whose names are contained in the file name.

Source code in client/ayon_traypublisher/batch_parsing.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
def parse_containing(project_name, folder_name, all_selected_folder_ids=None):
    """Return folder entities whose names are contained in the file name."""
    folder_ids = set()
    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():
            folder_ids.add(folder_entity["id"])

    if not folder_ids:
        return []

    return list(ayon_api.get_folders(
        project_name,
        folder_ids=folder_ids,
    ))

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
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
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_entities = []
    version_number = None

    regex_result = version_regex.findall(folder_name)
    if regex_result:
        _folder_name, _version_number = regex_result[0]
        matching_folder_entities = list(
            ayon_api.get_folders(
                project_name,
                folder_ids=all_selected_folder_ids,
                folder_names=[_folder_name],
            )
        )
        if matching_folder_entities:
            version_number = int(_version_number)

    return matching_folder_entities, version_number