Metadata-Version: 2.4
Name: flask-exp
Version: 0.1.0
Summary: Библиотека, расширяющая возможности Flask для быстрого подключения полезных функций в приложениях.
License: MIT
License-File: LICENSE
Keywords: flask,extension,web,python
Author: Podval
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: Flask
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: flask (>=2.3)
Requires-Dist: openpyxl (>=3.1)
Requires-Dist: sqlalchemy (>=2.0)
Project-URL: Homepage, https://pypi.org/project/flask-exp/
Project-URL: Issues, https://github.com/example/flask-exp/issues
Project-URL: Repository, https://github.com/example/flask-exp
Description-Content-Type: text/markdown

# flask-exp

`flask-exp` — это библиотека, расширяющая возможности Flask.

Она добавляет полезные функции, которые ускоряют разработку:
- автоматический health-check endpoint;
- удобные JSON-ответы;
- декоратор для маршрутов, автоматически конвертирующий `dict` в JSON.
- импорт данных из `CSV/XLSX` в SQLAlchemy-модели по явному сопоставлению заголовков.
- автогенерацию CRUD API-роутов по SQLAlchemy-модели.

## Установка

```bash
pip install flask-exp
```

Подробная документация по использованию: [docs/USAGE.md](docs/USAGE.md)

## Быстрый старт

```python
from flask import Flask
from flask_exp import FlaskExp

app = Flask(__name__)
exp = FlaskExp(app)


@exp.route_with_json(app, "/info")
def info():
    return {"service": "demo", "status": "running"}


if __name__ == "__main__":
    app.run(debug=True)
```

После запуска:
- `GET /health` вернёт служебный статус;
- `GET /info` вернёт JSON.

## Импорт CSV/XLSX в SQLAlchemy

Пользователь задаёт явное сопоставление `заголовок -> поле модели`.

```python
from flask import Flask
from flask_exp import FlaskExp

app = Flask(__name__)
exp = FlaskExp(app)

report = exp.exports.import_to_model(
    file_path="users.csv",  # или users.xlsx
    model=User,
    mapping={
        "Email": "email",
        "Full Name": "name",
    },
    session=db_session,
    strict=False,  # True: остановка на первой ошибке
)

print(report.created, report.failed, report.errors)
```

## Авто-CRUD API по модели

Можно сгенерировать полный CRUD по SQLAlchemy-модели одной командой.

```python
routes = exp.create_crud_routes(app, User, db_session)
```

По умолчанию для модели `User` с `__tablename__ = "users"` создаются маршруты:
- `POST /users` — create
- `GET /users` — list
- `GET /users/<item_id>` — get by id
- `PUT /users/<item_id>` и `PATCH /users/<item_id>` — update
- `DELETE /users/<item_id>` — delete

Можно переопределить базовый путь:

```python
exp.create_crud_routes(app, User, db_session, base_route="/api/users")
```

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

```bash
poetry install
poetry run pytest
```

## Публикация в PyPI

```bash
poetry build
poetry publish
```

Для публикации через токен:

```bash
poetry config pypi-token.pypi <YOUR_PYPI_TOKEN>
poetry publish --build
```

