graphql-core 3.3.0b0__tar.gz → 3.3.0b2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/.bumpversion.cfg +1 -1
  2. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/PKG-INFO +3 -3
  3. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/README.md +2 -2
  4. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/conf.py +2 -2
  5. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/execution.rst +6 -0
  6. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/language.rst +1 -0
  7. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/utilities.rst +1 -0
  8. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/pyproject.toml +2 -2
  9. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/__init__.py +18 -0
  10. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/error/graphql_error.py +49 -12
  11. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/__init__.py +11 -1
  12. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/execute.py +64 -58
  13. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/values.py +5 -1
  14. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/__init__.py +2 -0
  15. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/ast.py +19 -2
  16. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/directive_locations.py +2 -1
  17. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/parser.py +57 -0
  18. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/predicates.py +5 -2
  19. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/printer.py +6 -1
  20. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/directives.py +14 -0
  21. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/introspection.py +37 -2
  22. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/__init__.py +2 -0
  23. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/build_ast_schema.py +4 -0
  24. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/build_client_schema.py +1 -0
  25. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/extend_schema.py +55 -3
  26. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/find_schema_changes.py +1 -0
  27. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/get_introspection_query.py +31 -39
  28. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/introspection_from_schema.py +2 -0
  29. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/print_schema.py +1 -0
  30. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/known_directives.py +2 -0
  31. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_directives_per_location.py +7 -0
  32. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/version.py +2 -2
  33. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/error/test_graphql_error.py +81 -0
  34. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_subscribe.py +12 -4
  35. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_predicates.py +2 -0
  36. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_printer.py +16 -0
  37. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_schema_parser.py +24 -0
  38. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_directives.py +12 -0
  39. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_introspection.py +183 -1
  40. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_build_ast_schema.py +15 -0
  41. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_build_client_schema.py +25 -0
  42. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_extend_schema.py +105 -2
  43. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_get_introspection_query.py +38 -0
  44. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_introspection_from_schema.py +33 -1
  45. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_print_schema.py +22 -2
  46. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_known_directives.py +10 -0
  47. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_directives_per_location.py +85 -0
  48. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/.editorconfig +0 -0
  49. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/.readthedocs.yaml +0 -0
  50. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/CODEOWNERS +0 -0
  51. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/LICENSE +0 -0
  52. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/SECURITY.md +0 -0
  53. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/Makefile +0 -0
  54. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/diffs.rst +0 -0
  55. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/index.rst +0 -0
  56. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/intro.rst +0 -0
  57. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/make.bat +0 -0
  58. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/error.rst +0 -0
  59. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/graphql.rst +0 -0
  60. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/pyutils.rst +0 -0
  61. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/type.rst +0 -0
  62. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/modules/validation.rst +0 -0
  63. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/extension.rst +0 -0
  64. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/index.rst +0 -0
  65. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/introspection.rst +0 -0
  66. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/methods.rst +0 -0
  67. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/other.rst +0 -0
  68. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/parser.rst +0 -0
  69. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/queries.rst +0 -0
  70. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/resolvers.rst +0 -0
  71. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/schema.rst +0 -0
  72. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/sdl.rst +0 -0
  73. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/docs/usage/validator.rst +0 -0
  74. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/error/__init__.py +0 -0
  75. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/error/located_error.py +0 -0
  76. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/error/syntax_error.py +0 -0
  77. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/aborted_graphql_execution_error.py +0 -0
  78. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/async_iterables.py +0 -0
  79. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/build_execution_plan.py +0 -0
  80. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/collect_fields.py +0 -0
  81. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/get_variable_signature.py +0 -0
  82. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/incremental_graph.py +0 -0
  83. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/incremental_publisher.py +0 -0
  84. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/middleware.py +0 -0
  85. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/execution/types.py +0 -0
  86. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/graphql.py +0 -0
  87. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/harness.py +0 -0
  88. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/block_string.py +0 -0
  89. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/character_classes.py +0 -0
  90. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/lexer.py +0 -0
  91. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/location.py +0 -0
  92. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/print_location.py +0 -0
  93. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/print_string.py +0 -0
  94. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/schema_coordinate_lexer.py +0 -0
  95. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/source.py +0 -0
  96. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/token_kind.py +0 -0
  97. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/language/visitor.py +0 -0
  98. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/py.typed +0 -0
  99. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/__init__.py +0 -0
  100. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/abort_signal.py +0 -0
  101. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/async_reduce.py +0 -0
  102. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/awaitable_or_value.py +0 -0
  103. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/boxed_awaitable_or_value.py +0 -0
  104. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/cached_property.py +0 -0
  105. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/convert_case.py +0 -0
  106. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/description.py +0 -0
  107. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/did_you_mean.py +0 -0
  108. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/format_list.py +0 -0
  109. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/frozen_error.py +0 -0
  110. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/gather_with_cancel.py +0 -0
  111. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/group_by.py +0 -0
  112. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/identity_func.py +0 -0
  113. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/inspect.py +0 -0
  114. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/is_awaitable.py +0 -0
  115. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/is_iterable.py +0 -0
  116. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/merge_kwargs.py +0 -0
  117. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/natural_compare.py +0 -0
  118. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/path.py +0 -0
  119. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/print_path_list.py +0 -0
  120. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/ref_map.py +0 -0
  121. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/ref_set.py +0 -0
  122. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/simple_pub_sub.py +0 -0
  123. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/suggestion_list.py +0 -0
  124. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/pyutils/undefined.py +0 -0
  125. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/__init__.py +0 -0
  126. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/assert_name.py +0 -0
  127. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/definition.py +0 -0
  128. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/scalars.py +0 -0
  129. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/schema.py +0 -0
  130. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/type/validate.py +0 -0
  131. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/ast_from_value.py +0 -0
  132. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/ast_to_dict.py +0 -0
  133. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/coerce_input_value.py +0 -0
  134. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/concat_ast.py +0 -0
  135. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/get_default_value_ast.py +0 -0
  136. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/get_operation_ast.py +0 -0
  137. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/lexicographic_sort_schema.py +0 -0
  138. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/map_schema_config.py +0 -0
  139. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/replace_variables.py +0 -0
  140. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/resolve_schema_coordinate.py +0 -0
  141. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/separate_operations.py +0 -0
  142. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/sort_value_node.py +0 -0
  143. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/strip_ignored_characters.py +0 -0
  144. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/type_comparators.py +0 -0
  145. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/type_from_ast.py +0 -0
  146. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/type_info.py +0 -0
  147. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/validate_input_value.py +0 -0
  148. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/value_from_ast.py +0 -0
  149. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/value_from_ast_untyped.py +0 -0
  150. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/utilities/value_to_literal.py +0 -0
  151. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/__init__.py +0 -0
  152. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/__init__.py +0 -0
  153. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/custom/__init__.py +0 -0
  154. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/custom/no_deprecated.py +0 -0
  155. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/custom/no_schema_introspection.py +0 -0
  156. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/defer_stream_directive_label.py +0 -0
  157. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/defer_stream_directive_on_root_field.py +0 -0
  158. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/defer_stream_directive_on_valid_operations_rule.py +0 -0
  159. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/executable_definitions.py +0 -0
  160. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/fields_on_correct_type.py +0 -0
  161. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/fragments_on_composite_types.py +0 -0
  162. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/known_argument_names.py +0 -0
  163. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/known_fragment_names.py +0 -0
  164. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/known_operation_types.py +0 -0
  165. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/known_type_names.py +0 -0
  166. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/lone_anonymous_operation.py +0 -0
  167. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/lone_schema_definition.py +0 -0
  168. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/max_introspection_depth_rule.py +0 -0
  169. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/no_fragment_cycles.py +0 -0
  170. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/no_undefined_variables.py +0 -0
  171. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/no_unused_fragments.py +0 -0
  172. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/no_unused_variables.py +0 -0
  173. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/overlapping_fields_can_be_merged.py +0 -0
  174. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/possible_fragment_spreads.py +0 -0
  175. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/possible_type_extensions.py +0 -0
  176. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/provided_required_arguments.py +0 -0
  177. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/scalar_leafs.py +0 -0
  178. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/single_field_subscriptions.py +0 -0
  179. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/stream_directive_on_list_field.py +0 -0
  180. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_argument_definition_names.py +0 -0
  181. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_argument_names.py +0 -0
  182. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_directive_names.py +0 -0
  183. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_enum_value_names.py +0 -0
  184. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_field_definition_names.py +0 -0
  185. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_fragment_names.py +0 -0
  186. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_input_field_names.py +0 -0
  187. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_operation_names.py +0 -0
  188. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_operation_types.py +0 -0
  189. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_type_names.py +0 -0
  190. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/unique_variable_names.py +0 -0
  191. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/values_of_correct_type.py +0 -0
  192. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/variables_are_input_types.py +0 -0
  193. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/rules/variables_in_allowed_position.py +0 -0
  194. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/specified_rules.py +0 -0
  195. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/validate.py +0 -0
  196. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/src/graphql/validation/validation_context.py +0 -0
  197. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/__init__.py +0 -0
  198. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/__init__.py +0 -0
  199. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_async_iterable.py +0 -0
  200. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_build_ast_schema.py +0 -0
  201. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_build_client_schema.py +0 -0
  202. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_execution_async.py +0 -0
  203. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_execution_sync.py +0 -0
  204. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_graphql_schema.py +0 -0
  205. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_introspection_from_schema.py +0 -0
  206. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_parser.py +0 -0
  207. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_print.py +0 -0
  208. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_repeated_fields.py +0 -0
  209. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_serialization.py +0 -0
  210. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_validate_gql.py +0 -0
  211. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_validate_invalid_gql.py +0 -0
  212. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_validate_sdl.py +0 -0
  213. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/benchmarks/test_visit.py +0 -0
  214. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/conftest.py +0 -0
  215. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/error/__init__.py +0 -0
  216. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/error/test_located_error.py +0 -0
  217. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/error/test_print_location.py +0 -0
  218. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/__init__.py +0 -0
  219. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_aborted_graphql_execution_error.py +0 -0
  220. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_abstract.py +0 -0
  221. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_cancellation.py +0 -0
  222. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_collect_fields.py +0 -0
  223. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_customize.py +0 -0
  224. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_defer.py +0 -0
  225. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_directives.py +0 -0
  226. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_error_propagation.py +0 -0
  227. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_execution_result.py +0 -0
  228. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_executor.py +0 -0
  229. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_hooks.py +0 -0
  230. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_lists.py +0 -0
  231. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_map_async_iterable.py +0 -0
  232. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_middleware.py +0 -0
  233. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_mutations.py +0 -0
  234. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_nonnull.py +0 -0
  235. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_oneof.py +0 -0
  236. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_parallel.py +0 -0
  237. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_resolve.py +0 -0
  238. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_schema.py +0 -0
  239. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_stream.py +0 -0
  240. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_sync.py +0 -0
  241. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_union_interface.py +0 -0
  242. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/execution/test_variables.py +0 -0
  243. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/__init__.py +0 -0
  244. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/github_schema.graphql +0 -0
  245. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/github_schema.json +0 -0
  246. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/kitchen_sink.graphql +0 -0
  247. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/large_query.graphql +0 -0
  248. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/fixtures/schema_kitchen_sink.graphql +0 -0
  249. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/__init__.py +0 -0
  250. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_ast.py +0 -0
  251. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_block_string.py +0 -0
  252. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_block_string_fuzz.py +0 -0
  253. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_character_classes.py +0 -0
  254. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_lexer.py +0 -0
  255. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_location.py +0 -0
  256. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_parser.py +0 -0
  257. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_print_string.py +0 -0
  258. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_schema_coordinate_lexer.py +0 -0
  259. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_schema_printer.py +0 -0
  260. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_source.py +0 -0
  261. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/language/test_visitor.py +0 -0
  262. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/__init__.py +0 -0
  263. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_async_reduce.py +0 -0
  264. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_boxed_awaitabe_or_value.py +0 -0
  265. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_cached_property.py +0 -0
  266. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_convert_case.py +0 -0
  267. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_description.py +0 -0
  268. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_did_you_mean.py +0 -0
  269. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_format_list.py +0 -0
  270. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_frozen_error.py +0 -0
  271. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_gather_with_cancel.py +0 -0
  272. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_group_by.py +0 -0
  273. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_identity_func.py +0 -0
  274. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_inspect.py +0 -0
  275. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_is_awaitable.py +0 -0
  276. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_is_iterable.py +0 -0
  277. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_merge_kwargs.py +0 -0
  278. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_natural_compare.py +0 -0
  279. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_path.py +0 -0
  280. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_print_path_list.py +0 -0
  281. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_ref_map.py +0 -0
  282. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_ref_set.py +0 -0
  283. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_simple_pub_sub.py +0 -0
  284. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_suggestion_list.py +0 -0
  285. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/pyutils/test_undefined.py +0 -0
  286. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/star_wars_data.py +0 -0
  287. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/star_wars_schema.py +0 -0
  288. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_docs.py +0 -0
  289. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_graphql.py +0 -0
  290. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_star_wars_introspection.py +0 -0
  291. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_star_wars_query.py +0 -0
  292. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_star_wars_validation.py +0 -0
  293. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_user_registry.py +0 -0
  294. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/test_version.py +0 -0
  295. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/__init__.py +0 -0
  296. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_assert_name.py +0 -0
  297. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_custom_scalars.py +0 -0
  298. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_definition.py +0 -0
  299. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_enum.py +0 -0
  300. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_extensions.py +0 -0
  301. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_predicate.py +0 -0
  302. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_scalars.py +0 -0
  303. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_schema.py +0 -0
  304. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/type/test_validation.py +0 -0
  305. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/__init__.py +0 -0
  306. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_ast_from_value.py +0 -0
  307. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_ast_to_dict.py +0 -0
  308. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_coerce_input_value.py +0 -0
  309. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_concat_ast.py +0 -0
  310. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_find_breaking_changes.py +0 -0
  311. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_find_schema_changes.py +0 -0
  312. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_get_operation_ast.py +0 -0
  313. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_lexicographic_sort_schema.py +0 -0
  314. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_map_schema_config.py +0 -0
  315. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_replace_variables.py +0 -0
  316. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_resolve_schema_coordinate.py +0 -0
  317. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_separate_operations.py +0 -0
  318. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_sort_value_node.py +0 -0
  319. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_strip_ignored_characters.py +0 -0
  320. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_strip_ignored_characters_fuzz.py +0 -0
  321. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_type_comparators.py +0 -0
  322. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_type_from_ast.py +0 -0
  323. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_type_info.py +0 -0
  324. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_validate_input_value.py +0 -0
  325. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_value_from_ast.py +0 -0
  326. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_value_from_ast_untyped.py +0 -0
  327. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utilities/test_value_to_literal.py +0 -0
  328. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/__init__.py +0 -0
  329. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/assert_equal_awaitables_or_values.py +0 -0
  330. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/assert_matching_values.py +0 -0
  331. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/dedent.py +0 -0
  332. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/gen_fuzz_strings.py +0 -0
  333. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/test_assert_equal_awaitables_or_values.py +0 -0
  334. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/test_assert_matching_values.py +0 -0
  335. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/test_dedent.py +0 -0
  336. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/test_gen_fuzz_strings.py +0 -0
  337. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/viral_schema.py +0 -0
  338. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/utils/viral_sdl.py +0 -0
  339. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/__init__.py +0 -0
  340. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/harness.py +0 -0
  341. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_defer_stream_directive_label.py +0 -0
  342. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_defer_stream_directive_on_root_field.py +0 -0
  343. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_defer_stream_directive_on_valid_operations.py +0 -0
  344. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_executable_definitions.py +0 -0
  345. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_fields_on_correct_type.py +0 -0
  346. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_fragments_on_composite_types.py +0 -0
  347. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_known_argument_names.py +0 -0
  348. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_known_fragment_names.py +0 -0
  349. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_known_operation_types.py +0 -0
  350. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_known_type_names.py +0 -0
  351. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_lone_anonymous_operation.py +0 -0
  352. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_lone_schema_definition.py +0 -0
  353. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_max_introspection_depth_rule.py +0 -0
  354. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_deprecated.py +0 -0
  355. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_fragment_cycles.py +0 -0
  356. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_schema_introspection.py +0 -0
  357. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_undefined_variables.py +0 -0
  358. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_unused_fragments.py +0 -0
  359. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_no_unused_variables.py +0 -0
  360. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_overlapping_fields_can_be_merged.py +0 -0
  361. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_possible_fragment_spreads.py +0 -0
  362. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_possible_type_extensions.py +0 -0
  363. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_provided_required_arguments.py +0 -0
  364. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_scalar_leafs.py +0 -0
  365. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_single_field_subscriptions.py +0 -0
  366. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_stream_directive_on_list_field.py +0 -0
  367. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_argument_definition_names.py +0 -0
  368. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_argument_names.py +0 -0
  369. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_directive_names.py +0 -0
  370. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_enum_value_names.py +0 -0
  371. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_field_definition_names.py +0 -0
  372. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_fragment_names.py +0 -0
  373. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_input_field_names.py +0 -0
  374. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_operation_names.py +0 -0
  375. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_operation_types.py +0 -0
  376. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_type_names.py +0 -0
  377. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_unique_variable_names.py +0 -0
  378. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_validation.py +0 -0
  379. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_values_of_correct_type.py +0 -0
  380. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_variables_are_input_types.py +0 -0
  381. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tests/validation/test_variables_in_allowed_position.py +0 -0
  382. {graphql_core-3.3.0b0 → graphql_core-3.3.0b2}/tox.ini +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 3.3.0b0
2
+ current_version = 3.3.0b2
3
3
  commit = False
4
4
  tag = False
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphql-core
3
- Version: 3.3.0b0
3
+ Version: 3.3.0b2
4
4
  Summary: GraphQL-core is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL.
5
5
  Keywords: graphql
6
6
  Author: Christoph Zwerschke
@@ -42,8 +42,8 @@ with GraphQL.js.
42
42
  The current stable version 3.2.11 of GraphQL-core is up-to-date with GraphQL.js
43
43
  version 16.14.1 and supports Python versions 3.7 to 3.14.
44
44
 
45
- You can also try out the latest beta version 3.3.0b0 of GraphQL-core,
46
- which is up-to-date with GraphQL.js version 17.0.0b0.
45
+ You can also try out the latest beta version 3.3.0b2 of GraphQL-core,
46
+ which is up-to-date with GraphQL.js version 17.0.0b2.
47
47
  This new minor version of GraphQL-core also supports Python versions 3.10 to 3.14.
48
48
 
49
49
  Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js.
@@ -18,8 +18,8 @@ with GraphQL.js.
18
18
  The current stable version 3.2.11 of GraphQL-core is up-to-date with GraphQL.js
19
19
  version 16.14.1 and supports Python versions 3.7 to 3.14.
20
20
 
21
- You can also try out the latest beta version 3.3.0b0 of GraphQL-core,
22
- which is up-to-date with GraphQL.js version 17.0.0b0.
21
+ You can also try out the latest beta version 3.3.0b2 of GraphQL-core,
22
+ which is up-to-date with GraphQL.js version 17.0.0b2.
23
23
  This new minor version of GraphQL-core also supports Python versions 3.10 to 3.14.
24
24
 
25
25
  Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js.
@@ -52,7 +52,7 @@ author = "Christoph Zwerschke"
52
52
  # The short X.Y version.
53
53
  # version = '3.3'
54
54
  # The full version, including alpha/beta/rc tags.
55
- version = release = "3.3.0b0"
55
+ version = release = "3.3.0b2"
56
56
 
57
57
  # The language for content autogenerated by Sphinx. Refer to documentation
58
58
  # for a list of supported languages.
@@ -100,7 +100,7 @@ graphql_modules = {
100
100
  # be nitpicky
101
101
  nitpicky = True
102
102
  # but not too nitpicky
103
- suppress_warnings = ["ref.class", "ref.obj", "ref.python"]
103
+ suppress_warnings = ["ref.attr", "ref.class", "ref.obj", "ref.python"]
104
104
 
105
105
  # The name of the Pygments (syntax highlighting) style to use.
106
106
  pygments_style = "sphinx"
@@ -65,6 +65,10 @@ Execution
65
65
 
66
66
  .. autofunction:: create_source_event_stream
67
67
 
68
+ .. autofunction:: map_source_to_response_event
69
+
70
+ .. autoclass:: RootSelectionSetExecutor
71
+
68
72
  .. autoclass:: Middleware
69
73
 
70
74
  .. autoclass:: MiddlewareManager
@@ -72,3 +76,5 @@ Execution
72
76
  .. autofunction:: get_directive_values
73
77
 
74
78
  .. autofunction:: get_variable_values
79
+
80
+ .. autoclass:: VariableValues
@@ -25,6 +25,7 @@ Each kind of AST node has its own class:
25
25
  .. autoclass:: ConstValueNode
26
26
  .. autoclass:: DefinitionNode
27
27
  .. autoclass:: DirectiveDefinitionNode
28
+ .. autoclass:: DirectiveExtensionNode
28
29
  .. autoclass:: DirectiveNode
29
30
  .. autoclass:: DocumentNode
30
31
  .. autoclass:: EnumTypeDefinitionNode
@@ -127,6 +127,7 @@ Compare two GraphQLSchemas and detect changes:
127
127
  .. autoclass:: BreakingChangeType
128
128
  .. autoclass:: DangerousChange
129
129
  .. autoclass:: DangerousChangeType
130
+ .. autoclass:: SchemaChange
130
131
 
131
132
  Resolve a schema coordinate to the schema element it refers to:
132
133
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "graphql-core"
3
- version = "3.3.0b0"
3
+ version = "3.3.0b2"
4
4
  description = "GraphQL-core is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -32,7 +32,7 @@ test = [
32
32
  "pytest>=9,<10",
33
33
  "pytest-benchmark>=5.2,<6",
34
34
  "pytest-cov>=7.1,<8",
35
- "pytest-describe>=3.1,<4",
35
+ "pytest-describe>=3.2,<4",
36
36
  "pytest-timeout>=2.4,<3",
37
37
  "pytest-codspeed>=5",
38
38
  "tox>=4.55,<5",
@@ -168,6 +168,7 @@ from .language import (
168
168
  UnionTypeExtensionNode,
169
169
  EnumTypeExtensionNode,
170
170
  InputObjectTypeExtensionNode,
171
+ DirectiveExtensionNode,
171
172
  SchemaCoordinateNode,
172
173
  TypeCoordinateNode,
173
174
  MemberCoordinateNode,
@@ -248,6 +249,7 @@ from .utilities import (
248
249
  DangerousChangeType,
249
250
  SafeChange,
250
251
  SafeChangeType,
252
+ SchemaChange,
251
253
  find_breaking_changes,
252
254
  find_dangerous_changes,
253
255
  find_schema_changes,
@@ -438,6 +440,9 @@ from .validation import (
438
440
  specified_rules,
439
441
  recommended_rules,
440
442
  # Individual validation rules.
443
+ DeferStreamDirectiveLabel,
444
+ DeferStreamDirectiveOnRootField,
445
+ DeferStreamDirectiveOnValidOperationsRule,
441
446
  ExecutableDefinitionsRule,
442
447
  FieldsOnCorrectTypeRule,
443
448
  FragmentsOnCompositeTypesRule,
@@ -456,6 +461,7 @@ from .validation import (
456
461
  ProvidedRequiredArgumentsRule,
457
462
  ScalarLeafsRule,
458
463
  SingleFieldSubscriptionsRule,
464
+ StreamDirectiveOnListField,
459
465
  UniqueArgumentNamesRule,
460
466
  UniqueDirectivesPerLocationRule,
461
467
  UniqueFragmentNamesRule,
@@ -495,6 +501,7 @@ from .execution import (
495
501
  # Types
496
502
  AsyncWorkFinishedInfo,
497
503
  ExecutionHooks,
504
+ VariableValues,
498
505
  Executor,
499
506
  ExecutionResult,
500
507
  ExperimentalIncrementalExecutionResults,
@@ -512,7 +519,9 @@ from .execution import (
512
519
  # Subscription
513
520
  subscribe,
514
521
  create_source_event_stream,
522
+ map_source_to_response_event,
515
523
  map_async_iterable,
524
+ RootSelectionSetExecutor,
516
525
  # Middleware
517
526
  Middleware,
518
527
  MiddlewareManager,
@@ -569,10 +578,14 @@ __all__ = [
569
578
  "ConstValueNode",
570
579
  "DangerousChange",
571
580
  "DangerousChangeType",
581
+ "DeferStreamDirectiveLabel",
582
+ "DeferStreamDirectiveOnRootField",
583
+ "DeferStreamDirectiveOnValidOperationsRule",
572
584
  "DefinitionNode",
573
585
  "DirectiveArgumentCoordinateNode",
574
586
  "DirectiveCoordinateNode",
575
587
  "DirectiveDefinitionNode",
588
+ "DirectiveExtensionNode",
576
589
  "DirectiveLocation",
577
590
  "DirectiveNode",
578
591
  "DocumentNode",
@@ -740,12 +753,14 @@ __all__ = [
740
753
  "ResolvedNamedType",
741
754
  "ResolvedSchemaElement",
742
755
  "ResponsePath",
756
+ "RootSelectionSetExecutor",
743
757
  "SDLValidationRule",
744
758
  "SafeChange",
745
759
  "SafeChangeType",
746
760
  "ScalarLeafsRule",
747
761
  "ScalarTypeDefinitionNode",
748
762
  "ScalarTypeExtensionNode",
763
+ "SchemaChange",
749
764
  "SchemaCoordinateNode",
750
765
  "SchemaDefinitionNode",
751
766
  "SchemaExtensionNode",
@@ -755,6 +770,7 @@ __all__ = [
755
770
  "SingleFieldSubscriptionsRule",
756
771
  "Source",
757
772
  "SourceLocation",
773
+ "StreamDirectiveOnListField",
758
774
  "StringValueNode",
759
775
  "SubsequentIncrementalExecutionResult",
760
776
  "Thunk",
@@ -795,6 +811,7 @@ __all__ = [
795
811
  "ValuesOfCorrectTypeRule",
796
812
  "VariableDefinitionNode",
797
813
  "VariableNode",
814
+ "VariableValues",
798
815
  "VariablesAreInputTypesRule",
799
816
  "VariablesInAllowedPositionRule",
800
817
  "Visitor",
@@ -904,6 +921,7 @@ __all__ = [
904
921
  "lexicographic_sort_schema",
905
922
  "located_error",
906
923
  "map_async_iterable",
924
+ "map_source_to_response_event",
907
925
  "parse",
908
926
  "parse_const_value",
909
927
  "parse_schema_coordinate",
@@ -5,6 +5,8 @@ from __future__ import annotations
5
5
  from sys import exc_info
6
6
  from typing import TYPE_CHECKING, Any, TypeAlias, TypedDict
7
7
 
8
+ from ..pyutils import Undefined
9
+
8
10
  if TYPE_CHECKING:
9
11
  from collections.abc import Collection
10
12
 
@@ -108,12 +110,26 @@ class GraphQLError(Exception):
108
110
  """
109
111
 
110
112
  original_error: Exception | None
111
- """The original error thrown from a field resolver during execution"""
113
+ """Original error that caused this GraphQLError, if one exists
114
+
115
+ .. deprecated:: 3.3
116
+ Use :attr:`cause` instead to better align with the standard exception
117
+ :attr:`~BaseException.__cause__`.
118
+ """
119
+
120
+ cause: Any
121
+ """The cause of this error, if one exists
122
+
123
+ The value passed as the ``cause`` when creating this error. Adopts the
124
+ convention of the standard exception cause and is also exposed as the
125
+ :attr:`~BaseException.__cause__` when it is an exception.
126
+ """
112
127
 
113
128
  extensions: GraphQLErrorExtensions | None
114
129
  """Extension fields to add to the formatted error"""
115
130
 
116
131
  __slots__ = (
132
+ "cause",
117
133
  "extensions",
118
134
  "locations",
119
135
  "message",
@@ -135,15 +151,27 @@ class GraphQLError(Exception):
135
151
  path: Collection[str | int] | None = None,
136
152
  original_error: Exception | None = None,
137
153
  extensions: GraphQLErrorExtensions | None = None,
154
+ cause: Any = Undefined,
138
155
  ) -> None:
139
156
  """Initialize a GraphQLError."""
140
157
  super().__init__(message)
141
158
  self.message = message
142
159
 
160
+ # The cause defaults to the (deprecated) original error when not given.
161
+ has_cause = cause is not Undefined
162
+ self.cause = cause if has_cause else original_error
163
+
143
164
  if path and not isinstance(path, list):
144
165
  path = list(path)
145
166
  self.path = path or None # type: ignore
146
- self.original_error = original_error
167
+
168
+ # An Error provided as the cause is also exposed as the original error
169
+ # for backward compatibility.
170
+ cause_value = cause if has_cause else None
171
+ underlying_error = original_error
172
+ if underlying_error is None and isinstance(cause_value, Exception):
173
+ underlying_error = cause_value
174
+ self.original_error = underlying_error
147
175
 
148
176
  # Compute list of blame nodes.
149
177
  if nodes and not isinstance(nodes, list):
@@ -170,16 +198,25 @@ class GraphQLError(Exception):
170
198
  locations = [loc.source.get_location(loc.start) for loc in node_locations]
171
199
  self.locations = locations or None
172
200
 
201
+ # Adopt the cause as the standard exception cause when it is one, so
202
+ # that the cause chain is reported without duplicating the traceback.
203
+ if isinstance(cause_value, BaseException):
204
+ self.__cause__ = cause_value
205
+
206
+ # Preserve the traceback of an explicit original error. The traceback of
207
+ # a cause is not copied over, since Python already reports cause chains.
173
208
  if original_error:
174
209
  self.__traceback__ = original_error.__traceback__
175
- if original_error.__cause__:
176
- self.__cause__ = original_error.__cause__
177
- elif original_error.__context__:
178
- self.__context__ = original_error.__context__
179
- if extensions is None:
180
- original_extensions = getattr(original_error, "extensions", None)
181
- if isinstance(original_extensions, dict):
182
- extensions = original_extensions
210
+ if not self.__cause__:
211
+ if original_error.__cause__:
212
+ self.__cause__ = original_error.__cause__
213
+ elif original_error.__context__:
214
+ self.__context__ = original_error.__context__
215
+
216
+ if extensions is None and underlying_error is not None:
217
+ original_extensions = getattr(underlying_error, "extensions", None)
218
+ if isinstance(original_extensions, dict):
219
+ extensions = original_extensions
183
220
  self.extensions = extensions or {}
184
221
  if not self.__traceback__:
185
222
  self.__traceback__ = exc_info()[2]
@@ -217,7 +254,7 @@ class GraphQLError(Exception):
217
254
  and all(
218
255
  getattr(self, slot) == getattr(other, slot)
219
256
  for slot in self.__slots__
220
- if slot != "original_error"
257
+ if slot not in ("cause", "original_error")
221
258
  )
222
259
  ) or (
223
260
  isinstance(other, dict)
@@ -225,7 +262,7 @@ class GraphQLError(Exception):
225
262
  and all(
226
263
  slot in self.__slots__ and getattr(self, slot) == other.get(slot)
227
264
  for slot in other
228
- if slot != "original_error"
265
+ if slot not in ("cause", "original_error")
229
266
  )
230
267
  )
231
268
 
@@ -30,7 +30,12 @@ from .types import (
30
30
  StreamItemsResult,
31
31
  )
32
32
  from .middleware import MiddlewareManager
33
- from .values import get_argument_values, get_directive_values, get_variable_values
33
+ from .values import (
34
+ get_argument_values,
35
+ get_directive_values,
36
+ get_variable_values,
37
+ VariableValues,
38
+ )
34
39
  from .execute import (
35
40
  create_source_event_stream,
36
41
  execute,
@@ -40,12 +45,14 @@ from .execute import (
40
45
  execute_sync,
41
46
  default_field_resolver,
42
47
  default_type_resolver,
48
+ map_source_to_response_event,
43
49
  subscribe,
44
50
  AsyncWorkFinishedInfo,
45
51
  ExecutionHooks,
46
52
  Executor,
47
53
  GraphQLWrappedResult,
48
54
  Middleware,
55
+ RootSelectionSetExecutor,
49
56
  )
50
57
 
51
58
  __all__ = [
@@ -72,11 +79,13 @@ __all__ = [
72
79
  "Middleware",
73
80
  "MiddlewareManager",
74
81
  "PendingResult",
82
+ "RootSelectionSetExecutor",
75
83
  "StreamItemRecord",
76
84
  "StreamItemResult",
77
85
  "StreamItemsResult",
78
86
  "StreamRecord",
79
87
  "SubsequentIncrementalExecutionResult",
88
+ "VariableValues",
80
89
  "create_source_event_stream",
81
90
  "default_field_resolver",
82
91
  "default_type_resolver",
@@ -89,5 +98,6 @@ __all__ = [
89
98
  "get_directive_values",
90
99
  "get_variable_values",
91
100
  "map_async_iterable",
101
+ "map_source_to_response_event",
92
102
  "subscribe",
93
103
  ]
@@ -140,6 +140,7 @@ __all__ = [
140
140
  "Executor",
141
141
  "GraphQLWrappedResult",
142
142
  "Middleware",
143
+ "RootSelectionSetExecutor",
143
144
  "create_source_event_stream",
144
145
  "default_field_resolver",
145
146
  "default_type_resolver",
@@ -148,6 +149,7 @@ __all__ = [
148
149
  "execute_subscription_event",
149
150
  "execute_sync",
150
151
  "experimental_execute_incrementally",
152
+ "map_source_to_response_event",
151
153
  "subscribe",
152
154
  ]
153
155
 
@@ -237,7 +239,6 @@ class Executor(IncrementalPublisherContext):
237
239
  field_resolver: GraphQLFieldResolver
238
240
  type_resolver: GraphQLTypeResolver
239
241
  subscribe_field_resolver: GraphQLFieldResolver
240
- per_event_executor: Callable[[Executor], AwaitableOrValue[ExecutionResult]]
241
242
  enable_early_execution: bool
242
243
  hide_suggestions: bool
243
244
  abort_signal: AbortSignal | None
@@ -274,8 +275,6 @@ class Executor(IncrementalPublisherContext):
274
275
  middleware_manager: MiddlewareManager | None = None,
275
276
  is_awaitable: Callable[[Any], TypeGuard[Awaitable]] | None = None,
276
277
  is_async_iterable: Callable[[Any], TypeGuard[AsyncIterable]] | None = None,
277
- per_event_executor: Callable[[Executor], AwaitableOrValue[ExecutionResult]]
278
- | None = None,
279
278
  hide_suggestions: bool = False,
280
279
  abort_signal: AbortSignal | None = None,
281
280
  hooks: ExecutionHooks | None = None,
@@ -290,7 +289,6 @@ class Executor(IncrementalPublisherContext):
290
289
  self.field_resolver = field_resolver
291
290
  self.type_resolver = type_resolver
292
291
  self.subscribe_field_resolver = subscribe_field_resolver
293
- self.per_event_executor = per_event_executor or execute_subscription_event
294
292
  self.enable_early_execution = enable_early_execution
295
293
  self.hide_suggestions = hide_suggestions
296
294
  self.abort_signal = abort_signal
@@ -331,8 +329,6 @@ class Executor(IncrementalPublisherContext):
331
329
  middleware: Middleware | None = None,
332
330
  is_awaitable: Callable[[Any], TypeGuard[Awaitable]] | None = None,
333
331
  is_async_iterable: Callable[[Any], TypeGuard[AsyncIterable]] | None = None,
334
- per_event_executor: Callable[[Executor], AwaitableOrValue[ExecutionResult]]
335
- | None = None,
336
332
  hide_suggestions: bool = False,
337
333
  abort_signal: AbortSignal | None = None,
338
334
  hooks: ExecutionHooks | None = None,
@@ -425,7 +421,6 @@ class Executor(IncrementalPublisherContext):
425
421
  middleware_manager,
426
422
  is_awaitable,
427
423
  is_async_iterable,
428
- per_event_executor=per_event_executor,
429
424
  hide_suggestions=hide_suggestions,
430
425
  abort_signal=abort_signal,
431
426
  hooks=hooks,
@@ -1978,39 +1973,6 @@ class Executor(IncrementalPublisherContext):
1978
1973
  execution_plans[original_grouped_field_set] = exeecution_plan
1979
1974
  return exeecution_plan
1980
1975
 
1981
- def map_source_to_response(
1982
- self, result_or_stream: ExecutionResult | AsyncIterable[Any]
1983
- ) -> AsyncGenerator[ExecutionResult, None] | ExecutionResult:
1984
- """Map source result to response.
1985
-
1986
- For each payload yielded from a subscription,
1987
- map it over the normal GraphQL :func:`~graphql.execution.execute` function,
1988
- with ``payload`` as the ``root_value``.
1989
- This implements the "MapSourceToResponseEvent" algorithm
1990
- described in the GraphQL specification.
1991
- Each event is executed with the executor's ``per_event_executor``, which
1992
- defaults to :func:`~graphql.execution.execute_subscription_event` (providing
1993
- the "ExecuteSubscriptionEvent" algorithm) but can be overridden to set up and
1994
- tear down a custom executor around the execution of each event.
1995
- """
1996
- if not self.is_async_iterable(result_or_stream):
1997
- return cast("ExecutionResult", result_or_stream) # pragma: no cover
1998
-
1999
- build_executor = self.build_per_event_executor
2000
- per_event_executor = self.per_event_executor
2001
-
2002
- async def callback(payload: Any) -> ExecutionResult:
2003
- result = per_event_executor(build_executor(payload))
2004
- # typecast to ExecutionResult, not possible to return
2005
- # ExperimentalIncrementalExecutionResults when operation is 'subscription'.
2006
- return (
2007
- await cast("Awaitable[ExecutionResult]", result)
2008
- if self.is_awaitable(result)
2009
- else cast("ExecutionResult", result)
2010
- )
2011
-
2012
- return map_async_iterable(self.cancellable_iterable(result_or_stream), callback)
2013
-
2014
1976
  def collect_execution_groups(
2015
1977
  self,
2016
1978
  parent_type: GraphQLObjectType,
@@ -2924,8 +2886,6 @@ def subscribe(
2924
2886
  enable_early_execution: bool = False,
2925
2887
  executor_class: type[Executor] | None = None,
2926
2888
  middleware: MiddlewareManager | None = None,
2927
- per_event_executor: Callable[[Executor], AwaitableOrValue[ExecutionResult]]
2928
- | None = None,
2929
2889
  hide_suggestions: bool = False,
2930
2890
  **custom_context_args: Any,
2931
2891
  ) -> AwaitableOrValue[AsyncIterator[ExecutionResult] | ExecutionResult]:
@@ -2952,10 +2912,12 @@ def subscribe(
2952
2912
  If an operation that defers or streams data is executed with this function,
2953
2913
  a field error will be raised at the location of the `@defer` or `@stream` directive.
2954
2914
 
2955
- A custom ``per_event_executor`` may be provided to execute each subscription event
2956
- with a custom executor. It receives the per-event executor and should
2957
- return an ExecutionResult, usually by calling
2958
- :func:`~graphql.execution.execute_subscription_event` (the default executor).
2915
+ To customize how each subscription event is executed, compose the subscription
2916
+ pipeline directly instead of calling this function: build an executor with
2917
+ :meth:`Executor.build`, resolve the source event stream with
2918
+ :func:`~graphql.execution.create_source_event_stream`, and map it to the response
2919
+ stream with :func:`~graphql.execution.map_source_to_response_event`, passing a
2920
+ custom ``root_selection_set_executor``.
2959
2921
  """
2960
2922
  if executor_class is None:
2961
2923
  executor_class = Executor
@@ -2975,7 +2937,6 @@ def subscribe(
2975
2937
  max_coercion_errors,
2976
2938
  enable_early_execution,
2977
2939
  middleware=middleware,
2978
- per_event_executor=per_event_executor,
2979
2940
  hide_suggestions=hide_suggestions,
2980
2941
  **custom_context_args,
2981
2942
  )
@@ -2994,16 +2955,19 @@ def subscribe(
2994
2955
 
2995
2956
  async def await_result() -> Any:
2996
2957
  awaited_result_or_stream = await result_or_stream
2997
- if isinstance(awaited_result_or_stream, ExecutionResult):
2998
- return awaited_result_or_stream
2999
- return executor.map_source_to_response(awaited_result_or_stream)
2958
+ return (
2959
+ map_source_to_response_event(executor, awaited_result_or_stream)
2960
+ if executor.is_async_iterable(awaited_result_or_stream)
2961
+ else awaited_result_or_stream
2962
+ )
3000
2963
 
3001
2964
  return await_result()
3002
2965
 
3003
- if isinstance(result_or_stream, ExecutionResult):
3004
- return result_or_stream
3005
-
3006
- return executor.map_source_to_response(result_or_stream) # type: ignore
2966
+ return (
2967
+ map_source_to_response_event(executor, result_or_stream) # type: ignore
2968
+ if executor.is_async_iterable(result_or_stream)
2969
+ else result_or_stream
2970
+ )
3007
2971
 
3008
2972
 
3009
2973
  def execute_root_selection_set(
@@ -3023,10 +2987,11 @@ def execute_subscription_event(
3023
2987
  ) -> AwaitableOrValue[ExecutionResult]:
3024
2988
  """Execute a single subscription event.
3025
2989
 
3026
- This is the default ``per_event_executor`` used by :func:`subscribe`. It provides
3027
- the "ExecuteSubscriptionEvent" algorithm described in the GraphQL specification,
3028
- which is nearly identical to the "ExecuteQuery" algorithm. A custom executor may
3029
- wrap this function to set up and tear down a per-event executor.
2990
+ This is the default ``root_selection_set_executor`` used by
2991
+ :func:`map_source_to_response_event`. It provides the "ExecuteSubscriptionEvent"
2992
+ algorithm described in the GraphQL specification, which is nearly identical to the
2993
+ "ExecuteQuery" algorithm. A custom executor may wrap this function to set up and
2994
+ tear down a per-event executor.
3030
2995
 
3031
2996
  The passed executor should be a per-event executor as created by
3032
2997
  :meth:`Executor.build_per_event_executor`.
@@ -3034,6 +2999,47 @@ def execute_subscription_event(
3034
2999
  return cast("AwaitableOrValue[ExecutionResult]", executor.execute_operation(False))
3035
3000
 
3036
3001
 
3002
+ RootSelectionSetExecutor: TypeAlias = Callable[
3003
+ ["Executor"], AwaitableOrValue[ExecutionResult]
3004
+ ]
3005
+
3006
+
3007
+ def map_source_to_response_event(
3008
+ executor: Executor,
3009
+ source_event_stream: AsyncIterable[Any],
3010
+ root_selection_set_executor: RootSelectionSetExecutor = execute_subscription_event,
3011
+ ) -> AsyncGenerator[ExecutionResult, None]:
3012
+ """Map a subscription source event stream to a response event stream.
3013
+
3014
+ Implements the "MapSourceToResponseEvent" algorithm described in the GraphQL
3015
+ specification, mapping each event from a subscription source event stream to an
3016
+ ExecutionResult in the response stream.
3017
+
3018
+ For each payload yielded from the source event stream, it is mapped over the normal
3019
+ GraphQL :func:`~graphql.execution.execute` function, with ``payload`` as the
3020
+ ``root_value``. Each event is executed with the given
3021
+ ``root_selection_set_executor``, which defaults to
3022
+ :func:`~graphql.execution.execute_subscription_event` (providing the
3023
+ "ExecuteSubscriptionEvent" algorithm) but can be overridden to set up and tear
3024
+ down a custom executor around the execution of each event.
3025
+ """
3026
+ build_executor = executor.build_per_event_executor
3027
+
3028
+ async def callback(payload: Any) -> ExecutionResult:
3029
+ result = root_selection_set_executor(build_executor(payload))
3030
+ # typecast to ExecutionResult, not possible to return
3031
+ # ExperimentalIncrementalExecutionResults when operation is 'subscription'.
3032
+ return (
3033
+ await cast("Awaitable[ExecutionResult]", result)
3034
+ if executor.is_awaitable(result)
3035
+ else cast("ExecutionResult", result)
3036
+ )
3037
+
3038
+ return map_async_iterable(
3039
+ executor.cancellable_iterable(source_event_stream), callback
3040
+ )
3041
+
3042
+
3037
3043
  def create_source_event_stream(
3038
3044
  executor: Executor,
3039
3045
  ) -> AwaitableOrValue[AsyncIterable[Any] | ExecutionResult]:
@@ -6,6 +6,8 @@ from typing import TYPE_CHECKING, Any, NamedTuple, TypeAlias
6
6
 
7
7
  from ..error import GraphQLError
8
8
  from ..language import (
9
+ DirectiveDefinitionNode,
10
+ DirectiveExtensionNode,
9
11
  DirectiveNode,
10
12
  EnumValueDefinitionNode,
11
13
  ExecutableDefinitionNode,
@@ -425,7 +427,9 @@ def print_argument_or_fragment_variable(
425
427
 
426
428
 
427
429
  NodeWithDirective: TypeAlias = (
428
- EnumValueDefinitionNode
430
+ DirectiveDefinitionNode
431
+ | DirectiveExtensionNode
432
+ | EnumValueDefinitionNode
429
433
  | ExecutableDefinitionNode
430
434
  | FieldDefinitionNode
431
435
  | InputValueDefinitionNode
@@ -101,6 +101,7 @@ from .ast import (
101
101
  UnionTypeExtensionNode,
102
102
  EnumTypeExtensionNode,
103
103
  InputObjectTypeExtensionNode,
104
+ DirectiveExtensionNode,
104
105
  SchemaCoordinateNode,
105
106
  TypeCoordinateNode,
106
107
  MemberCoordinateNode,
@@ -142,6 +143,7 @@ __all__ = [
142
143
  "DirectiveArgumentCoordinateNode",
143
144
  "DirectiveCoordinateNode",
144
145
  "DirectiveDefinitionNode",
146
+ "DirectiveExtensionNode",
145
147
  "DirectiveLocation",
146
148
  "DirectiveNode",
147
149
  "DocumentNode",