{"record":{"id":"891dedb05136bedb","repo":"aio-libs/aiohttp","slug":"unsupported-order-order-r","errorCode":null,"errorMessage":"Unsupported order {order!r}","messagePattern":"Unsupported order (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"aiohttp/payload.py","lineNumber":137,"sourceCode":"                return factory(data, *args, **kwargs)\n        raise LookupError()\n\n    def register(\n        self, factory: PayloadType, type: Any, *, order: Order = Order.normal\n    ) -> None:\n        if order is Order.try_first:\n            self._first.append((factory, type))\n        elif order is Order.normal:\n            self._normal.append((factory, type))\n            if isinstance(type, Iterable):\n                for t in type:\n                    self._normal_lookup[t] = factory\n            else:\n                self._normal_lookup[type] = factory\n        elif order is Order.try_last:\n            self._last.append((factory, type))\n        else:\n            raise ValueError(f\"Unsupported order {order!r}\")\n\n\nclass Payload(ABC):\n    _default_content_type: str = \"application/octet-stream\"\n    _size: int | None = None\n    _consumed: bool = False  # Default: payload has not been consumed yet\n    _autoclose: bool = False  # Default: assume resource needs explicit closing\n\n    def __init__(\n        self,\n        value: Any,\n        headers: (\n            CIMultiDict[str] | dict[str, str] | Iterable[tuple[str, str]] | None\n        ) = None,\n        content_type: None | str | _SENTINEL = sentinel,\n        filename: str | None = None,\n        encoding: str | None = None,\n        **kwargs: Any,","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/aio-libs/aiohttp/blob/d041d4d0fd48c3f0832084d33be16cf1c4835f85/aiohttp/payload.py#L119-L155","documentation":"Raised by PayloadRegistry.register when the order argument is not one of the Order enum members (normal, try_first, try_last). Order is a str-based enum, but the registry uses identity comparison (order is Order.xxx), so passing the raw string 'normal' or an integer does not match any branch and falls through to the ValueError. This guards the internal payload-factory registration table from invalid ordering hints.","triggerScenarios":"Calling PAYLOAD_REGISTRY.register(factory, type, order='try_first') with a plain string instead of Order.try_first; calling register_payload(..., order=0) or order=None; writing a custom register call with a typo or a value imported from the wrong module.","commonSituations":"Third-party libraries extending aiohttp's payload registry with a custom Payload subclass; copy-pasting example code that used strings before Order was introduced; passing a value loaded from config/JSON.","solutions":["Import and pass the Order enum member: from aiohttp.payload import Order; register_payload(MyPayload, MyType, order=Order.try_first).","If order comes from external data, map it explicitly: order = {'first': Order.try_first, 'last': Order.try_last}.get(raw, Order.normal).","Leave order at its default (Order.normal) unless you have a specific reason to change priority."],"exampleFix":"# before\nfrom aiohttp.payload import register_payload\nregister_payload(MyPayload, MyType, order='try_first')\n\n# after\nfrom aiohttp.payload import register_payload, Order\nregister_payload(MyPayload, MyType, order=Order.try_first)","handlingStrategy":"type-guard","validationCode":"from aiohttp.payload import Order\nif not isinstance(order, Order):\n    order = Order.normal\nPAYLOAD_REGISTRY.register(factory, type, order=order)","typeGuard":"from aiohttp.payload import Order\ndef is_order(v) -> bool:\n    return isinstance(v, Order)","tryCatchPattern":"try:\n    register_payload(factory, type, order=order)\nexcept ValueError as e:\n    if 'Unsupported order' in str(e):\n        register_payload(factory, type, order=Order.normal)\n    else:\n        raise","preventionTips":["Always pass Order enum members, never raw strings.","Map external/config order values to Order explicitly.","Register custom payloads at import time with a known order, not from dynamic input."],"tags":["payload","registry","enum","api-misuse"],"backgroundTag":null,"analyzedSha":"d041d4d0fd48c3f0832084d33be16cf1c4835f85","analyzedAt":"2026-08-11T20:44:15.550Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}