diff --git a/strawberry/http/async_base_view.py b/strawberry/http/async_base_view.py index d1f1d941da..adedb6b970 100644 --- a/strawberry/http/async_base_view.py +++ b/strawberry/http/async_base_view.py @@ -205,17 +205,31 @@ async def execute_operation( if isinstance(request_data, list): # batch GraphQL requests - tasks = [ - self.execute_single( - request=request, - request_adapter=request_adapter, - sub_response=sub_response, - context=context, - root_value=root_value, - request_data=data, - ) - for data in request_data - ] + if not self.schema.config.batching_config["share_context"]: + tasks = [ + self.execute_single( + request=request, + request_adapter=request_adapter, + sub_response=sub_response, + # create a new context for each request data + context=await self.get_context(request, response=sub_response), + root_value=root_value, + request_data=data, + ) + for data in request_data + ] + else: + tasks = [ + self.execute_single( + request=request, + request_adapter=request_adapter, + sub_response=sub_response, + context=context, + root_value=root_value, + request_data=data, + ) + for data in request_data + ] return await asyncio.gather(*tasks) diff --git a/strawberry/http/sync_base_view.py b/strawberry/http/sync_base_view.py index 532ca79b7e..906b8fbe01 100644 --- a/strawberry/http/sync_base_view.py +++ b/strawberry/http/sync_base_view.py @@ -123,6 +123,19 @@ def execute_operation( if isinstance(request_data, list): # batch GraphQL requests + if not self.schema.config.batching_config["share_context"]: + return [ + self.execute_single( + request=request, + request_adapter=request_adapter, + sub_response=sub_response, + # create a new context for each request data + context=self.get_context(request, response=sub_response), + root_value=root_value, + request_data=data, + ) + for data in request_data + ] return [ self.execute_single( request=request, diff --git a/strawberry/schema/config.py b/strawberry/schema/config.py index 4fe74d7f68..c7e2720405 100644 --- a/strawberry/schema/config.py +++ b/strawberry/schema/config.py @@ -12,6 +12,7 @@ class BatchingConfig(TypedDict, total=False): enabled: Required[bool] max_operations: int + share_context: Required[bool] @dataclass