Use of generics in requests typing
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
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- 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