/
GreyStekl0
/
xsetup
Обзор
Документация
Войти
/
GreyStekl0
/
xsetup
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
utils.py
94 строки
3 KB
x1z53
Blocks
01 окт 2024, 17:09
01 окт 2024, 17:09
14c5cff
Код
Авторство
О чём код?
import yaml import argparse from package_manager import ( get_available_package_managers, get_package_manager_subcommands, PackageManager, ) from consts import PACKAGE_MANAGERS def error(message, exit_code=1): print(f"Ошибка: {message}") exit(exit_code) def get_args(): parser = argparse.ArgumentParser( prog="XConfigurer", description="Программа для настройки системы по подготовленным параметрам", epilog="https://gitverse.ru/x1z53", ) parser.add_argument("-c", "--config") parser.add_argument("-d", "--debug", action="store_true") return parser.parse_args() def get_config(config_file_name): with open(config_file_name) as config: try: return yaml.safe_load(config) except yaml.YAMLError as e: error("Синтаксическая ошибка YAML: {e}") def get_user_select(message, choices): print(message) for index, choice in enumerate(choices): print(f"{index + 1}. {choice}") print() answer = input("> ") while not answer.isdigit() or not (0 < int(answer) <= len(choices)): print("Некорректный выбор, повторите ввод") answer = input("> ") return choices[int(answer) - 1] def check_dicts_struct(dicts, keys_to_check): for item in dicts: for key in keys_to_check: if key not in item.keys(): return False return True def get_package_manager(config, debug, root_manager): selected_package_manager = config.get("package_manager") if not selected_package_manager: debug(f"Пакетный менеджер не установлен в конфигурационном файле") debug(f"Получение доступных пакетных менеджеров") available_package_managers = get_available_package_managers(PACKAGE_MANAGERS) if not available_package_managers: error("Нет поддерживаемых пакетных менеджеров") debug(f"Выбор пользователя") selected_package_manager = ( get_user_select("Выберите пакетный менеджер", available_package_managers) if len(available_package_managers) != 1 else available_package_managers[0] ) if selected_package_manager not in available_package_managers: error("config.yaml: Указанный пакетный менеджер не поддерживается") debug(f"Пакетный менеджер: {selected_package_manager}") selected_package_manager_subcommands = get_package_manager_subcommands( PACKAGE_MANAGERS, selected_package_manager ) debug( f"Подкоманды пакетного менеджера: {', '.join(selected_package_manager_subcommands.values())}" ) package_manager = PackageManager( selected_package_manager, selected_package_manager_subcommands, root_manager ) return package_manager