Рубрики
Без рубрики

Создайте и тестируйте интерфейс командной строки с поэтикой, Python Fire и Pтой

Пакет Python Fire предоставляет способ разработки интерфейса командной строки (CLI) в Python, автоматический … Теги с Python, Pteest, Pythonpoetry, Pythonfire.

Python Fire Пакет обеспечивает способ разработки интерфейса командной строки (CLI) в Python, автоматически с очень минимальным дополнительным кодом. Пакет исходит от Google, но это «Не официальный продукт Google» Отказ

Поэзия Является зрелым и современным способом управления проектом Python и его зависимостями. Возможно, вы наслаждаетесь чтением Мое введение в поэзию а также краткое Объяснение использования поэзии для выставления сценариев командной строки В вашем проекте.

Я также задокументировал, используя поэтиграфию одним щелчком мыши, другой пакет Python для генерации CLI. Там, где это необходимо, информация о настройке поэзии в этой статье очень похожа на настройку поэзии в этом.

Создайте проект и добавьте модуль

poetry new --name greet --src firegreet
cd firegreet

Добавить файл под названием приветствовать в SRC/Greet подкаталог, со следующим содержанием:

"""Send greetings."""

import time

import arrow

def greet(tz, repeat=1, interval=3):
    """Parse a timezone and greet a location a number of times."""
    for i in range(repeat):
        if i > 0:  # no delay needed on first round
            time.sleep(interval)
        now = arrow.now(tz)
        friendly_time = now.format("h:mm a")
        seconds = now.format("s")
        location = tz.split("/")[-1].replace("_"," ") 
        print(f"Hello, {location}!")
        print(f"The time is {friendly_time} and {seconds} seconds.\n")

Установка зависимостей

Нам нужно Стрелка и будет использовать Python Fire Итак, они оба должны быть добавлены сейчас:

poetry add arrow fire

Добавьте конечную точку скрипта в pyproject.toml

Выставить приветствовать Функция как скрипт командной строки, добавьте tool.poetry.kcripts Раздел для pyproject.toml Отказ

[tool.poetry.scripts]
greet = "greet.greet:greet"

Это устанавливает приветствовать Сценарий, чтобы посмотреть в приветствовать Пакет для приветствовать Модуль и использование приветствовать функция.

Как только я нахожу хорошее имя, я использую его для всего. То, что в любом случае говорит мой сын Даррил. Его брат Даррил согласен.

Теперь, когда сценарий установлен, установите пакет и скрипт с помощью

poetry install

Давайте запустим недавно установленный сценарий:

$ poetry run greet
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() missing 1 required positional argument: 'tz'

Лучшие заложенные планы …

Использование [Fire] для разбора аргументов командной строки

Чтобы сделать эту работу, нам нужно определить аргументы командной строки и пройти теми, как параметры для приветствовать функция.

Это именно то, что Python Fire может сделать автоматически. Однако нам нужно корректировать нашу стратегию.

Во-первых, Импорт огня и добавьте простую функцию обработки команды в код. Результат должен прочитать что-то вроде этого:

"""Send greetings."""

import time

import arrow
import fire


def greet(tz, repeat=1, interval=3):
    """Parse a timezone and greet a location a number of times."""
    for i in range(repeat):
        if i > 0:  # no delay needed on first round
            time.sleep(interval)
        now = arrow.now(tz)
        friendly_time = now.format("h:mm a")
        seconds = now.format("s")
        location = tz.split("/")[-1].replace("_", " ")
        print(f"Hello, {location}!")
        print(f"The time is {friendly_time} and {seconds} seconds.\n")


def cli():
    fire.Fire(greet)

Что CLI () Функция – это все, что мы добавили, кроме Импорт огня Отказ

CLI () Функция, не приветствовать () , должен быть скрипт конечной точки, так pyproject.toml должен иметь незначительную корректировку:

[tool.poetry.scripts]
greet = "greet.greet:cli"

Теперь попробуйте Поэзия бежит приветствовать --help

Ага. Все это почти не работает. Вот как Python Fire Сияет: лень дает такую элегантность.

$ poetry run greet -r 2 -i 1 Canada/Saskatchewan
Hello, Saskatchewan!
The time is 4:11 am and 43 seconds.

Hello, Saskatchewan!
The time is 4:11 am and 44 seconds.

Теперь, когда мы проверили его, мы знаем, что это работает. Подожди … Это было не настоящее тестирование. Введите pteest Отказ

Тестирование пожарных интерфейсов Python с Pтой

Тестирование интерфейсов командной строки требует немного мысли. Не удивительно, с pteest и Python Fire Я могу продолжать лениться.

Огонь. Огонь () Функция также используется в тестировании. Мы можем поставить следующие тесты/Test_GreeT.py:

import fire

from greet.greet import greet


def test_greet_cli(capsys):
    fire.Fire(greet, ["Egypt"])
    captured = capsys.readouterr()
    result = captured.out
    assert "Hello, Egypt!" in result

Как видно выше, Огонь. Огонь () Функция может принять список аргументов командной строки.

Я использовал pteest’s капсис приспособление захватить вывод.

Делает Поэзия бежит Pteest проходить?

Удовлетворение.

Опять же, посмотрите на аналогичные учебные пособия, связанные с использованием клика, если они заинтересованы в сравнении инструментов.

Оригинал: “https://dev.to/bowmanjd/build-a-command-line-interface-with-poetry-and-python-fire-c8b”