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