@@ -24,11 +24,14 @@ class OperationBase:
2424 view : ViewBase
2525 ref : Optional [AtomicOperationRef ]
2626 data : OperationDataType
27- data_layer_view_dependencies : Dict [str , Any ]
2827 op_type : str
2928
29+ @property
30+ def http_method (self ) -> HTTPMethod :
31+ raise NotImplementedError
32+
3033 @classmethod
31- async def prepare (
34+ def prepare (
3235 cls ,
3336 action : str ,
3437 request : Request ,
@@ -55,22 +58,21 @@ async def prepare(
5558
5659 view = view_cls (request = request , jsonapi = jsonapi )
5760
58- data_layer_view_dependencies : Dict [str , Any ] = await jsonapi .handle_view_dependencies (
59- request = request ,
60- view_cls = view_cls ,
61- method = operation_cls .http_method ,
62- )
6361 return operation_cls (
6462 jsonapi = jsonapi ,
6563 view = view ,
6664 ref = ref ,
6765 data = data ,
68- data_layer_view_dependencies = data_layer_view_dependencies ,
6966 op_type = action ,
7067 )
7168
7269 async def get_data_layer (self ) -> BaseDataLayer :
73- return await self .view .get_data_layer (self .data_layer_view_dependencies )
70+ data_layer_view_dependencies : Dict [str , Any ] = await self .jsonapi .handle_view_dependencies (
71+ request = self .view .request ,
72+ view_cls = self .view .__class__ ,
73+ method = self .http_method ,
74+ )
75+ return await self .view .get_data_layer (data_layer_view_dependencies )
7476
7577 async def handle (self , dl : BaseDataLayer ):
7678 raise NotImplementedError
@@ -135,6 +137,9 @@ class OperationAdd(ListOperationBase):
135137 http_method = HTTPMethod .POST
136138
137139 async def handle (self , dl : BaseDataLayer ):
140+ # use outer schema wrapper because we need this error path:
141+ # `{'loc': ['data', 'attributes', 'name']`
142+ # and not `{'loc': ['attributes', 'name']`
138143 data_in = self .jsonapi .schema_in_post (data = self .data )
139144 response = await self .view .process_create_object (
140145 dl = dl ,
@@ -151,6 +156,10 @@ async def handle(self, dl: BaseDataLayer):
151156 # TODO: clear to-one relationships
152157 pass
153158 # TODO: handle relationship update requests (relationship resources)
159+
160+ # use outer schema wrapper because we need this error path:
161+ # `{'loc': ['data', 'attributes', 'name']`
162+ # and not `{'loc': ['attributes', 'name']`
154163 data_in = self .jsonapi .schema_in_patch (data = self .data )
155164 obj_id = self .ref and self .ref .id or self .data and self .data .id
156165 response = await self .view .process_update_object (
0 commit comments