Metadata-Version: 2.4
Name: mukimov
Version: 0.2.1
Summary: Terminal password masking, colors, Markdown and typed environment settings
Author-email: mukimov <mukimov.shop@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/mukimov/mukimov
Keywords: password,getpass,stars,prompt,cli
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Security
Classifier: Typing :: Typed
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: packaging>=21
Provides-Extra: markdown
Requires-Dist: markdown-it-py>=3.0.0; extra == "markdown"
Requires-Dist: wcwidth>=0.2.5; extra == "markdown"
Provides-Extra: env
Requires-Dist: python-dotenv>=1.0.0; extra == "env"
Dynamic: license-file

# mukimov

[![PyPI](https://img.shields.io/pypi/v/mukimov)](https://pypi.org/project/mukimov/)
[![Python](https://img.shields.io/badge/Python-3.8%2B-blue)](https://pypi.org/project/mukimov/)
[![MIT](https://img.shields.io/badge/License-MIT-green)](LICENSE)

Инструменты для Python CLI. Вводи пароли со звёздочками, оформляй вывод цветом и Markdown, читай настройки из окружения.

## Установка

| Что нужно | Команда |
| --- | --- |
| Ввод пароля, цвета, настройки из окружения и CLI | `python -m pip install mukimov` |
| Загрузка настроек из файла `.env` | `python -m pip install "mukimov[env]"` |
| Вывод Markdown в терминал | `python -m pip install "mukimov[markdown]"` |
| Все возможности | `python -m pip install "mukimov[env,markdown]"` |

## Ввод пароля

```python
from mukimov import stars
from mukimov.color import cyan

password = stars(cyan("Пароль: "), mask="•")
```

```text
Пароль: ••••••
```

`stars(prompt="Password: ", mask="*")` возвращает введённый пароль как обычную строку Python. Не печатай её и не записывай в логи. Маска показывает длину ввода. Для корректного стирания маски через Backspace выбирай символ шириной в одну колонку, например `*`, `#` или `•`.

Ввод с маской работает в терминалах Windows, Linux и macOS. Enter завершает ввод, Backspace удаляет последний символ, Ctrl+C прерывает ввод, а Ctrl+D на пустом вводе вызывает `EOFError`. Если стандартный ввод перенаправлен, библиотека пробует скрытый ввод через `getpass`. Если отключить эхо невозможно, она прекращает ввод с `RuntimeError`.

## Цвет и Markdown

```python
from mukimov.color import green, red

print(green("Готово"))
print(red("Ошибка"))
```

Функции цвета возвращают строки с ANSI-кодами. Доступны `red`, `green`, `blue`, `yellow`, `orange`, `purple`, `pink`, `cyan`, `lime`, `gray`, `white` и `gold`.

С дополнением `markdown` можно выводить заголовки, списки, таблицы, ссылки и блоки кода.

```python
from mukimov.text import markdown

markdown.print("# Отчёт\n\n- **Статус:** готово")
text = markdown.render("**Готово**")  # Возвращает оформленную строку
```

## Настройки окружения

```python
from mukimov import env

env.load(".env")  # Для загрузки файла установи дополнение env
env.check(["APP_TOKEN", "API_URL"])

token = env.required("APP_TOKEN")
api_url = env.string("API_URL")
debug = env.boolean("DEBUG", default=False)
port = env.integer("PORT", default=8080, min=1, max=65535)
hosts = env.list("HOSTS", default=["localhost"], separator=",")
```

`env.load()` вызывается явно. По умолчанию существующие переменные окружения имеют приоритет. Чтобы заменить их значениями из файла, передай `override=True`. Методы чтения работают и без файла `.env`.

Значения по умолчанию применяются к отсутствующим переменным. Пустое значение в окружении считается ошибкой. `env.check()` сообщает обо всех отсутствующих и пустых обязательных переменных сразу. Сообщения `EnvError` указывают имена настроек без их значений.

## Команды

```console
python -m mukimov --help
python -m mukimov --version
python -m mukimov doctor
python -m mukimov update
```

Те же команды доступны через `mukimov`, если он есть в `PATH`. Справка, версия и `doctor` работают офлайн. `doctor` показывает используемый Python и доступность компонентов. `update` проверяет PyPI и при необходимости запускает обновление через pip для текущего интерпретатора.

## Разработка

```console
python -m pip install -e ".[env,markdown]"
python -m pip install build twine
python -B -m unittest discover -s tests -q
python -m build
python -m twine check --strict dist/*
```

[История изменений](CHANGELOG.md) · [Лицензия MIT](LICENSE)
