Retour à l'accueil

Starlette 1.0.0 : suppressions et corrections

Starlette 1.0.0 — première version stable avec suppression de l'API obsolète comme on_startup et @route. Suivi de session ajouté, WebSocket et analyse de formulaires corrigés. Guide de migration détaillé pour les développeurs.

Starlette 1.0.0 sortie — Nettoyage de l'API
Advertisement 728x90

## Starlette 1.0.0 : Principales modifications dans la version stable

Starlette a atteint sa première version stable 1.0.0 après près de huit ans de développement. Cette sortie se concentre sur la suppression des API dépréciées, la correction de bugs dans la gestion des WebSocket, des formulaires et des fichiers statiques. Le framework reste la base de FastAPI et est utilisé dans le SDK Python MCP pour les applications IA.

Nouvelles fonctionnalités

La version 1.0.0 ajoute l'accès aux sessions et le suivi des modifications dans SessionMiddleware. Cela permet au middleware d'enregistrer les lectures et modifications des données de session sans astuces supplémentaires.

La version 1.0.0rc1 a introduit un état générique pour WebSocket. L'état de connexion est maintenant typé, simplifiant le travail avec TypedDict ou les modèles Pydantic dans les gestionnaires asynchrones.

Google AdInline article slot

Corrections de bugs

Cette sortie corrige plusieurs problèmes critiques :

  • Gestion des échecs WebSocket dans StreamingResponse et FileResponse : les réponses ferment maintenant correctement les connexions sans fuites.
  • FormParser utilise bytearray pour l'accumulation des champs, réduisant la consommation mémoire lors de l'analyse de formulaires volumineux.
  • MultiPartParser.parse() déplace parser.finalize() dans un try/except, évitant les exceptions avec des données multipart incomplètes.

Corrections supplémentaires de rc1 :

  • L'en-tête Content-Range pour les réponses 416 inclut l'unité bytes.
  • StaticFiles gère les zéros bytes dans les chemins sans planter.
  • L'analyse des Range utilise un tri fusionné pour plus de précision.
  • Les multiples ranges dans les réponses utilisent Content-Type au lieu de Content-Range.
  • Les frontières byterange multipart appliquent les terminaisons CRLF.
  • FileResponse ne modifie pas les en-têtes lors des requêtes range.
  • Les réponses CORS renvoient une origine explicite avec credentials.
  • Jinja2Templates active autoescape par défaut.

Éléments dépréciés supprimés

Starlette 1.0.0 nettoie l'API en supprimant les fonctions dépréciées. Une migration est requise pour les projets sur des versions antérieures.

Google AdInline article slot

Voici la liste complète des suppressions :

  • Les paramètres on_startup et on_shutdown de Starlette et Router. Remplacés par lifespan.
  • Le décorateur on_event(). Utilisez lifespan.
  • La méthode add_event_handler(). Utilisez lifespan.
  • Les méthodes startup() et shutdown() de Router.
  • Le décorateur @app.route(). Utilisez Route dans routes.
  • Le décorateur @app.websocket_route(). Utilisez WebSocketRoute dans routes.
  • Le décorateur @app.exception_handler(). Utilisez exception_handlers.
  • Le décorateur @app.middleware(). Utilisez middleware.
  • La fonction iscoroutinefunction_or_partial() de starlette.routing.
  • Le paramètre **env_options de Jinja2Templates. Passez un jinja2.Environment prêt via env.
  • La signature dépréciée TemplateResponse(name, context). Nécessite request : TemplateResponse(request, name, ...).
  • Le paramètre method déprécié de FileResponse.

Changements de comportement

Jinja2Templates nécessite maintenant que jinja2 soit installé au moment de l'import, et non seulement à l'instanciation. Cela accélère le diagnostic des dépendances dans CI/CD.

Migration vers 1.0.0

  • Remplacez tous les on_startup/on_shutdown par le contexte lifespan :
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: Starlette):
    # startup
    yield
    # shutdown

app = Starlette(lifespan=lifespan, routes=[...])
  • Déplacez les routes dans la liste routes :
routes = [
    Route("/", endpoint=home),
    WebSocketRoute("/ws", endpoint=ws_endpoint),
]
  • Mettez à jour exception_handlers et middleware de la même manière.
  • Pour Jinja2Templates, préparez env à l'avance :
import jinja2
env = jinja2.Environment(autoescape=True)
templates = Jinja2Templates(env=env)

Testez les requêtes range et les formulaires multipart après la mise à niveau.

Google AdInline article slot

Points clés

  • Stabilité de l'API : Tous les éléments dépréciés supprimés, rendant le code plus propre et plus prévisible.
  • WebSocket et Streaming : Gestion des échecs corrigée, prêt pour la production.
  • Formulaires et Fichiers : Mémoire optimisée et analyse multipart/range.
  • Remplacement par Lifespan : Crochets de cycle de vie unifiés, compatibles avec ASGI 3.0+.
  • Jinja2 : Exigences de dépendances strictes et autoescape par défaut.

— Editorial Team

Advertisement 728x90

Lire ensuite