marrow / WebCore

WebCore, the super tiny and blazingly fast modular Python web nanoframework.
MIT License
94 stars 10 forks source link

Dispatch issue during migration from object to resource dispatchers. #200

Open amcgregor opened 1 year ago

amcgregor commented 1 year ago

In a very non-obvious chain of misfortune, attempting to adapt some WebCore 1 endpoints to WebCore 2 semantics resulted in very strange issues. Specifically, attempting to navigate below a collection, to a resource, resulted in the collection itself loading rather than the resource.

Root cause: __call__ (object dispatch replacement for WebCore 1's __default__) was left behind and was eagerly used (is_endpoint=True) when the correct method should have been get. There may be a boundary issue where object dispatch is making an authoritative claim about the suitability of the handler, despite needing dispatch transition.

An MCVE has been produced; __call__ will be called with the remaining path elements in preference to __getitem__ and resource dispatch.

amcgregor commented 1 year ago

Required corrections across two packages:

The second was difficult to initially see as this code path is only used when .replace()ing tuple elements. The MCVE operates correctly using checkouts of these commits.

Visual Proof

Screenshot 2022-12-22 at 14 35 40