Maybe flatten out exception tree
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng việc xem xét hệ thống phân cấp exception hiện tại và các module được đề xuất là exceptions.general, exceptions.http, exceptions.opening, exceptions.kv_store và exceptions.acl. Sau đó kiểm tra generator và cách xử lý xung đột của nó. Công việc được xem là hoàn tất khi đã thống nhất về hệ thống phân cấp và tên, triển khai việc làm phẳng mà không làm thay đổi ngoài dự kiến các quan hệ kế thừa, đồng thời bổ sung các biện pháp bảo vệ chống xung đột.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
This is a ticket for discussion and design, responding to Paul's comment about nested exceptions being awkward to reach for.
--
I spread all the errors out on the table and had a look. We can get a pretty nice result by dividing exceptions across 5 modules, while still saving ourselves from utterly changing the shape of the world (fighting the WIT forevermore). No more subpackages under exceptions, just 5 files:
-
exceptions.general:- All from types.error. I don't see a point in having a common superclass for these at all; there's no semantic, and it doesn't really help catchers narrow down what threw it, as many things throw these.
- Move
HttpInvalid,HttpUser, andHttpIncompletetoexceptions.http, though. - It's unfortunate
GenericErrorexists, as it sound a lot likeUnexpectedFastlyError.UnexpectedFastlyErrorshould become private, as it indicates a bug in our code if it's thrown. People definitely shouldn't be catching it. CatchExceptionorFastlyExceptionif you want a catch-all. - Rename
GenericErrortoOtherErrorto get a little closer to its meaning. "Generic" suggests to me a superset of the other errors, while "Other" unambiguously indicates it's not one of those errors.
-
exceptions.http:ErrorWithDetailwith a better name, likeHttpError.- All the
send-error-detailexceptionserror-with-detailcarries (not currently generated). Map anyErrorWithDetailthat has (optional) details directly onto these, subclassingHttpError. - All the
trailer-errors. RenameErrortoOtherError.
-
exceptions.opening:- All
open-errorerrors. This is actually a pretty semantically cohesive category.
- All
-
exceptions.kv_store:- All
kv-errorerrors. - There's another
GenericErrorthere. Rename it toOtherError.
- All
-
exceptions.acl:- All the
acl-errors. RenameGenericErrortoOtherError.
- All the
Open questions
- Are we going to cause trouble for ourselves by changing the parentage of some errors, like making
error'sHttpInvalidsuperclassexceptions.http.HttpError(or perhaps some other common ancestor)? I rather think so. The common-ancestor approach sounds good. Theerrorsuperclass is worthless, but theerror-with-detailone may have meaning.
Name collisions (if we were to flatten everything into 1 module):
- Error (x2), but we can probably remove the types.error.Error common superclass to make that go away.
- GenericError (x4)
- LimitExceeded (x2)
- TooManyRequests (x2)
- Unsupported (x2)
Paths not taken
We could deduplicate and have, say, ACL stuff and non-ACL stuff throw the same TooManyRequests error, but we'd be losing potentially important info for the catcher. So that's a bad idea. (Also, it could get messy if the 2 TooManyRequests errors later diverge in shape, which might happen if WIT grows subtyping.)
Thus, we must rename exceptions or divide up into modules.
If we flatten and rename, we get into trouble in the future when somebody introduces another InternalError and we never prefixed the KV one into KvStoreInternalError. I'm against preemptively prefixing the heck out of everything, because it gets wordy and this isn't Java. And does one really need to say HttpTrailerError? There are unlikely to be other kinds of trailer errors. But if we don't prefix universally, it becomes awkward to program against because you constantly have to look aside to see what we named things. So let's keep the names short and just make a better __repr__ instead if needed to clarify tracebacks.
Prerequisites
We'd need to add alarm bells about collisions in the generator so we don't accidentally template duplicate names into one module.
- Ngôn ngữ chính
- Python
- Star
- 5
- Fork
- 1
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
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 fastly/compute-sdk-python
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
fastly/compute-sdk-python#116 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
fastly/compute-sdk-python#98 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
fastly/compute-sdk-python#74 ·
-
Add HTTP Downstream Metadata API Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
fastly/compute-sdk-python#61 ·
-
fastly/compute-sdk-python#60 · 1 người được giao ·
Tất cả issue của fastly/compute-sdk-python
Issue tương tự
-
[Bug] reef-hermes tells me to resume with hermes --resume, which does not work from my shell Đang mởarea: harness bug status: needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Human-Agent-Society/reef#625 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 80/100
learningequality/kolibri#15351 · 2 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Name consistency Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
eellak/triplestore#65 · 1 bình luận ·