python / python/typeshed

Use of generics in requests typing

Ouverte
#10,899 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.