Dependencias en Python
Depends inyecta la preparación compartida, y el framework la cachea por petición.
from fastapi import Depends, FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
def obtener_bd():
bd = {"rows": ["python", "rust"]}
try:
yield bd
finally:
bd["closed"] = True
def paginacion(limit: int = 10, offset: int = 0):
return {"limit": min(limit, 50), "offset": offset}
@app.get("/langs")
def langs(bd=Depends(obtener_bd), pagina=Depends(paginacion)):
filas = bd["rows"][pagina["offset"]:pagina["offset"] + pagina["limit"]]
return {"rows": filas, "page": pagina}
cliente = TestClient(app)
print(cliente.get("/langs", params={"limit": 1}).json())
app.dependency_overrides[obtener_bd] = lambda: {"rows": ["falso"]}
print(cliente.get("/langs").json()["rows"])
Cómo funciona
- Una dependencia es solo un callable con sus propios parámetros.
- Puede usar yield, y eso le da una fase de limpieza.
- Sobrescribir una es la forma en que las pruebas reemplazan la base de datos.
Palabras clave y builtins usados aquí
deffinallyintlambdaminprintreturntryyield
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 687
- Tokens
- 229
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 125 segundos.
Paso 1 de 3 en Dependencias y async; paso 10 de 19 en Servicios web y acceso a datos.