def create_manifest_from_row()

in src/loading_manifest/csv_to_json.py [0:0]


def create_manifest_from_row(root_template, required_template,
                             parameters_object, map_parameter_column, data_row):
    # create new instance from template
    ldm = copy.deepcopy(root_template)

    new_parameters_object = dict()
    parse_template_parameters(ldm, new_parameters_object)

    assert new_parameters_object == parameters_object

    # empty top-level array object
    for parameter, parameter_recs in new_parameters_object.items():
        for parameter_rec in parameter_recs:
            _, _, root_list = parameter_rec
            if len(root_list) > 0:
                top_object, top_keys = root_list[0]
                parent_object, key = get_deepest_key_object(top_object, top_keys)
                parent_object[key] = []


    # replace parameters with data
    for parameter, parameter_recs in new_parameters_object.items():
        for parameter_rec in parameter_recs:
            root_object, keys, root_list = parameter_rec
            d_array = len(root_list)
            if d_array == 0:
                # parameters not inside array type
                parameter_column = map_parameter_column.get(parameter)
                replace_parameter_with_data(root_object, keys, parameter, data_row, parameter_column)
            else:
                # parameters inside array type
                parameter_column = map_parameter_column.get(parameter)

                # create array objects
                new_root_list = list(root_list)
                new_root_list.append((root_object, keys))
                for indexes_column in parameter_column:
                    new_root_object, new_keys = get_root_object(new_root_list, indexes_column[:-1])
                    replace_parameter_with_data(new_root_object, new_keys, parameter, data_row, indexes_column[-1])

    # clean up non-filled parameters
    clear_non_filled_parameters(ldm)

    # clear special tags (oneOf, anyOf etc)
    remove_special_tags(ldm)

    # add required fields if needed
    add_required_fields(ldm, required_template)

    return ldm