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 – Множественное определение команды.

property helper: Helper

Настройки модуля помощи.

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