Terminalyzer

class dublib.CLI.Terminalyzer.Terminalyzer(input: Sequence[str] | None = None)[исходный код]

Обработчик консольных параметров.

check_commands(commands: list[Command]) ParsedCommandData | None[исходный код]

Проверяет текущую команду на соответствие одному из переданных описаний.

Параметры:

commands (list[Command]) – Список описаний команд.

Результат:

При успешной проверке парсит данные команды и возвращает их.

Тип результата:

ParsedCommandData | None

Исключение:
  • Exceptions.CLI.Terminalyzer.EmptyPosition – Для позиции не описан ни один параметр.

  • Exceptions.CLI.Terminalyzer.MultipleCommandDefinition – Множественное определение команды.

property helper: Helper

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

set_input(input: Sequence[str] | None)[исходный код]

Задаёт последовательность параметров, из которых будут парситься данные команды.

Параметры:

parameters (Sequence[str] | None) – Последовательность параметров команды, первым из которых является названия. По умолчанию берётся из sys.argv скрипта.

class dublib.CLI.Terminalyzer.Command.Definition.Command(name: str, description: str | None = None, category: str | None = None)[исходный код]

Описание команды.

property base: _BasePosition

Базовая позиция команды.

property category: str | None

Название категории, к которой относится команда.

create_position(name: str, description: str | None = None, important: bool = False) _Position[исходный код]

Создаёт дополнительную позицию.

Параметры:
  • name (str) – Название позиции.

  • description (str | None) – Описание позиции.

  • important (bool) – Указывает, является ли позиция обязательной. Для всех параметров позиции автоматически выставляется такое же значение.

Результат:

Представление новой позиции.

Тип результата:

Position

property description: str | None

Описание команды.

get_position(name: str) _Position[исходный код]

Возвращает позицию.

Параметры:

name (str) – Имя позиции.

Результат:

Позиция.

Тип результата:

_Position

Исключение:

KeyError – Позиция не найдена.

property max_parameters_count: int

Максимальное количество параметров.

property min_parameters_count: int

Минимальное количество параметров.

property name: str

Название команды.

property positions: tuple[_Position, ...]

Список позиций.

set_category(category: str | None)[исходный код]

Задаёт категорию, в которой будет отображаться команда при выводе помощи.

Параметры:

category (str | None) – Название категории.

class dublib.CLI.Terminalyzer.Helper.Helper[исходный код]

Модуль помощи.

property callback: Callable

Функция, в которую направляется вывод помощи.

property category: str | None

Категория команд.

property command: Command

Описание команды помощи.

enable(status: bool = True)[исходный код]

Переключает использование модуля помощи.

Параметры:

status (bool) – Статус использования модуля.

enable_sorting(status: bool = True)[исходный код]

Переключает сортировку команд в алфавитном порядке.

Параметры:

status (bool) – Состояние сортировки.

generate_help_command(commands: list[Command], command_name: str, typing: bool = True)[исходный код]

Отправляет подробное описание команды в callback-функцию.

Параметры:
  • commands (list[Command]) – Описательные структуры комманд.

  • command_name (str) – Название команды, для которой требуется получить помощь.

  • typing (bool) – Переключает отображение типов.

generate_help_list(commands: list[Command])[исходный код]

Отправляет список команд с их описанием в callback-функцию.

Параметры:

commands (list[Command]) – Описательные структуры комманд.

property is_enabled: bool

Состояние: активирован ли модуль помощи.

property is_sorting_enabled: bool

Состояние: выполняется ли сортировка команд по алфавиту.

property labels: _HelpLabels

Оператор работы с используемыми в модуле помощи строками.

set_callback(callback: Callable)[исходный код]

Задаёт функцию, в которую будет передан вывод помощи.

Параметры:

callback (Callable) – Функция, в которую направляется вывод помощи. Принимает строку в качестве аргумента.

set_category(category: str | None)[исходный код]

Задаёт категорию для команды помощи.

Параметры:

category (str | None) – Название категории.

Описание

Модуль Terminalyzer предназначен для расширенного, типизированного и защищённого анализа текстовых команд в стиле Shell.

Доступны три типа параметров:
  • Аргумент – значение, поддерживающее приведение к определённому типу.

  • Флаг – логический переключатель, который может иметь псевдонимы.

  • Ключ – идентификатор того, что следующий параметр является значением определённого типа (именованный аргумент, поддерживающий логические проверки присутствия). Также может иметь псевдонимы.

Пример

from dublib.CLI.Terminalyzer import Terminalyzer, Command, ValidableTypes

Commands = list()

# Создание описания команды.
Com = Command("open", "Open some file.")
# Создание обязательной позиции с аргументом типа существующего пути.
ComPos = Com.create_position("TARGET", "Target to open", important = True)
ComPos.set_argument(ValidableTypes.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