skills/python-patterns/SKILL.md
Princípios de desenvolvimento em Python e tomada de decisão. Seleção de framework, padrões assíncronos, type hints, estrutura do projeto. Ensina a pensar, não a copiar.
npx skillsauth add lucasfdigital/orchard python-patternsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Princípios de desenvolvimento e tomada de decisão em Python para 2025. Aprenda a PENSAR, não a memorizar padrões.
Esta skill ensina princípios de tomada de decisão, não código fixo para copiar.
O que você está construindo?
│
├── API-first / Microsserviços
│ └── FastAPI (async, moderno, rápido)
│
├── Web Full-stack / CMS / Admin
│ └── Django (batteries-included - "pilhas incluídas")
│
├── Simples / Script / Aprendizado
│ └── Flask (mínimo, flexível)
│
├── Servir APIs de IA/ML
│ └── FastAPI (Pydantic, async, uvicorn)
│
└── Workers de segundo plano (Background workers)
└── Celery + qualquer framework
| Fator | FastAPI | Django | Flask | | :--- | :--- | :--- | :--- | | Ideal para | APIs, microsserviços | Full-stack, CMS | Simples, aprendizado | | Async | Nativo | Django 5.0+ | Via extensões | | Admin | Manual | Integrado | Via extensões | | ORM | Escolha o seu | Django ORM | Escolha o seu | | Curva de aprendizado | Baixa | Média | Baixa |
async def é melhor quando:
├── Operações vinculadas a I/O (I/O-bound: banco de dados, HTTP, arquivos)
├── Muitas conexões simultâneas
├── Funcionalidades em tempo real
├── Comunicação entre microsserviços
└── FastAPI/Starlette/Django ASGI
def (sync) é melhor quando:
├── Operações vinculadas a CPU (CPU-bound)
├── Scripts simples
├── Base de código legada
├── Equipe não familiarizada com async
└── Bibliotecas bloqueantes (sem versão async)
I/O-bound → async (esperando por algo externo)
CPU-bound → sync + multiprocessing (processamento pesado)
Não:
├── Misture sync e async sem cuidado
├── Use bibliotecas sync em código async
└── Force async para trabalho de CPU
Sempre tipe:
├── Parâmetros de função
├── Tipos de retorno
├── Atributos de classe
├── APIs públicas
Pode pular:
├── Variáveis locais (deixe a inferência trabalhar)
├── Scripts de uso único
├── Testes (geralmente)
Quando usar Pydantic:
├── Modelos de requisição/resposta de API
├── Configurações/settings
├── Validação de dados
├── Serialização
Benefícios:
├── Validação em tempo de execução (runtime)
├── Schema JSON gerado automaticamente
├── Integração nativa com FastAPI
└── Mensagens de erro claras
Projeto Pequeno / Script:
├── main.py
├── utils.py
└── requirements.txt
API Média:
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── models/
│ ├── routes/
│ ├── services/
│ └── schemas/
├── tests/
└── pyproject.toml
Aplicação Grande:
├── src/
│ └── myapp/
│ ├── core/
│ ├── api/
│ ├── services/
│ ├── models/
│ └── ...
├── tests/
└── pyproject.toml
O Django suporta async em:
├── Views assíncronas
├── Middleware assíncrono
├── ORM assíncrono (limitado)
└── Implantação ASGI
Quando usar async no Django:
├── Chamadas de API externas
├── WebSocket (Channels)
├── Views de alta concorrência
├── Disparo de tarefas em segundo plano
Design de Model:
├── Models gordos, views magras ("Fat models, thin views")
├── Use managers para consultas comuns
├── Classes base abstratas para campos compartilhados
Views:
├── Baseadas em classe (CBV) para CRUD complexo
├── Baseadas em função (FBV) para endpoints simples
├── Use viewsets com o Django REST Framework (DRF)
Consultas (Queries):
├── select_related() para Chaves Estrangeiras (FKs)
├── prefetch_related() para Muitos-para-Muitos (M2M)
├── Evite consultas N+1
└── Use .only() para campos específicos
Use async def quando:
├── Estiver usando drivers de banco de dados async
├── Fizer chamadas HTTP assíncronas
├── Operações vinculadas a I/O
├── Quiser lidar com concorrência
Use def quando:
├── Operações forem bloqueantes
├── Drivers de banco de dados forem sync
├── Trabalho vinculado a CPU
└── O FastAPI rodará no threadpool automaticamente
Use dependências para:
├── Sessões de banco de dados
├── Usuário atual / Autenticação
├── Configuração
├── Recursos compartilhados
Benefícios:
├── Testabilidade (facilita o mock de dependências)
├── Separação clara de responsabilidades
├── Limpeza automática (yield)
| Solução | Ideal Para | | :--- | :--- | | BackgroundTasks | Tarefas simples, dentro do mesmo processo | | Celery | Workflows complexos e distribuídos | | ARQ | Async, baseado em Redis | | RQ | Fila Redis simples | | Dramatiq | Baseado em atores, mais simples que o Celery |
BackgroundTasks (FastAPI):
├── Operações rápidas
├── Sem necessidade de persistência
├── Disparar e esquecer (fire-and-forget)
└── Mesmo processo
Celery/ARQ:
├── Tarefas de longa duração
├── Necessidade de lógica de repetição (retry)
├── Workers distribuídos
├── Fila persistente
└── Workflows complexos
No FastAPI:
├── Crie classes de exceção customizadas
├── Registre handlers de exceção
├── Retorne um formato de erro consistente
└── Logue sem expor detalhes internos
Padrão:
├── Lance exceções de domínio nos services
├── Capture e transforme nos handlers
└── O cliente recebe uma resposta de erro limpa
| Tipo | Propósito | Ferramentas | | :--- | :--- | :--- | | Unitário | Lógica de negócio | pytest | | Integração | Endpoints de API | pytest + httpx/TestClient | | E2E | Workflows completos | pytest + Banco de Dados |
# Use pytest-asyncio para testes assíncronos
import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
async def test_endpoint():
async with AsyncClient(app=app, base_url="http://test") as client:
response = await client.get("/users")
assert response.status_code == 200
Antes de implementar:
Lembre-se: Padrões de Python são sobre a tomada de decisão para o SEU contexto específico. Não copie código — pense no que serve melhor para a sua aplicação.
development
Princípios de teste de aplicações web. E2E, Playwright, estratégias de auditoria profunda.
development
Revisar o código da UI para conformidade com as Web Interface Guidelines. Use quando solicitado para "revisar minha UI", "checar acessibilidade", "auditar design", "revisar UX" ou "verificar meu site em relação às melhores práticas".
testing
Princípios avançados de análise de vulnerabilidade. OWASP 2025, Segurança da Cadeia de Suprimentos (Supply Chain), mapeamento de superfície de ataque e priorização de riscos.
testing
Padrões e princípios de teste. Estratégias de testes unitários, de integração e mocking.