@@ -198,14 +198,12 @@ async def create_websocket_response(
198
198
199
199
async def execute_operation (
200
200
self ,
201
- request : Request ,
201
+ request_adapter : AsyncHTTPRequestAdapter ,
202
202
request_data : GraphQLRequestData ,
203
203
context : Context ,
204
204
root_value : Optional [RootValue ],
205
205
allowed_operation_types : set [OperationType ],
206
206
) -> ExecutionResult :
207
- request_adapter = self .request_adapter_class (request )
208
-
209
207
assert self .schema
210
208
211
209
if request_data .protocol == "multipart-subscription" :
@@ -279,17 +277,18 @@ async def run(
279
277
context : Context = UNSET ,
280
278
root_value : Optional [RootValue ] = UNSET ,
281
279
) -> Union [Response , WebSocketResponse ]:
282
- root_value = (
283
- await self .get_root_value (request ) if root_value is UNSET else root_value
284
- )
285
-
286
280
if self .is_websocket_request (request ):
287
281
websocket_subprotocol = await self .pick_websocket_subprotocol (request )
288
282
websocket_response = await self .create_websocket_response (
289
283
request , websocket_subprotocol
290
284
)
291
285
websocket = self .websocket_adapter_class (self , request , websocket_response )
292
286
287
+ root_value = (
288
+ await self .get_root_value (request )
289
+ if root_value is UNSET
290
+ else root_value
291
+ )
293
292
context = (
294
293
await self .get_context (request , response = websocket_response )
295
294
if context is UNSET
@@ -324,7 +323,16 @@ async def run(
324
323
request = cast ("Request" , request )
325
324
326
325
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
+
327
331
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
+ )
328
336
context = (
329
337
await self .get_context (request , response = sub_response )
330
338
if context is UNSET
@@ -366,7 +374,7 @@ async def run(
366
374
is_strict = request_data .protocol == "http-strict"
367
375
try :
368
376
result = await self .execute_operation (
369
- request = request ,
377
+ request_adapter = request_adapter ,
370
378
request_data = request_data ,
371
379
context = context ,
372
380
root_value = root_value ,
0 commit comments