Terminalyzer
- class dublib.CLI.Terminalyzer.Terminalyzer(input: Iterable[str] | None = None)[исходный код]
Обработчик консольных параметров.
- check_commands(commands: list[Command] | Command) ParsedCommandData | None[исходный код]
Проверяет каждое из переданных описаний команд на соответствие текущей.
- Параметры:
commands (list[Command] | Command) – Описательные структуры команд или их JSON-конфигурация.
- Результат:
При успешной проверке парсит данные команды и возвращает их.
- Тип результата:
ParsedCommandData | None
- Исключение:
Exceptions.CLI.Terminalyzer.EmptyPosition – Для позиции не описан ни один параметр.
Exceptions.CLI.Terminalyzer.MultipleCommandDefinition – Множественное определение команды.
- set_input(input: Iterable[str])[исходный код]
Задаёт последовательность параметров, из которых будут парситься данные команды.
- Параметры:
parameters (Iterable[str]) – Последовательность параметров команды, первым из которых является названия. По умолчанию берётся из sys.argv скрипта.
Описание
Модуль Terminalyzer предназначен для расширенного, типизированного и защищённого анализа текстовых команд в стиле Shell.
- Доступны три типа параметров:
Аргумент – значение, поддерживающее приведение к определённому типу.
Флаг – логический переключатель, который может иметь псевдонимы.
Ключ – идентификатор того, что следующий параметр является значением определённого типа (именованный аргумент, поддерживающий логические проверки присутствия). Также может иметь псевдонимы.
Пример
from dublib.CLI.Terminalyzer import Terminalyzer, Command, ParametersTypes
Commands = list()
# Создание описания команды.
Com = Command("open", "Open some file.")
# Создание обязательной позиции с аргументом типа существующего пути.
ComPos = Com.create_position("TARGET", "Target to open", important = True)
ComPos.set_argument(ParametersTypes.ValidPath, "Path to file.")
# Добавление альтернативы аргументу, флага и ключа.
ComPos.add_flag("-l", aliases = ("--last",), description = "Open last file.")
ComPos.add_key("-p", aliases = ("--path",), description = "Specify path.")
Commands.append(Com)
# Инициализация анализатора. По умолчанию ввод берётся из sys.argv.
Analyzer = Terminalyzer()
# Включение команды help, выводящей детализированную помощь.
Analyzer.helper.enable()
# Поиск и парсинг команды.
CommandData = Analyzer.check_commands(Commands)
if CommandData and Command.name == "open":
# Проверка активации флага по псевдониму.
if CommandData.check_flag("--last"):
pass
# Проверка активации ключа по имени.
elif CommandData.check_key("-p"):
# Получение пути к файлу через значение ключа.
CommandData.get_key_value("--path")
else:
# Получение пути к файлу через слот позиции.
CommandData.get_position_parameter("TARGET").value
# Получение пути к файлу через индекс аргумента.
CommandData.arguments[0].value