@@ -198,14 +198,12 @@ async def create_websocket_response(
198198
199199 async def execute_operation (
200200 self ,
201- request : Request ,
201+ request_adapter : AsyncHTTPRequestAdapter ,
202202 request_data : GraphQLRequestData ,
203203 context : Context ,
204204 root_value : Optional [RootValue ],
205205 allowed_operation_types : set [OperationType ],
206206 ) -> ExecutionResult :
207- request_adapter = self .request_adapter_class (request )
208-
209207 assert self .schema
210208
211209 if request_data .protocol == "multipart-subscription" :
@@ -279,17 +277,18 @@ async def run(
279277 context : Context = UNSET ,
280278 root_value : Optional [RootValue ] = UNSET ,
281279 ) -> Union [Response , WebSocketResponse ]:
282- root_value = (
283- await self .get_root_value (request ) if root_value is UNSET else root_value
284- )
285-
286280 if self .is_websocket_request (request ):
287281 websocket_subprotocol = await self .pick_websocket_subprotocol (request )
288282 websocket_response = await self .create_websocket_response (
289283 request , websocket_subprotocol
290284 )
291285 websocket = self .websocket_adapter_class (self , request , websocket_response )
292286
287+ root_value = (
288+ await self .get_root_value (request )
289+ if root_value is UNSET
290+ else root_value
291+ )
293292 context = (
294293 await self .get_context (request , response = websocket_response )
295294 if context is UNSET
@@ -324,7 +323,16 @@ async def run(
324323 request = cast ("Request" , request )
325324
326325 request_adapter = self .request_adapter_class (request )
326+ if request_adapter .method == "OPTIONS" :
327+ # We are in a CORS preflight request, we can return a 200 OK by default
328+ # as further checks will need to be done by the middleware
329+ raise HTTPException (200 , "" )
330+
327331 sub_response = await self .get_sub_response (request )
332+
333+ root_value = (
334+ await self .get_root_value (request ) if root_value is UNSET else root_value
335+ )
328336 context = (
329337 await self .get_context (request , response = sub_response )
330338 if context is UNSET
@@ -366,7 +374,7 @@ async def run(
366374 is_strict = request_data .protocol == "http-strict"
367375 try :
368376 result = await self .execute_operation (
369- request = request ,
377+ request_adapter = request_adapter ,
370378 request_data = request_data ,
371379 context = context ,
372380 root_value = root_value ,
0 commit comments