# PonyTool 🐎

PonyTool — CLI-инструмент для работы с Python-проектами:
инициализация, тесты, очистка, Git-операции и управление зависимостями — в одном месте.

Проект ориентирован на реальный workflow, а не абстрактную автоматизацию:
используется текущий Python, активный venv и прозрачные команды

---

## Установка

```bash
pip install ponytool
```

## Основные команды

### 📦 Инициализация проекта

```bash
pony project init
pony project init --name my_app
pony project init --no-git
```

* Создаёт структуру проекта (настраиваемую):
* поддерживает вложенные папки и .py-файлы
* может интерактивно инициализировать Git

Пример структуры по умолчанию:
```css
src/
tests/
docs/
README.md
.gitignore
```

### 🧹 Очистка проекта

```bash
pony project clear
pony project clear --dry-run
pony project clear -y
```
* Удаляет кэш, coverage, build-артефакты
* Поддерживает --dry-run
* Список очищаемых путей настраивается в defaults.toml.

### 🧪 Тесты

```bash
pony test run
pony test run -k api
pony test cov
pony test cov --html
```

* Тесты запускаются через текущий Python (sys.executable).
* Полная поддержка pytest
* Результаты последнего запуска сохраняются и используются другими командами

### 🌱 Git

```bash
pony git init
pony git info
pony git push
pony git push -m "message"
pony git push --dry-run
pony git remove
pony git rollback
pony git doctor

```
Возможности:

* Инициализация Git-репозитория «с нуля»
* Настройка remote и первого push
* Диагностика состояния репозитория (git doctor)
* Удаление веток / репозитория / файлов (git remove)
* Безопасный откат Git (rollback удаляет только .git)

## 📄 Зависимости (requirements.txt)

* Генерация из окружения (аналог pip freeze)

```bash
pony req freeze
pony req freeze --dry-run
pony req freeze --force
```

* Использует текущий Python / venv
* Исключает служебные пакеты (pip, setuptools, wheel)

* Генерация на основе кода проекта (рекомендуется)
```bash
pony req gen
pony req gen --dry-run
pony req gen --force
```

* **Что делает pony req gen:**

1. Определяет активное или локальное virtualenv

2. Находит site-packages

3. Сканирует Python-файлы проекта

4. Извлекает импорты (ast)

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

6. Генерирует requirements.txt только с реально используемыми зависимостями

Пример результата:
```text
# Generated by pony req gen
# Python: C:\...\python.exe
# Venv: C:\...\project\.venv

# used in 3 files
requests==2.32.5
```

## 🩺 Диагностика зависимостей

```bash
pony req doctor
pony req doctor -v
pony req doctor --json
```

* **Проверяет:**

1. наличие Python и virtualenv

2. доступность site-packages

3. количество установленных пакетов

4. найденные импорты

5. сопоставление импортов и пакетов

6. неиспользуемые пакеты

7. импорты без соответствующих зависимостей

## 🧭 Статус проекта

```bash
pony project status
pony project status --short
pony project status --json
```

Показывает состояние проекта:

* Python virtualenv
* Git-репозиторий
* ключевые файлы проекта
* состояние тестов (запускались ли и чем закончились)

## Конфигурация

Файл по умолчанию:

* **ponytool/config/defaults.toml**

Пример:

```toml
[project.clean]
trash = ["__pycache__", ".pytest_cache", "htmlcov"]
```

* Пользовательские настройки можно переопределить через user.toml

## Философия проекта

* ❌ никакого хардкодинга путей

* ❌ никакой магии без объяснений

* ✅ всё через реальный интерпретатор

* ✅ безопасность и dry-run по умолчанию

* ✅ читаемый код и предсказуемое поведение

## Лицензия

* **MIT**