Uma coleção de utilitários para acelerar o desenvolvimento backend em Python com padrões reutilizáveis e produtivos
Project description
🐍 SnakeStack
📦 Visão Geral
O snakestack é um pacote modular que oferece uma base robusta para construção de serviços backend com foco em:
- Observabilidade com OpenTelemetry
- Cache assíncrono com Redis
- Integração com Google Pub/Sub
- Acesso assíncrono ao MongoDB
- Client HTTPX com suporte a tracing
- Modelos base com
pydanticepydantic-settings - Stack de logging estruturado e configurável
⚙️ Instalação
Base
pip install snakestack
Extras disponíveis
| Extra | Comando de instalação |
|---|---|
| Redis | pip install snakestack[redis] |
| MongoDB | pip install snakestack[mongodb] |
| Pub/Sub | pip install snakestack[pubsub] |
| Telemetry | pip install snakestack[telemetry] |
| Retry | pip install snakestack[retry] |
| Todos | pip install snakestack[all] |
📚 Módulos disponíveis
| Módulo | Descrição | Extra |
|---|---|---|
snakestack.logging |
Logging estruturado com filtros, formatadores e propagação de request ID | — |
snakestack.cache |
Cliente Redis assíncrono com TTL, prefixo e serialização via orjson |
[redis] |
snakestack.pubsub |
Publisher e subscriber para Google Pub/Sub com presets e tracing | [pubsub] |
snakestack.telemetry |
Setup do OpenTelemetry com auto-instrumentação de HTTPX e logging | [telemetry] |
snakestack.mongodb |
Wrapper assíncrono para PyMongo com singleton de conexão | [mongodb] |
snakestack.healthz |
Agregador de health checks com medição de latência por check | — |
snakestack.httpx |
AsyncClient do HTTPX com composição de URL e normalização de erros |
— |
snakestack.model |
Modelos base Pydantic v2: StrictModel, LenientModel, ORMModel |
— |
snakestack.task |
Pool de workers assíncrono sobre asyncio.Queue com shutdown graceful |
— |
snakestack.retry |
Decorator de retry para APIs externas com backoff exponencial, logging e tracing | [retry] |
snakestack.config |
Gerenciamento de settings com pydantic-settings |
— |
🧪 Exemplos de Uso
Os exemplos completos estão no diretório examples/.
Cache
| Arquivo | Descrição |
|---|---|
cache/async_cache_service.py |
Uso básico do AsyncRedisService com diferentes tipos de valor |
Healthz
| Arquivo | Descrição |
|---|---|
healthz/sample_healthz.py |
Health check com callbacks síncronos e assíncronos |
healthz/sample_healthz_with_deps.py |
Health check verificando Redis e MongoDB |
HTTPX
| Arquivo | Descrição |
|---|---|
httpx/sample_use_httpx.py |
Client HTTPX básico com composição de URL |
httpx/sample_use_httpx_with_telemetry.py |
Client HTTPX com tracing via OpenTelemetry |
Logging
| Arquivo | Descrição |
|---|---|
logging/default_logging.py |
Formatter padrão |
logging/with_request_id_logging.py |
Formatter com propagação de request ID |
logging/custom_json_logging.py |
Formatter JSON estruturado |
logging/excluded_name_filter_logging.py |
Filtro por nome do logger |
logging/filter_path_logging.py |
Filtro por path da requisição |
MongoDB
| Arquivo | Descrição |
|---|---|
mongodb/sample_mongodb.py |
Conexão, consulta e encerramento com PyMongo assíncrono |
Pub/Sub
| Arquivo | Descrição |
|---|---|
pubsub/sample_publisher.py |
Publicação básica de mensagens |
pubsub/sample_publisher_with_open_telemetry.py |
Publicação com tracing |
pubsub/sample_subscriber.py |
Subscriber com SimpleProcessor |
pubsub/sample_subscriber_with_batch.py |
Subscriber com BatchProcessor |
pubsub/sample_subscriber_with_open_telemetry.py |
Subscriber com tracing |
pubsub/sample_flow_control.py |
Configuração de flow control |
Settings
| Arquivo | Descrição |
|---|---|
settings/sample_settings.py |
Uso do SnakeStackSettings com override por env var |
Task
| Arquivo | Descrição |
|---|---|
task/sample_task.py |
Worker pool básico |
task/sample_task_with_sentinel.py |
Worker pool com sentinel de encerramento |
task/sample_task_with_callback.py |
Worker pool com callback customizado |
Retry
| Arquivo | Descrição |
|---|---|
retry/sample_with_logging.py |
Retry com logging estruturado em chamadas a APIs externas |
retry/sample_with_telemetry.py |
Retry com eventos de tracing via OpenTelemetry |
Telemetry
| Arquivo | Descrição |
|---|---|
telemetry/sample_telemetry.py |
Setup do OpenTelemetry com instrument_app |
telemetry/sample_decorator_telemetry.py |
Tracing via decorator @instrumented_span |
🛠️ Desenvolvimento Local
1. Clone o repositório
git clone https://github.com/BrunoSegato/snakestack.git
cd snakestack
2. Instale as dependências
uv sync --all-groups --all-extras
3. Instale os hooks de pre-commit
make hooks
4. Suba os serviços locais
docker-compose up -d
🧾 Comandos
| Comando | Descrição |
|---|---|
make install |
Instala apenas dependências de runtime |
make lint |
Executa ruff check |
make format |
Executa ruff check --fix |
make mypy |
Executa mypy sem cache incremental |
make check |
Executa lint + mypy |
make pre-commit |
Executa todos os hooks de pre-commit |
make test |
Executa todos os testes |
make test-unit |
Executa apenas testes unitários |
make test-matching test=nome |
Executa testes por nome com -vv -s --pdb |
make release |
Bump de versão + changelog via commitizen |
make publish |
Publica no PyPI |
🧪 Testes
O projeto possui cobertura completa de testes unitários organizados por domínio.
# Todos os testes
make test
# Apenas testes unitários
make test-unit
# Testes de um domínio específico
uv run pytest -m cache
uv run pytest -m pubsub
uv run pytest -m telemetry
uv run pytest -m mongodb
uv run pytest -m retry
# Teste por nome
make test-matching test='nome_do_teste'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snakestack-0.35.0.tar.gz.
File metadata
- Download URL: snakestack-0.35.0.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19eb0073319fe47d3d5d16ffcb5c208d7c846e8a814ba684c36b0e26aef10926
|
|
| MD5 |
a41bc9ec7085a14805a8fe82138dfcb1
|
|
| BLAKE2b-256 |
c707159000393dad56537e49b63236ded60cd65e6e2148c2174e9ea9baa52658
|
File details
Details for the file snakestack-0.35.0-py3-none-any.whl.
File metadata
- Download URL: snakestack-0.35.0-py3-none-any.whl
- Upload date:
- Size: 48.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b4485e57cf58e6a973227e84682b0bb86a157de88fd826a458a58df6fbca65e
|
|
| MD5 |
10e22006814b7e71a90a0d6c80b7995f
|
|
| BLAKE2b-256 |
b6bfcefe572d00403ee77cde83abf58e4a62e2b6fb9be6dde7286b25347916e9
|