python / python/typeshed

Use of generics in requests typing

Đang mở
#10,899 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Python
Star
5.1k
Fork
2.1k
Merge trung bình
1 ngày 19 giờ
Pull request đã merge (30 ngày)
82

Mô tả

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()

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với phần được liên kết trong requests/requests/sessions.pyi quanh các dòng 97-103, sau đó xem lại cách Session và Request được định kiểu. Sử dụng ví dụ pyright được cung cấp để đánh giá xem các kiểu tham số generic có vẫn cụ thể sau khi gán hay không; được xem là hoàn tất khi thiết kế generic được đề xuất được định nghĩa nhất quán cho các lớp bị ảnh hưởng và giữ nguyên các kiểu trường đã chọn.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
tooling
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.