File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2222from .base import AbstractEndpoint , EndpointParams
2323from ..error import Rejection , BadRequestRejection
2424from ..operation import Operation
25- from ..utils import UnionModel
2625from aio_pika .abc import AbstractIncomingMessage , AbstractRobustQueue
2726
2827
@@ -81,9 +80,6 @@ async def _consumer(self, message: AbstractIncomingMessage):
8180 def _decode_payload (self , message : AbstractIncomingMessage ) -> I :
8281 try :
8382 payload : I = self ._params .decode (message .body , self ._op .message_type )
84- # This trick is used to support union types in receivers
85- if isinstance (payload , UnionModel ):
86- payload = cast (I , payload .root )
8783 except ValidationError as e :
8884 raise BadRequestRejection (e )
8985 return payload
Original file line number Diff line number Diff line change 1515
1616from functools import cache
1717from pydantic import BaseModel , RootModel
18- from typing import TypeVar , Union
18+ from typing import TypeVar , Union , cast
1919
2020T = TypeVar ("T" , bound = BaseModel )
2121U = TypeVar ("U" )
2222
2323
24- class UnionModel (RootModel [U ]): ...
24+ class UnionModel (RootModel [U ]):
25+ """A trick to allow unions as constructor types"""
2526
2627
2728def encode_message (message : T ) -> bytes :
2829 return message .model_dump_json ().encode ()
2930
3031
3132def decode_message (message : bytes , schema : type [T ]) -> T :
32- return schema .model_validate_json (message )
33+ payload = schema .model_validate_json (message )
34+ if isinstance (payload , UnionModel ):
35+ payload = cast (T , payload .root )
36+ return payload
3337
3438
3539@cache
You can’t perform that action at this time.
0 commit comments