La jerarquía de loggers y por qué print no escala
Cómo funciona el árbol de loggers en Python, por qué `logging.getLogger(__name__)` es el patrón correcto y qué rompe si se configura mal.
Cómo funciona el árbol de loggers en Python, por qué `logging.getLogger(__name__)` es el patrón correcto y qué rompe si se configura mal.
Qué mide realmente coverage y cómo Hypothesis complementa sus límites generando y reduciendo casos que falsifican propiedades invariantes.
Cómo reemplazar dependencias externas en tests de Python usando Mock, MagicMock y patch, con verificación de llamadas y errores comunes.
Cómo usar fixtures con scope, parametrize y conftest.py para construir suites de test mantenibles en pytest.
Procesa respuestas HTTP grandes en chunks con requests e httpx async, y maneja comunicación bidireccional con WebSockets usando la librería websockets.
Uso de `httpx.Client` y `AsyncClient` con timeouts estructurados, streaming y multiplexación HTTP/2 en una sola librería.
Uso idiomático de requests para HTTP en Python: Session, timeout obligatorio, raise_for_status, retry con backoff y manejo correcto de respuestas binarias y JSON.
Criterios concretos para decidir si asyncio resuelve tu problema o lo complica, con foco en I/O-bound vs CPU-bound y el efecto de propagación async.
Por qué time.sleep y requests.get congelan el event loop entero, y cómo usar asyncio.to_thread o run_in_executor para evitarlo.
Cómo implementar `__aenter__`/`__aexit__`, async generators y `async for` para gestionar recursos y streams sin bloquear el event loop.