Skip to content

batch_parsing

Functions to parse asset names, versions from file names

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
 9
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_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 = list(ayon_api.get_folders(
        project_name,
        folder_ids=all_selected_folder_ids,
        folder_names=[folder_name]
    ))

    if not matching_folder_entity:
        # name contains also a version
        matching_folder_entity, version = (
            parse_with_version(
                project_name,
                folder_name,
                version_regex,
                all_selected_folder_ids
            )
        )
    else:
        matching_folder_entity = matching_folder_entity.pop()

    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
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
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
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
83
84
85
86
87
88
89
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 = list(
            ayon_api.get_folders(
                project_name,
                folder_ids=all_selected_folder_ids,
                folder_names=[_folder_name],
            )
        )
        if matching_folder_entity:
            version_number = int(_version_number)
            matching_folder_entity = matching_folder_entity.pop()

    return matching_folder_entity, version_number