Use of generics in requests typing
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 5.1k
- Forks
- 2.1k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 82
Description
Currently the requests typing makes heavy use of unions. For example the parameter type is:
https://github.com/python/typeshed/blob/f99e8b0615182bb0f17d9d126019d8d72c207ab3/stubs/requests/requests/sessions.pyi#L97-L103
The issue with this approach is that the type system can't keep track of which type has been chosen for a given field. For example, running pyright on this code:
from requests import Session
session = Session()
session.params = {}
reveal_type(session.params)
Shows us that the type system immediately "forgets" that our parameters are definitely in a dictionary:
test.py:5:13 - information: Type of "session.params" is "dict[str | bytes | int | float, str | bytes | int | float | Iterable[str | bytes | int | float] | None]"
0 errors, 0 warnings, 1 information
If we could make Session (as well as other classes such as Request) generic over the parameter type (as well as other fields), then we could keep track of this kind of state. For example, it might look like:
session: Session[dict] = Session()
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la section liée de requests/requests/sessions.pyi autour des lignes 97-103, puis examinez comment Session et Request sont typés. Utilisez l’exemple pyright fourni pour évaluer si les types de paramètres génériques restent spécifiques après une affectation ; le travail est considéré comme terminé lorsque la conception générique proposée est définie de manière cohérente pour les classes concernées et préserve les types de champs sélectionnés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100