assert_name checks each character in a Python generator
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- python
- Lĩnh vực
- backend-api-design, performance
Hướng nghiên cứu
Bắt đầu với src/graphql/type/assert_name.py và đọc assert_name() cùng các bài kiểm thử xác thực tên hiện có. Đối chiếu đường đi nhanh được đề xuất bằng isascii() và isidentifier() với mẫu tên GraphQL đã chỉ định, đồng thời giữ nguyên các lỗi hiện tại đối với tên không hợp lệ. Chạy các bài kiểm thử liên quan và so sánh thời gian dựng schema; công việc hoàn tất khi tên hợp lệ đi theo đường đi nhanh và tên không hợp lệ giữ nguyên hành vi hiện tại.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
assert_name() in src/graphql/type/assert_name.py runs for every type, field, argument and enum value name when a schema is built.
It checks the name tail with all(is_name_continue(char) for char in name[1:]).
This runs one Python function call for each character.
For a schema of the GitHub size, this check uses about one quarter of the build time.
| Situation | Now | With the proposed fix | Change |
|---|---|---|---|
build_ast_schema on the GitHub SDL (assume_valid=True) |
14.40 ms | 10.79 ms | 25.0% less time |
build_client_schema on the GitHub introspection result |
13.97 ms | 10.43 ms | 25.3% less time |
assert_name on 10,000 valid names |
6.94 ms | 0.69 ms | 90.0% less time |
assert_name on 10,000 invalid names |
13.32 ms | 8.62 ms | 35.3% less time |
parse on the large query (does not call assert_name) |
38.43 ms | 37.90 ms | No change (within noise) |
These are the best of 15 runs, median of 7 alternating processes per version.
Proposed fix: for an ASCII string, str.isidentifier() is true exactly for [_a-zA-Z][_a-zA-Z0-9]*.
Use name.isascii() and name.isidentifier() to return valid names early, and keep the current error checks and messages for invalid names.
Environment: CPython 3.12.13, Linux x86-64, AMD EPYC 9R14, graphql-core main at 0aaea71.
- Ngôn ngữ chính
- Python
- Star
- 534
- Fork
- 159
- Merge trung bình
- 1 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 11
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Không có 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.
Issue khác của graphql-python/graphql-core
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
graphql-python/graphql-core#302 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 35/100
graphql-python/graphql-core#278 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
graphql-python/graphql-core#257 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
graphql-python/graphql-core#223 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
graphql-python/graphql-core#220 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của graphql-python/graphql-core
Issue tương tự
-
bug good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
docs size:S
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
Gathin23/cleanyourtv#3464 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
strawberry-graphql/strawberry#4794 ·
Maintainer thường phản hồi trong vòng 1 ngày