Async functools.partial calls return an unawaited coroutine
Đá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
- 72/100
Hướng nghiên cứu
Bắt đầu từ _CallAndUpdateTrace, nơi kiểm tra coroutine đang xem partial.__call__ thay vì hàm được bọc. Tái hiện bằng đoạn mã trong issue, đoạn này bọc một greet bất đồng bộ trong functools.partial và gọi fire.Fire(..., command=[]). Hoàn thành khi partial trả về chuỗi đã await Rio!, các partial đồng bộ vẫn hoạt động như trước, và các test hồi quy bao phủ cả hai trường hợp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
On current master (716bbc23d7eca949fdb682172283c8d18f742cb6), passing an async function to Fire works, but wrapping it in functools.partial returns the coroutine without running it:
import functools
import inspect
import fire
async def greet(name, suffix="!"):
return name + suffix
result = fire.Fire(functools.partial(greet, "Rio"), command=[])
print(type(result).__name__) # coroutine, rather than str
if inspect.iscoroutine(result):
result.close()
Expected: the command prints Rio! and returns that string. Instead it displays help for the coroutine object and never executes the async function.
_CallAndUpdateTrace inspects partial.__call__, which is not recognized as a coroutine function, rather than the partial itself. Ordinary async callable objects are not affected.
I plan to send a small fix that unwraps the partial only when detecting coroutines, leaving argument parsing unchanged. Regression coverage will include synchronous and asynchronous partials. This does not change event-loop handling or introduce a new async execution mode.
- Ngôn ngữ chính
- Python
- Star
- 28.2k
- Fork
- 1.5k
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọ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 google/python-fire
-
WrappedJoin adds an empty line before an oversized first itemCó thể đã có người làm @GreedyC đã nhận 13 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
google/python-fire#705 ·
-
Brace-based template arguments crash literal parsing with TypeErrorCó thể đã có người làm @codewithfourtix đã nhận 13 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
google/python-fire#703 ·
-
Test suite fails on Windows: unescaped path regex in testArgPassing, NamedTemporaryFile reopen in testFileNameFireCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
google/python-fire#693 ·
-
Mio ❤️Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 1/100
google/python-fire#709 · 2 bình luận ·
-
2083Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 5/100
google/python-fire#708 ·
Tất cả issue của google/python-fire
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
aws-samples/sample-per-model-bedrock#243 ·
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 66/100
FuRongJun-1999/dsh-memory#404 ·
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 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug frontend
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
PennyLaneAI/catalyst#3337 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Workflow.schedule stops when a cron deadline passes before sleepCó thể đã có người làm @HuaTNA đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày