prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Change `make_executable_schema` API to accept multiple bindables args
  Currently, the second argument to `make_executable_schema` is list of `SchemaBindlables` or single bindable:
  
  ```python
  # Single bindable:
  schema = make_executable_schema(type_defs, query_type, debug=True)
  
  # Multiple bindables:
  schema = make_executable_schema(type_defs, [query_type, mutation_type], debug=True)
  ```
  
  Looking at Ariadne uses in the wild, a pattern is starting to emerge where developers create dedicated modules/packages in their project for `scalars`, `mutations` or `types`, that use their `__init__.py`'s to gather all bindables into single lists:
  
  ```
  from .scalars import scalars
  from .types import types
  from .mutations import mutations
  ```
  
  Those are then combined into single list and passed to `make_executable_schema`:
  
  ```
  schema = make_executable_schema(type_defs, scalars + types + mutations, debug=True)
  ```
  
  This looks ugly, but things get uglier when there's bindable involved:
  
  ```
  schema = make_executable_schema(type_defs, scalars + types + mutations + [fallback_resolvers], debug=True)
  ```
  
  We can simplify this by changing bindables to `*bindables`:
  
  ```
  schema = make_executable_schema(type_defs, scalars, types, mutations, fallback_resolvers, debug=True)
  ```
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `ariadne/executable_schema.py`
  Content:
  ```
  1 from typing import Dict, List, Type, Union
  2 
  3 from graphql import (
  4     DocumentNode,
  5     GraphQLSchema,
  6     assert_valid_schema,
  7     build_ast_schema,
  8     extend_schema,
  9     parse,
  10     validate_schema,
  11 )
  12 
  13 from .enums import set_default_enum_values_on_schema
  14 from .schema_visitor import SchemaDirectiveVisitor
  15 from .types import SchemaBindable
  16 
  17 
  18 def make_executable_schema(
  19     type_defs: Union[str, List[str]],
  20     bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,
  21     *,
  22     directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,
  23 ) -> GraphQLSchema:
  24     if isinstance(type_defs, list):
  25         type_defs = join_type_defs(type_defs)
  26 
  27     ast_document = parse(type_defs)
  28     schema = build_and_extend_schema(ast_document)
  29     validate_schema(schema)
  30 
  31     if isinstance(bindables, list):
  32         for obj in bindables:
  33             obj.bind_to_schema(schema)
  34     elif bindables:
  35         bindables.bind_to_schema(schema)
  36 
  37     set_default_enum_values_on_schema(schema)
  38 
  39     if directives:
  40         SchemaDirectiveVisitor.visit_schema_directives(schema, directives)
  41 
  42     assert_valid_schema(schema)
  43 
  44     return schema
  45 
  46 
  47 def join_type_defs(type_defs: List[str]) -> str:
  48     return "\n\n".join(t.strip() for t in type_defs)
  49 
  50 
  51 def build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:
  52     schema = build_ast_schema(ast)
  53     extension_ast = extract_extensions(ast)
  54 
  55     if extension_ast.definitions:
  56         schema = extend_schema(schema, extension_ast)
  57 
  58     return schema
  59 
  60 
  61 EXTENSION_KINDS = [
  62     "scalar_type_extension",
  63     "object_type_extension",
  64     "interface_type_extension",
  65     "union_type_extension",
  66     "enum_type_extension",
  67     "input_object_type_extension",
  68 ]
  69 
  70 
  71 def extract_extensions(ast: DocumentNode) -> DocumentNode:
  72     extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]
  73     return DocumentNode(definitions=extensions)
  74
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/ariadne/executable_schema.py b/ariadne/executable_schema.py
  --- a/ariadne/executable_schema.py
  +++ b/ariadne/executable_schema.py
  @@ -17,8 +17,7 @@
   
   def make_executable_schema(
       type_defs: Union[str, List[str]],
  -    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,
  -    *,
  +    *bindables: Union[SchemaBindable, List[SchemaBindable]],
       directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,
   ) -> GraphQLSchema:
       if isinstance(type_defs, list):
  @@ -28,11 +27,12 @@
       schema = build_and_extend_schema(ast_document)
       validate_schema(schema)
   
  -    if isinstance(bindables, list):
  -        for obj in bindables:
  -            obj.bind_to_schema(schema)
  -    elif bindables:
  -        bindables.bind_to_schema(schema)
  +    for bindable in bindables:
  +        if isinstance(bindable, list):
  +            for obj in bindable:
  +                obj.bind_to_schema(schema)
  +        else:
  +            bindable.bind_to_schema(schema)
   
       set_default_enum_values_on_schema(schema)
  
verification_info: {"golden_diff": "diff --git a/ariadne/executable_schema.py b/ariadne/executable_schema.py\n--- a/ariadne/executable_schema.py\n+++ b/ariadne/executable_schema.py\n@@ -17,8 +17,7 @@\n \n def make_executable_schema(\n     type_defs: Union[str, List[str]],\n-    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,\n-    *,\n+    *bindables: Union[SchemaBindable, List[SchemaBindable]],\n     directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n ) -> GraphQLSchema:\n     if isinstance(type_defs, list):\n@@ -28,11 +27,12 @@\n     schema = build_and_extend_schema(ast_document)\n     validate_schema(schema)\n \n-    if isinstance(bindables, list):\n-        for obj in bindables:\n-            obj.bind_to_schema(schema)\n-    elif bindables:\n-        bindables.bind_to_schema(schema)\n+    for bindable in bindables:\n+        if isinstance(bindable, list):\n+            for obj in bindable:\n+                obj.bind_to_schema(schema)\n+        else:\n+            bindable.bind_to_schema(schema)\n \n     set_default_enum_values_on_schema(schema)\n", "issue": "Change `make_executable_schema` API to accept multiple bindables args\nCurrently, the second argument to `make_executable_schema` is list of `SchemaBindlables` or single bindable:\r\n\r\n```python\r\n# Single bindable:\r\nschema = make_executable_schema(type_defs, query_type, debug=True)\r\n\r\n# Multiple bindables:\r\nschema = make_executable_schema(type_defs, [query_type, mutation_type], debug=True)\r\n```\r\n\r\nLooking at Ariadne uses in the wild, a pattern is starting to emerge where developers create dedicated modules/packages in their project for `scalars`, `mutations` or `types`, that use their `__init__.py`'s to gather all bindables into single lists:\r\n\r\n```\r\nfrom .scalars import scalars\r\nfrom .types import types\r\nfrom .mutations import mutations\r\n```\r\n\r\nThose are then combined into single list and passed to `make_executable_schema`:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars + types + mutations, debug=True)\r\n```\r\n\r\nThis looks ugly, but things get uglier when there's bindable involved:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars + types + mutations + [fallback_resolvers], debug=True)\r\n```\r\n\r\nWe can simplify this by changing bindables to `*bindables`:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars, types, mutations, fallback_resolvers, debug=True)\r\n```\n", "before_files": [{"content": "from typing import Dict, List, Type, Union\n\nfrom graphql import (\n    DocumentNode,\n    GraphQLSchema,\n    assert_valid_schema,\n    build_ast_schema,\n    extend_schema,\n    parse,\n    validate_schema,\n)\n\nfrom .enums import set_default_enum_values_on_schema\nfrom .schema_visitor import SchemaDirectiveVisitor\nfrom .types import SchemaBindable\n\n\ndef make_executable_schema(\n    type_defs: Union[str, List[str]],\n    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,\n    *,\n    directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n) -> GraphQLSchema:\n    if isinstance(type_defs, list):\n        type_defs = join_type_defs(type_defs)\n\n    ast_document = parse(type_defs)\n    schema = build_and_extend_schema(ast_document)\n    validate_schema(schema)\n\n    if isinstance(bindables, list):\n        for obj in bindables:\n            obj.bind_to_schema(schema)\n    elif bindables:\n        bindables.bind_to_schema(schema)\n\n    set_default_enum_values_on_schema(schema)\n\n    if directives:\n        SchemaDirectiveVisitor.visit_schema_directives(schema, directives)\n\n    assert_valid_schema(schema)\n\n    return schema\n\n\ndef join_type_defs(type_defs: List[str]) -> str:\n    return \"\\n\\n\".join(t.strip() for t in type_defs)\n\n\ndef build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:\n    schema = build_ast_schema(ast)\n    extension_ast = extract_extensions(ast)\n\n    if extension_ast.definitions:\n        schema = extend_schema(schema, extension_ast)\n\n    return schema\n\n\nEXTENSION_KINDS = [\n    \"scalar_type_extension\",\n    \"object_type_extension\",\n    \"interface_type_extension\",\n    \"union_type_extension\",\n    \"enum_type_extension\",\n    \"input_object_type_extension\",\n]\n\n\ndef extract_extensions(ast: DocumentNode) -> DocumentNode:\n    extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]\n    return DocumentNode(definitions=extensions)\n", "path": "ariadne/executable_schema.py"}], "after_files": [{"content": "from typing import Dict, List, Type, Union\n\nfrom graphql import (\n    DocumentNode,\n    GraphQLSchema,\n    assert_valid_schema,\n    build_ast_schema,\n    extend_schema,\n    parse,\n    validate_schema,\n)\n\nfrom .enums import set_default_enum_values_on_schema\nfrom .schema_visitor import SchemaDirectiveVisitor\nfrom .types import SchemaBindable\n\n\ndef make_executable_schema(\n    type_defs: Union[str, List[str]],\n    *bindables: Union[SchemaBindable, List[SchemaBindable]],\n    directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n) -> GraphQLSchema:\n    if isinstance(type_defs, list):\n        type_defs = join_type_defs(type_defs)\n\n    ast_document = parse(type_defs)\n    schema = build_and_extend_schema(ast_document)\n    validate_schema(schema)\n\n    for bindable in bindables:\n        if isinstance(bindable, list):\n            for obj in bindable:\n                obj.bind_to_schema(schema)\n        else:\n            bindable.bind_to_schema(schema)\n\n    set_default_enum_values_on_schema(schema)\n\n    if directives:\n        SchemaDirectiveVisitor.visit_schema_directives(schema, directives)\n\n    assert_valid_schema(schema)\n\n    return schema\n\n\ndef join_type_defs(type_defs: List[str]) -> str:\n    return \"\\n\\n\".join(t.strip() for t in type_defs)\n\n\ndef build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:\n    schema = build_ast_schema(ast)\n    extension_ast = extract_extensions(ast)\n\n    if extension_ast.definitions:\n        schema = extend_schema(schema, extension_ast)\n\n    return schema\n\n\nEXTENSION_KINDS = [\n    \"scalar_type_extension\",\n    \"object_type_extension\",\n    \"interface_type_extension\",\n    \"union_type_extension\",\n    \"enum_type_extension\",\n    \"input_object_type_extension\",\n]\n\n\ndef extract_extensions(ast: DocumentNode) -> DocumentNode:\n    extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]\n    return DocumentNode(definitions=extensions)\n", "path": "ariadne/executable_schema.py"}]}