easyinput-grim 0.1.0
Библиотека для упрощённого ввода данных от пользователя в консоли с валидацией.
License: MIT
Requires Python: >=3.7
Keywords: input, console, password, email, python, validation, user input

# EasyInput-GRIM

[![PyPI version](https://badge.fury.io/py/easyinput-grim.svg)](https://badge.fury.io/py/easyinput-grim)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**EasyInput-GRIM** — это простая и удобная Python-библиотека для получения и валидации данных от пользователя в консоли. Она избавляет от необходимости писать повторяющийся код для проверки email, паролей, чисел, дат и многого другого.

## Ключевые возможности

- **Маскировка ввода пароля**: скрывает вводимые символы звездочками (`*`) или другими символами.
- **Гибкая валидация**: проверяет email, пароли на сложность, возраст, даты, пути к файлам и папкам.
- **Встроенные циклы**: может запрашивать ввод повторно до тех пор, пока он не станет корректным (`loop=True`).
- **Кроссплатформенность**: маскировка пароля работает как на Windows, так и на Linux/macOS.
- **Никаких зависимостей**: использует только стандартную библиотеку Python.
- **Поддержка русского и английского языков** для строкового ввода.

## Установка

Установить библиотеку можно с помощью pip:
```bash
pip install easyinput-grim
```

## Как использовать

Импортируйте нужные функции и вызывайте их.

```python
from easyinput_grim import ask_email, ask_password, ask_choice, ask_birthdate

# Запрашиваем email, который будет повторяться до корректного ввода
email = ask_email(support=["gmail.com", "yandex.ru"], loop=True)
print(f"Ваш email: {email}")

# Запрашиваем пароль с маскировкой и проверкой на сложность
password = ask_password(minLength=8, needUpper=True, needSpecchar=True, loop=True)
print("Пароль принят!")

# Предлагаем сделать выбор
options = ["Яблоко", "Банан", "Апельсин"]
fruit = ask_choice(choice=options, loop=True)
print(f"Вы выбрали: {fruit}")

# Запрашиваем дату рождения с проверкой возраста
birth_date = ask_birthdate(minAge=18, maxAge=100, loop=True)
if birth_date:
    print(f"Дата рождения: {birth_date.strftime('%d.%m.%Y')}")
```

## Детальное описание API

Ниже представлен полный список функций и их параметров.

### `ask_email()`
Запрашивает email с проверкой формата и домена.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `support` | `list[str]` | `[""]` | Список поддерживаемых доменов. `""` или `"all"` означают поддержку всех популярных доменов. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. Иначе вернет `None`. |

### `ask_password()`
Запрашивает пароль с маскировкой и проверкой сложности.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `mask` | `str` | `"*"` | Символ для маскировки ввода. Если `None`, ввод не маскируется. |
| `minLength` | `int` | `1` | Минимальная длина пароля. |
| `maxLength` | `int` | `24` | Максимальная длина пароля. |
| `check_easy` | `bool` | `True` | Если `True`, проверяет пароль по встроенному словарю простых паролей. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |
| `needUpper` | `bool` | `False` | Если `True`, пароль должен содержать хотя бы одну заглавную букву. |
| `needSpecchar` | `bool` | `False` | Если `True`, пароль должен содержать хотя бы один специальный символ. |

### `ask_file()`
Запрашивает путь к файлу с проверкой существования, расширения и имени.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `ext` | `str` | `".txt"` | Требуемое расширение файла. `"any"` отключает проверку. |
| `name` | `str` | `"any"` | Строка, которая должна содержаться в имени файла. `"any"` отключает проверку. |
| `startWith`| `str` | `"any"` | Строка, с которой должно начинаться имя файла. `"any"` отключает проверку. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_folder()`
Запрашивает путь к папке с проверкой на существование и пустоту.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `isEmpty` | `bool` | `True` | Если `True`, проверяет, что папка пуста. Если `False`, проверяет, что она НЕ пуста. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_birthdate()`
Запрашивает дату рождения с проверкой возраста.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `format` | `str` | `"dd.mm.yyyy"` | Формат даты. Поддерживаются: `dd.mm.yyyy`, `mm/dd/yyyy`, `yyyy-mm-dd`. |
| `minAge` | `int` | `0` | Минимальный допустимый возраст. |
| `maxAge` | `int` | `150` | Максимальный допустимый возраст. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_age()`
Запрашивает возраст в заданном диапазоне.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `minAge` | `int` | `0` | Минимальный допустимый возраст. |
| `maxAge` | `int` | `150` | Максимальный допустимый возраст. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_str()`
Запрашивает строку с ограничениями.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `min` | `int` | `0` | Минимальная длина строки. |
| `max` | `int` | `inf` | Максимальная длина строки. |
| `languages` | `list[str]` | `["ru", "en"]` | Список разрешенных языков (`"ru"`, `"en"`). |
| `restrictNums`| `bool`| `True` | Если `True`, строка не должна содержать цифры. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_num()`
Запрашивает число с проверкой.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `min` | `int` | `-inf` | Минимальное допустимое значение. |
| `max` | `int` | `inf` | Максимальное допустимое значение. |
| `even` | `bool` | `False` | Если `True`, число должно быть четным. |
| `odd` | `bool` | `False` | Если `True`, число должно быть нечетным. |
| `only` | `list[int]` | `None` | Список конкретных допустимых чисел. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

### `ask_choice()`
Предлагает пользователю сделать выбор из списка.

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `choice` | `list` | `[]` | Список вариантов для выбора. Пользователь может ввести сам вариант или его номер. |
| `loop` | `bool` | `False` | Если `True`, будет повторять запрос при ошибке. |

## Лицензия

Этот проект распространяется под лицензией MIT. Подробности в файле `LICENSE`.