07:33 <discord_afpy> <Andy K (boss dreamer ou pas)> Salut
08:18 <merwyn> Salut !
08:18 <merwyn> Y aurait-il une liste des sprints des 2 premiers jours quelques parts sur le site ?
08:18 <Mindiell> a priori pas
08:19 <Mindiell> ils doivent être dnas le pretalx je suppose
08:23 <merwyn> Ah si, je viens de les trouver sur le site : https://www.pycon.fr/2024/fr/talks/sprint.html
08:31 <Mindiell> ah merci, du coup j'ai trouvé mon sprint :)
08:44 <discord_afpy> <grewn0uille> Yep la liste des sujets suivant les catégories est accessible depuis la page programme !
08:55 <debnet> @grewn0uille c'est incroyable les images des repas et des petits déjeuner sur le planning. x)
09:11 <entwanne> Ouais ça rend bien !
09:21 <discord_afpy> <grewn0uille> Vous pourrez dire ça à Guillaume 🙂
09:40 <alain_afpy> Sur Lyon − Meetup le 26 septembre - https://discuss.afpy.org/t/sur-lyon-meetup-le-26-septembre/2268
15:31 <discord_afpy> <guyzmal> coucou je reviens avec ma question sur les types relatifs. J'ai une fonction :
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> ```async def create_user(client_test: AsyncClient) -> ((uid: str) -> Coroutine[Any, Any, User])```
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> c'est une fonction injectée en fixture par pytest, et je n'ai pas d'inférence de type quand je déclare une fonction
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> ```async def test_use_user(client_test: AsyncClient, create_user):```
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> donc je dois ajouter un typehint explicite.
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> J'aimerais faire idéalement un
15:31 <discord_afpy> <guyzmal>
15:31 <discord_afpy> <guyzmal> ```async def test_use_user(client_test: AsyncClient, create_user: ReturnedType[create_user]:```
15:31 <discord_afpy> <guyzmal>
15:32 <discord_afpy> <guyzmal> (et oups sorry, j'ai oublié qu'ici on est sur un canal partagé avec IRC et que j'ai probablement floodé IRC 🫠 )
15:32 <discord_afpy> <guyzmal> toutes mes plus plates 🙏
15:35 <discord_afpy> <guyzmal> (et pour follow-up sur ma question, j'apprécierais d'avoir via le LSP de mon éditeur un moyen de jump directement dans la fixture via le type du paramètre)
15:37 <discord_afpy> <guyzmal> (comme compromis, j'ai fait un `Annotated[Callable[[str], Coroutine[Any, Any, User]], create_user]` ce qui permet quand même d'informer le lecteur du lien logique, mais 🤢 )
15:44 <entwanne> c'est surtout que le message n'apparaît que partiellement sur IRC
15:47 <entwanne> Déjà tu parles de pytest, ça ne me paraît pas spécialement pertinent de types les paramètres (surtout les fixtures) dans ce cas-là car je ne vois pas quelles garanties ça apporte
15:49 <entwanne> (dans le cadre des tests on veut que toutes les branches du code soient exécutées tout le temps, donc a priori il n'y a pas de risque que des bugs s'y glissent à cause de problème de types — si c'est le cas ils seraient détectés directement)
15:50 <entwanne> Maintenant, si la fixture renvoie effectivement une fonction, ça ne me paraît pas absurde de typer le paramètre comme étant une fonction
15:55 <entwanne> Et sachant que tu peux aussi stocker le type `Callable[[str], Coroutine[Any, Any, User]]` dans un alias pour l'utiliser à plusieurs endroits
15:58 <alain_afpy> AFPy - https://mamot.fr/@AFPy/113147939591047178
16:12 <discord_afpy> <guyzmal> entwanne - ah ok pour la passerelle
16:13 <discord_afpy> <guyzmal> en même temps je pourrais ressortir mon tmux poussièreux avec wechat dedans 😂
16:14 <discord_afpy> <guyzmal> en soit, je vois deux avantages à typer les fixtures : ça permet de facilement goto vers l'implémentation quand on est dans le code du test, et assurer que si on modifie la fixture pour un usage dans un test, tous les autres usages pètent aussi (et pas au moment du runtime).
16:15 <entwanne> justement c'est des tests : si ça pète ce n'est pas au moment du runtime
16:15 <discord_afpy> <guyzmal> du runtime des tests*
16:17 <entwanne> est-ce que ça ne prend pas plus de temps de lancer mypy sur les fichiers de tests que juste exécuter les tests ? :D
16:18 <discord_afpy> <guyzmal> beh je lance pas mypy, j'ai un LSP qui tourne dans mon vim
16:18 <discord_afpy> <fred.et.rick> ça dépend, si c’est des tests d’integration qui passent par une base de données foireuses, clairement, mypy est plus rapide
16:19 <discord_afpy> <guyzmal> surtout, c'est instantané, au moment où j'écris la ligne de code je sais que j'ai fait une connerie (ou pas)
16:19 <discord_afpy> <guyzmal> et je sais d'où il vient, où il va, c'est déterministe
16:21 <discord_afpy> <fred.et.rick> si tu modifie le type de retour d’une fonction, vim t’highlight instantanément tout les fichiers dans lesquels tu utilise cette fonction ?
16:21 <discord_afpy> <guyzmal> ça dépend, perso je n'utilise pas de « liste de fichiers »
16:23 <discord_afpy> <guyzmal> par contre j'utilise les quickfixes, donc je peux sortir la liste de toutes les lignes qui ont une erreur en un keystroke
16:25 <entwanne> Enfin en tout cas comme je disais je ne vois pas le souci à avoir quelque chose comme ça si tu veux éviter de te répéter : https://wyz.fr/2A-FZ
16:27 <discord_afpy> <fred.et.rick> je ne vois pas d’autre solution
16:32 <discord_afpy> <guyzmal> c'est ce que j'ai fait au final
16:32 <discord_afpy> <guyzmal> n'empèche qu'un type relatif ça aurait été cool ☺
16:32 <discord_afpy> <guyzmal> je vais finir par proposer une PEP pour ça 🤪
16:45 <entwanne> Je pense que ce sera difficilement acceptable en l'état, avec `ReturnedType[create_user]` tu passes dans les crochets quelque chose qui n'est pas un type, donc ça risque de bloquer
16:47 <discord_afpy> <guyzmal> justement, c'est bien ce qu'il manque. Tout objet a un type intrinsèque connu statiquement, qu'il soit litéral ou inféré, donc il n'y a pas de raison qu'on ne puisse faire que des types déclarés, et pas de types relatifs !
16:49 <discord_afpy> <guyzmal> Dans mon exemple, `def create_user()` a un type résolvable par un analyseur statique, et d'ailleurs si j'utilise cette fonction directement comme foncteur dans une autre fonction, mypy saura gérer l'inférence pour typer les symboles de cette autre fonction !
16:50 <entwanne> ce que je veux dire que que les crochets ne sont a priori pas prévus pour ça, ça ne peut pas être des parenthèses non plus parce que ça s'apparenterait à quelque chose de dynamique, donc ça risquerait de se confronter à la question de savoir quelle forme ça devrait avoir
16:51 <discord_afpy> <guyzmal> ah ça ! c'est une bien bonne question 😅
16:54 <discord_afpy> <guyzmal> en vrai, il n'y a pas de raison de ne pas pouvoir utiliser quelque chose comme `type()` qui a un rôle en runtime, et pourrait faire la passerelle sur les typehints, la sémantique est similaire:
16:54 <discord_afpy> <guyzmal>
16:54 <discord_afpy> <guyzmal> ```def test_use_create_user(client: Client, create_user: type(create_user)):```
16:54 <discord_afpy> <guyzmal>
16:54 <discord_afpy> <guyzmal> je ne trouverais pas ça choquant, même si je sens la levée de bois vert, et le bikeshed de l'enfer ! 😂
16:57 <entwanne> Mais pour le coup ce n'est pas la même chose : type(create_user) ça va être function, alors que le type statique associé au nom create_user peut-être autre chose (un Callable plus précis, un protocole, etc.)
16:58 <discord_afpy> <guyzmal> tu veux dire que reveal_type et type ne retourneront pas la même chose ?
17:00 <entwanne> oui
17:06 <discord_afpy> <guyzmal> ok ! ahah, beh c'est comme en typescript 🤡
17:17 <entwanne> aucune idée
21:33 <MaVr1X> allo tout le monde sa vas bien?
22:45 <MaVr1X> allo