def generate_valid_commands()

in modular_api/commands_generator.py [0:0]


def generate_valid_commands(destination_folder,
                            path_to_setup_file_in_module,
                            path_to_scan=None,
                            mount_point='',
                            is_private_mode_enabled=False):
    # generate or compute the path to process
    _LOG.info(f'[commands] Path to scan: {path_to_scan}')

    # iterate files
    valid_methods = {'type': 'module', 'body': {}}
    listdir = get_file_names_which_contains_admin_commands(
        path_to_scan=path_to_scan)

    if destination_folder not in sys.path:
        sys.path.append(destination_folder)

    with open(path_to_setup_file_in_module) as file:
        file_content = file.readlines()

    root_group_name = _resolve_root_group_name(file_content=file_content)

    for group_file in sorted(listdir):
        group_full_name_list, group_name = resolve_group_name(
            group_file=group_file)
        is_private_group = (isinstance(group_full_name_list, list) and
                            group_full_name_list[0] == 'private' or
                            group_full_name_list == 'private')

        is_subgroup = (isinstance(group_full_name_list, list) and
                       not is_private_group)
        is_root_group = root_group_name == group_name
        if is_private_group ^ is_private_mode_enabled:
            continue

        # from index.py -> get_module_group_and_associate_object
        module_spec = importlib.util.spec_from_file_location(
            group_name,
            os.path.join(path_to_scan, group_file))
        imported_module = importlib.util.module_from_spec(module_spec)
        with patch('botocore.client.BaseClient._make_api_call',
                   return_value=DICT_WITH_CREDS_FOR_MOCK):
            module_spec.loader.exec_module(imported_module)
        commands = CommandsDefinitionsExtractor(group_name,
                                                imported_module,
                                                mount_point).extract(subgroup=is_subgroup)
        group_meta = {"type": "group", 'body': commands}
        if is_subgroup:
            if not valid_methods['body'].get(group_full_name_list[0]):
                valid_methods['body'][group_full_name_list[0]] = {'body': {}}
            if isinstance(group_full_name_list, list) \
                    and len(group_full_name_list) > 2:
                if not valid_methods['body'][group_full_name_list[0]]['body'].get(group_full_name_list[1]):
                    valid_methods['body'][group_full_name_list[0]]['body'][group_full_name_list[1]] = {'body': {}}
                # todo refactor this
                valid_methods['body'][group_full_name_list[0]]['body'][group_full_name_list[1]]['body'].update(
                    {group_name: group_meta})
            else:
                valid_methods['body'][group_full_name_list[0]]['body'].update(
                    {group_name: group_meta})
        elif is_root_group:
            root_commands_meta = group_meta.pop('body')
            for root_command_meta in root_commands_meta.values():
                root_command_meta['type'] = 'root command'
            valid_methods['body'].update(root_commands_meta)
        else:
            valid_methods['body'][group_name] = group_meta
    if destination_folder in sys.path:
        sys.path.remove(destination_folder)
    return valid_methods