Metadata-Version: 2.4
Name: request-decorator-handlers
Version: 0.1.0
Summary: Decorators, validators, logging and debugging helpers for async HTTP requests
Author: Evh
License-Expression: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: boss-request>=0.0.7
Requires-Dist: curl-cffi>=0.13.0
Requires-Dist: jsonpath-ng>=1.7.0
Requires-Dist: loguru>=0.7.3
Requires-Dist: lxml>=4.9.0
Requires-Dist: rich>=14.2.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: build>=1.3.0; extra == "dev"
Requires-Dist: twine>=6.2.0; extra == "dev"
Dynamic: license-file

# request_decorator_handlers

Библиотека декораторов для асинхронных HTTP‑клиентов на базе `curl_cffi` и `boss-request`:

- 🎯 единая обёртка `Validator` со складом ошибок и распарсенных полей;
- 🧪 валидаторы ответов (`status`, `headers`, `cookies`, `content-type`, `regex`);
- 📦 парсеры (`JSONPath`, html‑селекторы);
- 🪵 продвинутый логгер запросов с цветными бейджами статуса и блоком `ERRORS`;
- 🧾 декоратор `RequestDebugger` для записи невалидных запросов и уникальных JSON структур.

## Установка

```bash
pip install request-decorator-handlers
```

## Быстрый пример

```python
from request_handlers import RequestLogger, ResponseValidator, LOG_ACTION
from request_handlers.decorators import RequestDebugger

@RequestDebugger.debug(save_errors=True)
@RequestLogger.log(LOG_ACTION.FETCH.PROFILE, log_level="success_error")
@ResponseValidator.status([200])
async def fetch_profile(client):
    return await client.get("https://httpbin.org/get")
```

## Что внутри

```
src/request_handlers/
  core/          # Validator, ValidationError, action константы
  logging/       # RequestLogger + RequestLogFormatter
  validation/    # ResponseValidator (status, headers, regex ...)
  parsing/       # JSONPathParser, HTMLParser
  decorators/    # RequestDebugger
examples/        # демо-скрипты
```

Подробности и расширенные примеры смотрите в `docs/index.md` и файлах каталога
`examples/`.
