Obrigado por considerar contribuir para o Python API Base! Este documento fornece diretrizes para contribuições.
- Python 3.12+
- uv (gerenciador de pacotes)
- Docker e Docker Compose
- Git
# Clone o repositório
git clone https://github.com/your-org/python-api-base.git
cd python-api-base
# Instale as dependências
uv sync --dev
# Configure as variáveis de ambiente
cp .env.example .env
# Inicie os serviços de infraestrutura
docker-compose up -d postgres redis
# Execute as migrations
alembic upgrade head
# Verifique se tudo está funcionando
pytest# Desenvolvimento
uvicorn src.main:app --reload
# Com Docker
docker-compose up| Tipo | Convenção | Exemplo |
|---|---|---|
| Arquivos | kebab-case | user-repository.py |
| Classes | PascalCase | UserRepository |
| Funções/Métodos | snake_case | get_user_by_id |
| Variáveis | snake_case | user_count |
| Constantes | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
| Diretórios | lowercase | infrastructure |
- Nomes devem começar com verbo:
get_,create_,delete_,validate_ - Tamanho: 15-20 caracteres idealmente
- Máximo de linhas: 50 (exceção: 75 para casos complexos)
- Máximo de parâmetros: 4 (use objeto para mais)
- Prefixos:
is_,has_,can_,should_,will_ - Exemplos:
is_active,has_permission,can_edit
| Tipo | Linhas Recomendadas | Máximo |
|---|---|---|
| Arquivo | 200-400 | 500 |
| Função | 10-50 | 75 |
| Classe | 200-300 | 400 |
- Complexidade ciclomática máxima: 10
- Nesting máximo: 3 níveis (use early returns)
Ordem:
- Standard library
- Third-party
- Local
# Standard library
import os
from datetime import datetime
# Third-party
from fastapi import FastAPI
from pydantic import BaseModel
# Local
from core.config import Settings
from domain.users import User- ❌ Emojis em código
- ❌
console.log/printem produção - ❌ Código comentado
- ❌ Magic numbers (use constantes)
- ❌ TODO sem ticket
- ❌ Copy-paste (extraia para função)
- ❌ Type assertions sem validação
- ❌
evalcom input de usuário - ❌ Credenciais hardcoded
main # Produção
├── develop # Desenvolvimento
├── feature/* # Novas features
├── fix/* # Bug fixes
├── hotfix/* # Fixes urgentes em produção
└── release/* # Preparação de release
Formato: <type>(<scope>): <description>
Tipos:
feat: Nova featurefix: Bug fixdocs: Documentaçãostyle: Formataçãorefactor: Refatoraçãotest: Testeschore: Manutenção
Exemplos:
feat(users): add email verification
fix(auth): resolve token expiration issue
docs(readme): update installation instructions
- Crie uma branch a partir de
develop - Faça suas alterações
- Escreva/atualize testes
- Atualize documentação se necessário
- Abra um PR para
develop
- Código segue os coding standards
- Testes passando
- Cobertura >= 80%
- Documentação atualizada
- Sem secrets ou credenciais
- Sem breaking changes (ou documentados)
- Cobertura mínima: 80%
- Todos os testes devem passar
# Todos os testes
pytest
# Com coverage
pytest --cov=src --cov-report=html
# Testes específicos
pytest tests/unit/
pytest tests/integration/
pytest tests/properties/- Unit Tests: Testam componentes isolados
- Integration Tests: Testam integração entre componentes
- Property Tests: Testam propriedades com Hypothesis
- E2E Tests: Testam fluxos completos
- Correção funcional
- Aderência aos coding standards
- Cobertura de testes
- Performance
- Segurança
- Documentação
- Seja construtivo
- Explique o "porquê"
- Sugira alternativas
- Aprove quando estiver bom
Não abra issues públicas para vulnerabilidades de segurança.
Envie um email para: security@example.com
- Nunca commite secrets
- Valide todos os inputs
- Use queries parametrizadas
- Siga OWASP Top 10
- Novas features
- Mudanças de API
- Decisões arquiteturais (ADR)
- Configurações
docs/- Documentação geraldocs/adr/- Architecture Decision Recordsdocs/api/- Documentação de API- Docstrings - Documentação de código
- Abra uma issue com a tag
question - Consulte a documentação existente
- Pergunte no canal do time
Ao contribuir, você concorda que suas contribuições serão licenciadas sob a mesma licença do projeto (MIT).