Brief IA : Starlette 1.0 : L'essor d'un framework Python méconnu mais puissant

Starlette 1.0 : L'essor d'un framework Python méconnu mais puissant

Brief IA
Tom Levy·4 min·0 vues

Starlette 1.0, un framework Python lancé récemment, représente une avancée significative pour les développeurs, étant la base de FastAPI. Kim Christie a commencé son travail sur ce projet en 2018, et sa version 1.0 pourrait renforcer l'adoption de FastAPI tout en améliorant les performances des applications Python.

En bref
1Starlette 1.0, bien que peu connu, est le socle de FastAPI, un framework Python très populaire.
2La version 1.0 introduit des changements majeurs, notamment un nouveau système de gestion de la durée de vie des applications.
3Claude, un agent de codage, a démontré sa capacité à créer et tester des applications avec Starlette 1.0.
💡Pourquoi c'est importantStarlette 1.0 pourrait transformer le développement Python, grâce à son intégration avec des outils d'IA comme Claude.
Le brief IA que lisent les pros

Tu veux les meilleurs outils IA avant les autres ?

On teste et on décrypte les nouveaux outils IA chaque soir, en 5 min. Gratuit.

Inclus dès l'inscription : notre sélection des meilleurs guides & comparatifs IA.

Choisis ton rythme

Gratuit · Pas de spam · Désabonnement en 1 clic

📄
L'analyse en français

Starlette 1.0 : Un tournant pour le framework Python

Starlette 1.0 vient de faire son entrée sur la scène technologique, marquant un tournant significatif pour ce framework Python. Bien que son nom ne soit pas aussi reconnu que d'autres, Starlette est en réalité le pilier sur lequel repose FastAPI, un framework qui a captivé l'attention de nombreux développeurs par sa rapidité et son efficacité. Cette discrétion relative de Starlette contraste avec l'engouement massif que suscite FastAPI, éclipsant ainsi l'importance de Starlette dans l'écosystème Python.

Kim Christie a initié le développement de Starlette en 2018, et il est rapidement devenu un favori parmi les frameworks ASGI de nouvelle génération pour Python. En plus de Starlette, Kim Christie est également connu pour son rôle dans le développement de Django REST Framework, un autre outil essentiel pour les développeurs Python. Malgré le potentiel de Starlette, je n'ai pas intégré ce framework dans mon projet Datasette en raison de l'absence de garanties de stabilité à l'époque. Mon objectif était de garantir une API stable pour les plugins de Datasette, un projet qui, malgré de nombreuses versions alpha, n'a pas encore atteint sa propre version 1.0.

Marcelo Trylesinski a annoncé que Starlette et Uvicorn seraient transférés sur leur compte GitHub, reconnaissant ainsi leurs nombreuses années de contributions et facilitant leur obtention de financements pour ces projets.

Nouveautés de la version 1.0

La version 1.0 de Starlette introduit des modifications substantielles par rapport aux versions précédentes. Les notes de version pour 1.0.0rc1, publiées en février, détaillent ces évolutions. L'un des changements les plus significatifs concerne la gestion du cycle de vie des applications. Auparavant, les développeurs utilisaient les paramètres on_startup et on_shutdown pour gérer l'exécution au démarrage et à l'arrêt. Désormais, un gestionnaire de contexte asynchrone est utilisé pour cette tâche, offrant une approche plus moderne et flexible.

@contextlib.asynccontextmanager
async def lifespan(app):
    async with some_async_resource():
        print("Exécution au démarrage !")
        print("Exécution à l'arrêt !")

Pour ceux qui découvrent Starlette, il se présente comme une fusion naturelle entre Flask et Django, utilisant asyncio pour offrir une expérience de développement fluide et efficace. Cette caractéristique facilite la création d'applications Starlette fonctionnelles à partir d'invites simples, un atout majeur pour les modèles de langage comme les LLM.

Défis et solutions avec les LLM

Un défi persiste cependant : la compatibilité du code généré par les modèles de langage avec la nouvelle version 1.0. Si les modèles ont été entraînés sur des versions antérieures, comment peuvent-ils produire du code compatible avec la dernière version ? J'ai entrepris d'explorer cette question en développant une compétence spécifique.

Développement de compétences avec Claude

Claude, un agent de chat sur claude.ai, possède des compétences intégrées, dont la capacité à créer de nouvelles compétences. J'ai initié une session de chat avec Claude pour tester cette fonctionnalité :

  • J'ai demandé à Claude de cloner Starlette depuis GitHub, en spécifiant qu'il s'agissait de la version 1.0.
  • Ensuite, j'ai demandé la création d'un document markdown de compétence pour cette version, incluant des exemples de code pour chaque fonctionnalité.

Sans même indiquer l'emplacement du dépôt, Claude a exécuté git clone https://github.com/encode/starlette.git. Bien que ce soit l'ancien nom du dépôt, GitHub gère automatiquement les redirections, ce qui a permis à l'opération de se dérouler sans accroc.

Le document de compétence résultant m'a semblé très complet. J'ai remarqué un nouveau bouton en haut que je n'avais pas vu auparavant, intitulé "Copier dans vos compétences". J'ai donc cliqué dessus, et maintenant, ma conversation régulière avec Claude a accès à cette compétence !

Création d'une application de gestion de tâches

Dans une nouvelle conversation, j'ai demandé à Claude de créer une application de gestion de tâches utilisant Starlette. L'application devait inclure des projets, des tâches, des commentaires et des étiquettes. Claude a répondu en développant un clone simplifié de GitHub Issues, utilisant Starlette 1.0, une base de données SQLite via aiosqlite, et un modèle Jinja2.

Claude a également testé l'application de manière autonome :

cd /home/claude/taskflow && timeout 5 python -c "
from database import init_db
asyncio.run(init_db())
print('Base de données initialisée avec succès')
pip install httpx --break-system-packages -q \
&& cd /home/claude/taskflow && \
from starlette.testclient import TestClient
from main import app
client = TestClient(app)
r = client.get('/api/stats')
print('Statistiques :', r.json())
r = client.get('/api/projects')
print('Projets :', len(r.json()), 'trouvés')
r = client.get('/api/tasks')
print('Tâches :', len(r.json()), 'trouvées')
r = client.get('/api/labels')
print('Étiquettes :', len(r.json()), 'trouvées')
r = client.get('/api/tasks/1')
print(f'Tâche 1 : "{t["title"]}" - {len(t["comments"])} commentaires, {len(t["labels"])} étiquettes')
r = client.post('/api/tasks', json={'title':'Tâche de test','project_id':1,'priority':'high','label_ids':[1,2]})
print('Tâche créée :', r.status_code, r.json()['title'])
r = client.post('/api/comments', json={'task_id':1,'content':'Commentaire de test'})
print('Commentaire créé :', r.status_code)
r = client.get('/')
print('Page d'accueil :', r.status_code, '- longueur :', len(r.text))
print('\nTous les tests ont réussi !'

Cette expérience démontre que Claude, en tant qu'agent de codage, est capable non seulement d'écrire du code, mais aussi de le tester efficacement. Le code de l'application est disponible dans mon dépôt de recherche.

Suivez Brief IA

L'actu IA du jour, aussi dans votre fil.

Commentaires