graphql-core 3.3.1__tar.gz → 3.3.2__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.
- {graphql_core-3.3.1 → graphql_core-3.3.2}/PKG-INFO +4 -4
- {graphql_core-3.3.1 → graphql_core-3.3.2}/README.md +3 -3
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/conf.py +1 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/pyutils.rst +2 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/pyproject.toml +10 -10
- {graphql_core-3.3.1 → graphql_core-3.3.2}/pyproject.toml.orig +10 -10
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/error/graphql_error.py +11 -6
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/collect_fields.py +64 -29
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/execute.py +18 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/executor.py +39 -18
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/build_execution_plan.py +6 -11
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/incremental_executor.py +2 -2
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/incremental_publisher.py +19 -7
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/work_queue.py +87 -35
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/values.py +43 -2
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/graphql.py +51 -20
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/ast.py +4 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/block_string.py +7 -2
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/lexer.py +31 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/location.py +38 -2
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/parser.py +339 -66
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/print_location.py +5 -1
- graphql_core-3.3.2/src/graphql/language/printer.py +544 -0
- graphql_core-3.3.2/src/graphql/language/reducer.py +83 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/source.py +9 -9
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/visitor.py +69 -64
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/__init__.py +2 -0
- graphql_core-3.3.2/src/graphql/pyutils/set_map.py +102 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/definition.py +6 -4
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/scalars.py +54 -12
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/schema.py +18 -6
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/build_ast_schema.py +18 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/type_info.py +8 -6
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/validate_input_value.py +5 -5
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/defer_stream_directive_on_root_field.py +37 -27
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/defer_stream_directive_on_valid_operations_rule.py +44 -27
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/known_argument_names.py +10 -10
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/known_directives.py +4 -4
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/known_type_names.py +21 -21
- graphql_core-3.3.2/src/graphql/validation/rules/max_introspection_depth_rule.py +151 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/no_undefined_variables.py +9 -27
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/no_unused_fragments.py +8 -5
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/no_unused_variables.py +4 -4
- graphql_core-3.3.2/src/graphql/validation/rules/overlapping_fields_can_be_merged.py +1633 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/provided_required_arguments.py +22 -10
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/scalar_leafs.py +4 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/single_field_subscriptions.py +54 -9
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/validate.py +137 -4
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/validation_context.py +124 -42
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/version.py +2 -2
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/conftest.py +17 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/error/test_print_location.py +45 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_defer.py +1035 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_incremental_publisher.py +33 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_stream.py +295 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_work_queue.py +358 -11
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_collect_fields.py +40 -12
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_executor.py +21 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_sync.py +71 -1
- graphql_core-3.3.2/tests/execution/test_too_deeply_nested_selections.py +130 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_variables.py +170 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_block_string.py +6 -0
- graphql_core-3.3.2/tests/language/test_location.py +224 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_parser.py +478 -3
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_printer.py +71 -0
- graphql_core-3.3.2/tests/language/test_reducer.py +101 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_source.py +12 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_visitor.py +6 -0
- graphql_core-3.3.2/tests/pyutils/test_set_map.py +129 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_graphql.py +108 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_introspection.py +60 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_scalars.py +81 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_validation.py +48 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_build_ast_schema.py +61 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_validate_input_value.py +22 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_defer_stream_directive_on_root_field.py +18 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_defer_stream_directive_on_valid_operations.py +19 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_max_introspection_depth_rule.py +237 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_undefined_variables.py +42 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_unused_variables.py +40 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_overlapping_fields_can_be_merged.py +1126 -81
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_provided_required_arguments.py +20 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_scalar_leafs.py +48 -27
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_single_field_subscriptions.py +124 -1
- graphql_core-3.3.2/tests/validation/test_validation.py +531 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_variables_in_allowed_position.py +30 -1
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tox.ini +5 -4
- graphql_core-3.3.1/src/graphql/language/printer.py +0 -506
- graphql_core-3.3.1/src/graphql/validation/rules/max_introspection_depth_rule.py +0 -102
- graphql_core-3.3.1/src/graphql/validation/rules/overlapping_fields_can_be_merged.py +0 -1106
- graphql_core-3.3.1/tests/language/test_location.py +0 -50
- graphql_core-3.3.1/tests/validation/test_validation.py +0 -238
- {graphql_core-3.3.1 → graphql_core-3.3.2}/.editorconfig +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/.readthedocs.yaml +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/CODEOWNERS +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/LICENSE +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/SECURITY.md +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/Makefile +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/diffs.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/index.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/intro.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/make.bat +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/error.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/execution.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/graphql.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/language.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/type.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/utilities.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/modules/validation.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/extension.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/index.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/introspection.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/methods.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/other.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/parser.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/queries.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/resolvers.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/schema.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/sdl.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/docs/usage/validator.rst +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/error/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/error/located_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/error/syntax_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/aborted_graphql_execution_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/async_iterables.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/executor_throwing_on_incremental.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/get_variable_signature.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/computation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/stream_item_queue.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/middleware.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/harness.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/character_classes.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/directive_locations.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/predicates.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/print_string.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/schema_coordinate_lexer.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/language/token_kind.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/py.typed +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/abort_signal.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/async_reduce.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/awaitable_or_value.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/cached_property.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/convert_case.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/description.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/did_you_mean.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/format_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/frozen_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/gather_with_cancel.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/group_by.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/identity_func.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/inspect.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/is_awaitable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/is_iterable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/merge_kwargs.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/natural_compare.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/path.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/print_path_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/ref_map.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/ref_set.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/simple_pub_sub.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/suggestion_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/pyutils/undefined.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/assert_name.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/directives.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/introspection.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/type/validate.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/ast_from_value.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/ast_to_dict.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/build_client_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/coerce_input_value.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/concat_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/extend_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/find_schema_changes.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/get_default_value_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/get_introspection_query.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/get_operation_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/introspection_from_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/lexicographic_sort_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/map_schema_config.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/print_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/replace_variables.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/resolve_schema_coordinate.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/separate_operations.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/sort_value_node.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/strip_ignored_characters.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/type_comparators.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/type_from_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/value_from_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/value_from_ast_untyped.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/utilities/value_to_literal.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/custom/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/custom/no_deprecated.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/custom/no_schema_introspection.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/defer_stream_directive_label.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/executable_definitions.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/fields_on_correct_type.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/fragments_on_composite_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/known_fragment_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/known_operation_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/lone_anonymous_operation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/lone_schema_definition.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/no_fragment_cycles.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/possible_fragment_spreads.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/possible_type_extensions.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/stream_directive_on_list_field.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_argument_definition_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_argument_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_directive_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_directives_per_location.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_enum_value_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_field_definition_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_fragment_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_input_field_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_operation_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_operation_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_type_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/unique_variable_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/values_of_correct_type.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/variables_are_input_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/rules/variables_in_allowed_position.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/validation/specified_rules.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_async_iterable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_build_ast_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_build_client_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_execution_arguments.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_execution_async.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_execution_sync.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_graphql_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_introspection_from_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_parser.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_print.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_repeated_fields.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_serialization.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_validate_gql.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_validate_invalid_gql.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_validate_sdl.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/benchmarks/test_visit.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/error/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/error/test_graphql_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/error/test_located_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_computation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_incremental_executor.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/incremental/test_stream_item_queue.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_aborted_graphql_execution_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_abstract.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_cancellation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_customize.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_directives.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_error_propagation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_execution_result.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_executor_throwing_on_incremental.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_hooks.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_lists.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_map_async_iterable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_middleware.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_mutations.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_nonnull.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_oneof.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_parallel.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_resolve.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_subscribe.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/execution/test_union_interface.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/github_schema.graphql +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/github_schema.json +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/kitchen_sink.graphql +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/large_query.graphql +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/fixtures/schema_kitchen_sink.graphql +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_block_string_fuzz.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_character_classes.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_lexer.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_predicates.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_print_string.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_schema_coordinate_lexer.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_schema_parser.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/language/test_schema_printer.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_async_reduce.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_cached_property.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_convert_case.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_description.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_did_you_mean.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_format_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_frozen_error.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_gather_with_cancel.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_group_by.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_identity_func.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_inspect.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_is_awaitable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_is_iterable.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_merge_kwargs.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_natural_compare.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_path.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_print_path_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_ref_map.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_ref_set.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_simple_pub_sub.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_suggestion_list.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/pyutils/test_undefined.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/star_wars_data.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/star_wars_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_docs.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_star_wars_introspection.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_star_wars_query.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_star_wars_validation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_user_registry.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/test_version.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_assert_name.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_custom_scalars.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_definition.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_directives.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_enum.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_extensions.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_predicate.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/type/test_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_ast_from_value.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_ast_to_dict.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_build_client_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_coerce_input_value.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_concat_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_extend_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_find_breaking_changes.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_find_schema_changes.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_get_introspection_query.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_get_operation_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_introspection_from_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_lexicographic_sort_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_map_schema_config.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_print_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_replace_variables.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_resolve_schema_coordinate.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_separate_operations.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_sort_value_node.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_strip_ignored_characters.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_strip_ignored_characters_fuzz.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_type_comparators.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_type_from_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_type_info.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_value_from_ast.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_value_from_ast_untyped.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utilities/test_value_to_literal.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/assert_equal_awaitables_or_values.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/assert_matching_values.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/dedent.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/gen_fuzz_strings.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/test_assert_equal_awaitables_or_values.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/test_assert_matching_values.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/test_dedent.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/test_gen_fuzz_strings.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/viral_schema.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/utils/viral_sdl.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/__init__.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/harness.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_defer_stream_directive_label.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_executable_definitions.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_fields_on_correct_type.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_fragments_on_composite_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_known_argument_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_known_directives.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_known_fragment_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_known_operation_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_known_type_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_lone_anonymous_operation.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_lone_schema_definition.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_deprecated.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_fragment_cycles.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_schema_introspection.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_no_unused_fragments.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_possible_fragment_spreads.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_possible_type_extensions.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_stream_directive_on_list_field.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_argument_definition_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_argument_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_directive_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_directives_per_location.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_enum_value_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_field_definition_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_fragment_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_input_field_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_operation_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_operation_types.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_type_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_unique_variable_names.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_values_of_correct_type.py +0 -0
- {graphql_core-3.3.1 → graphql_core-3.3.2}/tests/validation/test_variables_are_input_types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graphql-core
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.2
|
|
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
|
|
@@ -40,11 +40,11 @@ An extensive test suite with over 3000 unit tests and 100% coverage replicates t
|
|
|
40
40
|
complete test suite of GraphQL.js, ensuring that this port is reliable and compatible
|
|
41
41
|
with GraphQL.js.
|
|
42
42
|
|
|
43
|
-
The current stable version 3.3.
|
|
44
|
-
version 17.0
|
|
43
|
+
The current stable version 3.3.2 of GraphQL-core is up-to-date with GraphQL.js
|
|
44
|
+
version 17.1.0 and supports Python versions 3.10 to 3.15.
|
|
45
45
|
|
|
46
46
|
If you need compatibility with GraphQL.js 16 or support for Python 3.7 to 3.9,
|
|
47
|
-
you can use the latest version 3.2.
|
|
47
|
+
you can use the latest version 3.2.14 from the 3.2 branch.
|
|
48
48
|
|
|
49
49
|
Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js.
|
|
50
50
|
Changes in the major version of GraphQL.js are reflected in the minor version of
|
|
@@ -15,11 +15,11 @@ An extensive test suite with over 3000 unit tests and 100% coverage replicates t
|
|
|
15
15
|
complete test suite of GraphQL.js, ensuring that this port is reliable and compatible
|
|
16
16
|
with GraphQL.js.
|
|
17
17
|
|
|
18
|
-
The current stable version 3.3.
|
|
19
|
-
version 17.0
|
|
18
|
+
The current stable version 3.3.2 of GraphQL-core is up-to-date with GraphQL.js
|
|
19
|
+
version 17.1.0 and supports Python versions 3.10 to 3.15.
|
|
20
20
|
|
|
21
21
|
If you need compatibility with GraphQL.js 16 or support for Python 3.7 to 3.9,
|
|
22
|
-
you can use the latest version 3.2.
|
|
22
|
+
you can use the latest version 3.2.14 from the 3.2 branch.
|
|
23
23
|
|
|
24
24
|
Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js.
|
|
25
25
|
Changes in the major version of GraphQL.js are reflected in the minor version of
|
|
@@ -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.
|
|
55
|
+
version = release = "3.3.2"
|
|
56
56
|
|
|
57
57
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
58
58
|
# for a list of supported languages.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "graphql-core"
|
|
3
|
-
version = "3.3.
|
|
3
|
+
version = "3.3.2"
|
|
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,19 +32,19 @@ Changelog = "https://github.com/graphql-python/graphql-core/releases"
|
|
|
32
32
|
|
|
33
33
|
[dependency-groups]
|
|
34
34
|
test = [
|
|
35
|
-
"anyio>=4.
|
|
36
|
-
"pytest>=9.
|
|
37
|
-
"pytest-benchmark>=5.3,<6",
|
|
35
|
+
"anyio>=4.16,<5",
|
|
36
|
+
"pytest>=9.2,<10",
|
|
37
|
+
"pytest-benchmark>=5.3.1,<6",
|
|
38
38
|
"pytest-cov>=7.1,<8",
|
|
39
39
|
"pytest-describe>=3.2,<4",
|
|
40
40
|
"pytest-timeout>=2.4,<3",
|
|
41
41
|
"pytest-codspeed>=5",
|
|
42
|
-
"tox>=4.
|
|
42
|
+
"tox>=4.65,<5",
|
|
43
43
|
]
|
|
44
44
|
lint = [
|
|
45
|
-
"ruff>=0.
|
|
46
|
-
"mypy>=2.
|
|
47
|
-
"bump-my-version>=1.
|
|
45
|
+
"ruff>=0.17.4,<0.18",
|
|
46
|
+
"mypy>=2.4.1,<3",
|
|
47
|
+
"bump-my-version>=1.8.1,<2",
|
|
48
48
|
"typing-extensions>=4.16; python_version<'3.11'",
|
|
49
49
|
]
|
|
50
50
|
doc = [
|
|
@@ -312,7 +312,7 @@ filterwarnings = "ignore::pytest.PytestConfigWarning"
|
|
|
312
312
|
testpaths = ["tests"]
|
|
313
313
|
|
|
314
314
|
[tool.bumpversion]
|
|
315
|
-
current_version = "3.3.
|
|
315
|
+
current_version = "3.3.2"
|
|
316
316
|
commit = false
|
|
317
317
|
tag = false
|
|
318
318
|
parse = '''
|
|
@@ -356,5 +356,5 @@ search = '^version = "{current_version}"'
|
|
|
356
356
|
replace = 'version = "{new_version}"'
|
|
357
357
|
|
|
358
358
|
[build-system]
|
|
359
|
-
requires = ["uv_build>=0.
|
|
359
|
+
requires = ["uv_build>=0.13,<0.14"]
|
|
360
360
|
build-backend = "uv_build"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "graphql-core"
|
|
3
|
-
version = "3.3.
|
|
3
|
+
version = "3.3.2"
|
|
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"
|
|
@@ -29,19 +29,19 @@ Changelog = "https://github.com/graphql-python/graphql-core/releases"
|
|
|
29
29
|
|
|
30
30
|
[dependency-groups]
|
|
31
31
|
test = [
|
|
32
|
-
"anyio>=4.
|
|
33
|
-
"pytest>=9.
|
|
34
|
-
"pytest-benchmark>=5.3,<6",
|
|
32
|
+
"anyio>=4.16,<5",
|
|
33
|
+
"pytest>=9.2,<10",
|
|
34
|
+
"pytest-benchmark>=5.3.1,<6",
|
|
35
35
|
"pytest-cov>=7.1,<8",
|
|
36
36
|
"pytest-describe>=3.2,<4",
|
|
37
37
|
"pytest-timeout>=2.4,<3",
|
|
38
38
|
"pytest-codspeed>=5",
|
|
39
|
-
"tox>=4.
|
|
39
|
+
"tox>=4.65,<5",
|
|
40
40
|
]
|
|
41
41
|
lint = [
|
|
42
|
-
"ruff>=0.
|
|
43
|
-
"mypy>=2.
|
|
44
|
-
"bump-my-version>=1.
|
|
42
|
+
"ruff>=0.17.4,<0.18",
|
|
43
|
+
"mypy>=2.4.1,<3",
|
|
44
|
+
"bump-my-version>=1.8.1,<2",
|
|
45
45
|
"typing-extensions>=4.16; python_version<'3.11'",
|
|
46
46
|
]
|
|
47
47
|
doc = [
|
|
@@ -313,7 +313,7 @@ filterwarnings = "ignore::pytest.PytestConfigWarning"
|
|
|
313
313
|
testpaths = ["tests"]
|
|
314
314
|
|
|
315
315
|
[tool.bumpversion]
|
|
316
|
-
current_version = "3.3.
|
|
316
|
+
current_version = "3.3.2"
|
|
317
317
|
commit = false
|
|
318
318
|
tag = false
|
|
319
319
|
parse = '''(?x)
|
|
@@ -351,5 +351,5 @@ search = '^version = "{current_version}"'
|
|
|
351
351
|
replace = 'version = "{new_version}"'
|
|
352
352
|
|
|
353
353
|
[build-system]
|
|
354
|
-
requires = ["uv_build>=0.
|
|
354
|
+
requires = ["uv_build>=0.13,<0.14"]
|
|
355
355
|
build-backend = "uv_build"
|
|
@@ -287,13 +287,18 @@ class GraphQLError(Exception):
|
|
|
287
287
|
if not positions and node_locations:
|
|
288
288
|
positions = [loc.start for loc in node_locations]
|
|
289
289
|
self.positions = positions or None
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
]
|
|
290
|
+
source_positions = (
|
|
291
|
+
[(source, pos) for pos in positions]
|
|
292
|
+
if positions and source
|
|
293
|
+
else [(loc.source, loc.start) for loc in node_locations]
|
|
294
|
+
)
|
|
295
|
+
if source_positions:
|
|
296
|
+
# Lazy import to avoid a cyclic dependency between error and language
|
|
297
|
+
from ..language.location import get_locations
|
|
298
|
+
|
|
299
|
+
self.locations = get_locations(source_positions)
|
|
294
300
|
else:
|
|
295
|
-
locations =
|
|
296
|
-
self.locations = locations or None
|
|
301
|
+
self.locations = None
|
|
297
302
|
|
|
298
303
|
# Adopt the cause as the standard exception cause when it is one, so
|
|
299
304
|
# that the cause chain is reported without duplicating the traceback.
|
|
@@ -14,6 +14,7 @@ from ..language import (
|
|
|
14
14
|
OperationDefinitionNode,
|
|
15
15
|
SelectionSetNode,
|
|
16
16
|
)
|
|
17
|
+
from ..pyutils import RefSet
|
|
17
18
|
from ..type import (
|
|
18
19
|
GraphQLDeferDirective,
|
|
19
20
|
GraphQLIncludeDirective,
|
|
@@ -27,11 +28,12 @@ from .values import (
|
|
|
27
28
|
FragmentVariableValues,
|
|
28
29
|
VariableValues,
|
|
29
30
|
get_argument_values,
|
|
30
|
-
get_directive_values,
|
|
31
31
|
get_fragment_variable_values,
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
if TYPE_CHECKING:
|
|
35
|
+
from collections.abc import Callable
|
|
36
|
+
|
|
35
37
|
from .get_variable_signature import GraphQLVariableSignature
|
|
36
38
|
|
|
37
39
|
__all__ = [
|
|
@@ -44,12 +46,14 @@ __all__ = [
|
|
|
44
46
|
"GroupedFieldSet",
|
|
45
47
|
"collect_fields",
|
|
46
48
|
"collect_subfields",
|
|
49
|
+
"visit_selection_sets",
|
|
47
50
|
]
|
|
48
51
|
|
|
49
52
|
|
|
50
53
|
class DeferUsage(NamedTuple):
|
|
51
54
|
"""An optionally labelled linked list of defer usages."""
|
|
52
55
|
|
|
56
|
+
directive_node: DirectiveNode
|
|
53
57
|
label: str | None
|
|
54
58
|
parent_defer_usage: DeferUsage | None
|
|
55
59
|
|
|
@@ -72,6 +76,8 @@ class FragmentDetails(NamedTuple):
|
|
|
72
76
|
FieldDetailsList: TypeAlias = list[FieldDetails]
|
|
73
77
|
GroupedFieldSet: TypeAlias = dict[str, FieldDetailsList]
|
|
74
78
|
|
|
79
|
+
VisitedFragmentNames: TypeAlias = dict[str, RefSet[DirectiveNode | None]]
|
|
80
|
+
|
|
75
81
|
|
|
76
82
|
class CollectFieldsContext(NamedTuple):
|
|
77
83
|
"""Context for collecting fields."""
|
|
@@ -81,10 +87,11 @@ class CollectFieldsContext(NamedTuple):
|
|
|
81
87
|
variable_values: VariableValues
|
|
82
88
|
operation: OperationDefinitionNode
|
|
83
89
|
runtime_type: GraphQLObjectType
|
|
84
|
-
visited_fragment_names:
|
|
90
|
+
visited_fragment_names: VisitedFragmentNames
|
|
85
91
|
hide_suggestions: bool
|
|
86
92
|
forbidden_directive_instances: list[DirectiveNode]
|
|
87
93
|
forbid_skip_and_include: bool
|
|
94
|
+
on_selection_set: Callable[[SelectionSetNode], None] | None = None
|
|
88
95
|
|
|
89
96
|
|
|
90
97
|
class CollectedFields(NamedTuple):
|
|
@@ -103,6 +110,7 @@ def collect_fields(
|
|
|
103
110
|
operation: OperationDefinitionNode,
|
|
104
111
|
hide_suggestions: bool = False,
|
|
105
112
|
forbid_skip_and_include: bool = False,
|
|
113
|
+
on_selection_set: Callable[[SelectionSetNode], None] | None = None,
|
|
106
114
|
) -> CollectedFields:
|
|
107
115
|
"""Collect fields.
|
|
108
116
|
|
|
@@ -126,9 +134,10 @@ def collect_fields(
|
|
|
126
134
|
hide_suggestions,
|
|
127
135
|
[],
|
|
128
136
|
forbid_skip_and_include,
|
|
137
|
+
on_selection_set,
|
|
129
138
|
)
|
|
130
139
|
|
|
131
|
-
|
|
140
|
+
visit_selection_sets(
|
|
132
141
|
context, operation.selection_set, grouped_field_set, new_defer_usages
|
|
133
142
|
)
|
|
134
143
|
return CollectedFields(
|
|
@@ -173,7 +182,7 @@ def collect_subfields(
|
|
|
173
182
|
for field_detail in field_details_list:
|
|
174
183
|
node = field_detail.node
|
|
175
184
|
if node.selection_set:
|
|
176
|
-
|
|
185
|
+
visit_selection_sets(
|
|
177
186
|
context,
|
|
178
187
|
node.selection_set,
|
|
179
188
|
sub_grouped_field_set,
|
|
@@ -187,7 +196,7 @@ def collect_subfields(
|
|
|
187
196
|
)
|
|
188
197
|
|
|
189
198
|
|
|
190
|
-
def
|
|
199
|
+
def visit_selection_sets(
|
|
191
200
|
context: CollectFieldsContext,
|
|
192
201
|
selection_set: SelectionSetNode,
|
|
193
202
|
grouped_field_set: dict[str, list[FieldDetails]],
|
|
@@ -195,7 +204,10 @@ def collect_fields_impl(
|
|
|
195
204
|
defer_usage: DeferUsage | None = None,
|
|
196
205
|
fragment_variable_values: FragmentVariableValues | None = None,
|
|
197
206
|
) -> None:
|
|
198
|
-
"""Collect fields
|
|
207
|
+
"""Collect the fields of a selection set and the selection sets it contains.
|
|
208
|
+
|
|
209
|
+
For internal use only.
|
|
210
|
+
"""
|
|
199
211
|
(
|
|
200
212
|
schema,
|
|
201
213
|
fragments,
|
|
@@ -206,8 +218,12 @@ def collect_fields_impl(
|
|
|
206
218
|
hide_suggestions,
|
|
207
219
|
_forbidden_directive_instances,
|
|
208
220
|
_forbid_skip_and_include,
|
|
221
|
+
on_selection_set,
|
|
209
222
|
) = context
|
|
210
223
|
|
|
224
|
+
if on_selection_set:
|
|
225
|
+
on_selection_set(selection_set)
|
|
226
|
+
|
|
211
227
|
for selection in selection_set.selections:
|
|
212
228
|
if isinstance(selection, FieldNode):
|
|
213
229
|
if not should_include_node(
|
|
@@ -232,7 +248,7 @@ def collect_fields_impl(
|
|
|
232
248
|
)
|
|
233
249
|
|
|
234
250
|
if new_defer_usage is None:
|
|
235
|
-
|
|
251
|
+
visit_selection_sets(
|
|
236
252
|
context,
|
|
237
253
|
selection.selection_set,
|
|
238
254
|
grouped_field_set,
|
|
@@ -242,7 +258,7 @@ def collect_fields_impl(
|
|
|
242
258
|
)
|
|
243
259
|
else:
|
|
244
260
|
new_defer_usages.append(new_defer_usage)
|
|
245
|
-
|
|
261
|
+
visit_selection_sets(
|
|
246
262
|
context,
|
|
247
263
|
selection.selection_set,
|
|
248
264
|
grouped_field_set,
|
|
@@ -271,24 +287,27 @@ def collect_fields_impl(
|
|
|
271
287
|
defer_usage,
|
|
272
288
|
)
|
|
273
289
|
|
|
274
|
-
|
|
290
|
+
maybe_new_defer_usage = (
|
|
291
|
+
defer_usage if new_defer_usage is None else new_defer_usage
|
|
292
|
+
)
|
|
293
|
+
visited_defer_set = visited_fragment_names.get(frag_name)
|
|
294
|
+
if visited_defer_set is None:
|
|
295
|
+
visited_defer_set = visited_fragment_names[frag_name] = RefSet()
|
|
275
296
|
|
|
276
|
-
if
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
maybe_new_defer_usage = defer_usage
|
|
284
|
-
else:
|
|
285
|
-
# If this spread is deferred, it can be skipped if it has already
|
|
286
|
-
# been visited.
|
|
287
|
-
if visited_as_deferred is not None:
|
|
288
|
-
continue
|
|
289
|
-
visited_fragment_names[frag_name] = True
|
|
297
|
+
if None in visited_defer_set or (
|
|
298
|
+
maybe_new_defer_usage is not None
|
|
299
|
+
and maybe_new_defer_usage.directive_node in visited_defer_set
|
|
300
|
+
):
|
|
301
|
+
continue
|
|
302
|
+
|
|
303
|
+
if new_defer_usage is not None:
|
|
290
304
|
new_defer_usages.append(new_defer_usage)
|
|
291
|
-
|
|
305
|
+
|
|
306
|
+
visited_defer_set.add(
|
|
307
|
+
None
|
|
308
|
+
if maybe_new_defer_usage is None
|
|
309
|
+
else maybe_new_defer_usage.directive_node
|
|
310
|
+
)
|
|
292
311
|
|
|
293
312
|
fragment_variable_signatures = fragment.variable_signatures
|
|
294
313
|
new_fragment_variable_values: FragmentVariableValues | None = None
|
|
@@ -301,7 +320,7 @@ def collect_fields_impl(
|
|
|
301
320
|
hide_suggestions,
|
|
302
321
|
)
|
|
303
322
|
|
|
304
|
-
|
|
323
|
+
visit_selection_sets(
|
|
305
324
|
context,
|
|
306
325
|
fragment.definition.selection_set,
|
|
307
326
|
grouped_field_set,
|
|
@@ -323,14 +342,30 @@ def get_defer_usage(
|
|
|
323
342
|
deferred based on the experimental flag, defer directive present and
|
|
324
343
|
not disabled by the "if" argument.
|
|
325
344
|
"""
|
|
326
|
-
|
|
327
|
-
|
|
345
|
+
defer_name = GraphQLDeferDirective.name
|
|
346
|
+
directive_node = next(
|
|
347
|
+
(
|
|
348
|
+
directive
|
|
349
|
+
for directive in node.directives or ()
|
|
350
|
+
if directive.name.value == defer_name
|
|
351
|
+
),
|
|
352
|
+
None,
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
if directive_node is None:
|
|
356
|
+
return None
|
|
357
|
+
|
|
358
|
+
defer = get_argument_values(
|
|
359
|
+
GraphQLDeferDirective,
|
|
360
|
+
directive_node,
|
|
361
|
+
variable_values,
|
|
362
|
+
fragment_variable_values,
|
|
328
363
|
)
|
|
329
364
|
|
|
330
|
-
if
|
|
365
|
+
if defer.get("if") is False:
|
|
331
366
|
return None
|
|
332
367
|
|
|
333
|
-
return DeferUsage(defer.get("label"), parent_defer_usage)
|
|
368
|
+
return DeferUsage(directive_node, defer.get("label"), parent_defer_usage)
|
|
334
369
|
|
|
335
370
|
|
|
336
371
|
def should_include_node(
|
|
@@ -25,6 +25,7 @@ from ..pyutils.is_awaitable import (
|
|
|
25
25
|
from .async_iterables import map_async_iterable
|
|
26
26
|
from .collect_fields import collect_fields
|
|
27
27
|
from .executor import (
|
|
28
|
+
SELECTIONS_NESTED_TOO_DEEPLY,
|
|
28
29
|
UNEXPECTED_MULTIPLE_PAYLOADS,
|
|
29
30
|
AsyncWorkFinishedInfo,
|
|
30
31
|
ExecutionHooks,
|
|
@@ -465,6 +466,14 @@ def assume_not_awaitable(_value: Any) -> TypeGuard[Awaitable]:
|
|
|
465
466
|
return False
|
|
466
467
|
|
|
467
468
|
|
|
469
|
+
def assume_not_async_iterable(_value: Any) -> TypeGuard[AsyncIterable]:
|
|
470
|
+
"""Replacement for is_async_iterable if everything is assumed to be synchronous.
|
|
471
|
+
|
|
472
|
+
:meta private:
|
|
473
|
+
"""
|
|
474
|
+
return False
|
|
475
|
+
|
|
476
|
+
|
|
468
477
|
def execute_sync(
|
|
469
478
|
schema: GraphQLSchema,
|
|
470
479
|
document: DocumentNode,
|
|
@@ -549,6 +558,7 @@ def execute_sync(
|
|
|
549
558
|
if callable(check_sync)
|
|
550
559
|
else (None if check_sync else assume_not_awaitable)
|
|
551
560
|
)
|
|
561
|
+
is_async_iterable = assume_not_async_iterable if not check_sync else None
|
|
552
562
|
|
|
553
563
|
result = experimental_execute_incrementally(
|
|
554
564
|
schema,
|
|
@@ -565,6 +575,7 @@ def execute_sync(
|
|
|
565
575
|
middleware,
|
|
566
576
|
executor_class,
|
|
567
577
|
is_awaitable,
|
|
578
|
+
is_async_iterable,
|
|
568
579
|
hide_suggestions=hide_suggestions,
|
|
569
580
|
abort_signal=abort_signal,
|
|
570
581
|
hooks=hooks,
|
|
@@ -988,6 +999,13 @@ def create_source_event_stream(
|
|
|
988
999
|
event_stream = execute_subscription(executor)
|
|
989
1000
|
except GraphQLError as error:
|
|
990
1001
|
return ExecutionResult(None, errors=[error])
|
|
1002
|
+
except RecursionError:
|
|
1003
|
+
# This error is never raised, so it has no traceback or context
|
|
1004
|
+
# that would keep all the frames of the recursion alive.
|
|
1005
|
+
return ExecutionResult(
|
|
1006
|
+
None,
|
|
1007
|
+
errors=[GraphQLError(SELECTIONS_NESTED_TOO_DEEPLY, executor.operation)],
|
|
1008
|
+
)
|
|
991
1009
|
|
|
992
1010
|
if executor.is_awaitable(event_stream):
|
|
993
1011
|
|
|
@@ -126,6 +126,8 @@ UNEXPECTED_MULTIPLE_PAYLOADS = (
|
|
|
126
126
|
" (due to @defer or @stream directive)"
|
|
127
127
|
)
|
|
128
128
|
|
|
129
|
+
SELECTIONS_NESTED_TOO_DEEPLY = "Selections are nested too deeply. Execution aborted."
|
|
130
|
+
|
|
129
131
|
DEFER_NOT_SUPPORTED_ON_SUBSCRIPTIONS = (
|
|
130
132
|
"`@defer` directive not supported on subscription operations."
|
|
131
133
|
" Disable `@defer` by setting the `if` argument to `false`."
|
|
@@ -696,14 +698,21 @@ class Executor(Generic[TContext]):
|
|
|
696
698
|
raise GraphQLError(msg, operation) # noqa: TRY301
|
|
697
699
|
root_value = self.root_value
|
|
698
700
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
701
|
+
try:
|
|
702
|
+
collected_fields = collect_fields(
|
|
703
|
+
schema,
|
|
704
|
+
self.fragments,
|
|
705
|
+
self.variable_values,
|
|
706
|
+
root_type,
|
|
707
|
+
operation,
|
|
708
|
+
self.hide_suggestions,
|
|
709
|
+
)
|
|
710
|
+
except RecursionError:
|
|
711
|
+
collected_fields = None
|
|
712
|
+
# Leave the block above first, or the RecursionError would be kept as the
|
|
713
|
+
# context of this error and keep all the frames of the recursion alive.
|
|
714
|
+
if collected_fields is None:
|
|
715
|
+
raise GraphQLError(SELECTIONS_NESTED_TOO_DEEPLY, operation) # noqa: TRY301
|
|
707
716
|
|
|
708
717
|
grouped_field_set, new_defer_usages, _forbidden = collected_fields
|
|
709
718
|
|
|
@@ -956,12 +965,16 @@ class Executor(Generic[TContext]):
|
|
|
956
965
|
try:
|
|
957
966
|
# Build a dictionary of arguments from the field.arguments AST, using the
|
|
958
967
|
# variables scope to fulfill any variable references.
|
|
959
|
-
args =
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
968
|
+
args = (
|
|
969
|
+
get_argument_values(
|
|
970
|
+
field_def,
|
|
971
|
+
first_field_node,
|
|
972
|
+
self.variable_values,
|
|
973
|
+
first_field_details.fragment_variable_values,
|
|
974
|
+
self.hide_suggestions,
|
|
975
|
+
)
|
|
976
|
+
if field_def.args or first_field_node.arguments
|
|
977
|
+
else {}
|
|
965
978
|
)
|
|
966
979
|
|
|
967
980
|
# Note that contrary to the JavaScript implementation, we pass the context
|
|
@@ -988,11 +1001,17 @@ class Executor(Generic[TContext]):
|
|
|
988
1001
|
)
|
|
989
1002
|
if self.is_awaitable(completed):
|
|
990
1003
|
|
|
991
|
-
async def await_completed(
|
|
1004
|
+
async def await_completed(
|
|
1005
|
+
executor: Executor,
|
|
1006
|
+
completed: Awaitable[Any],
|
|
1007
|
+
return_type: GraphQLOutputType,
|
|
1008
|
+
field_details_list: FieldDetailsList,
|
|
1009
|
+
path: Path,
|
|
1010
|
+
) -> Any:
|
|
992
1011
|
try:
|
|
993
1012
|
return await completed
|
|
994
1013
|
except Exception as raw_error:
|
|
995
|
-
|
|
1014
|
+
executor.handle_field_error(
|
|
996
1015
|
raw_error,
|
|
997
1016
|
return_type,
|
|
998
1017
|
field_details_list,
|
|
@@ -1000,7 +1019,9 @@ class Executor(Generic[TContext]):
|
|
|
1000
1019
|
)
|
|
1001
1020
|
return None
|
|
1002
1021
|
|
|
1003
|
-
return await_completed(
|
|
1022
|
+
return await_completed(
|
|
1023
|
+
self, completed, return_type, field_details_list, path
|
|
1024
|
+
)
|
|
1004
1025
|
|
|
1005
1026
|
except Exception as raw_error:
|
|
1006
1027
|
self.handle_field_error(
|
|
@@ -1024,7 +1045,7 @@ class Executor(Generic[TContext]):
|
|
|
1024
1045
|
|
|
1025
1046
|
:meta private:
|
|
1026
1047
|
"""
|
|
1027
|
-
# The resolve function's
|
|
1048
|
+
# The resolve function's second argument is a collection of information about
|
|
1028
1049
|
# the current execution state.
|
|
1029
1050
|
return GraphQLResolveInfo(
|
|
1030
1051
|
field_nodes[0].name.value,
|
{graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/build_execution_plan.py
RENAMED
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import NamedTuple, TypeAlias
|
|
6
6
|
|
|
7
|
-
from ...pyutils import
|
|
7
|
+
from ...pyutils import RefSet, SetMap
|
|
8
8
|
from ..collect_fields import DeferUsage, FieldDetailsList, GroupedFieldSet
|
|
9
9
|
|
|
10
10
|
__all__ = [
|
|
@@ -22,7 +22,7 @@ class ExecutionPlan(NamedTuple):
|
|
|
22
22
|
"""A plan for executing fields."""
|
|
23
23
|
|
|
24
24
|
grouped_field_set: GroupedFieldSet
|
|
25
|
-
new_grouped_field_sets:
|
|
25
|
+
new_grouped_field_sets: SetMap[DeferUsageSet, GroupedFieldSet]
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def build_execution_plan(
|
|
@@ -34,7 +34,7 @@ def build_execution_plan(
|
|
|
34
34
|
parent_defer_usages = RefSet()
|
|
35
35
|
|
|
36
36
|
grouped_field_set: GroupedFieldSet = {}
|
|
37
|
-
new_grouped_field_sets:
|
|
37
|
+
new_grouped_field_sets: SetMap[DeferUsageSet, GroupedFieldSet] = SetMap()
|
|
38
38
|
|
|
39
39
|
for response_key, field_details_list in original_grouped_field_set.items():
|
|
40
40
|
filtered_defer_usage_set = get_filtered_defer_usage_set(field_details_list)
|
|
@@ -43,14 +43,9 @@ def build_execution_plan(
|
|
|
43
43
|
grouped_field_set[response_key] = field_details_list
|
|
44
44
|
continue
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
break
|
|
50
|
-
else:
|
|
51
|
-
new_grouped_field_set = {}
|
|
52
|
-
new_grouped_field_sets[filtered_defer_usage_set] = new_grouped_field_set
|
|
53
|
-
|
|
46
|
+
new_grouped_field_set = new_grouped_field_sets.get_or_insert_computed(
|
|
47
|
+
filtered_defer_usage_set, lambda _members: {}
|
|
48
|
+
)
|
|
54
49
|
new_grouped_field_set[response_key] = field_details_list
|
|
55
50
|
|
|
56
51
|
return ExecutionPlan(grouped_field_set, new_grouped_field_sets)
|
{graphql_core-3.3.1 → graphql_core-3.3.2}/src/graphql/execution/incremental/incremental_executor.py
RENAMED
|
@@ -26,7 +26,7 @@ from .work_queue import Work, WorkResult, WorkTask
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from collections.abc import AsyncIterator, Iterator, Sequence
|
|
28
28
|
|
|
29
|
-
from ...pyutils import AwaitableOrValue, Path
|
|
29
|
+
from ...pyutils import AwaitableOrValue, Path, SetMap
|
|
30
30
|
from ...type import (
|
|
31
31
|
GraphQLObjectType,
|
|
32
32
|
GraphQLOutputType,
|
|
@@ -403,7 +403,7 @@ class IncrementalExecutor(Executor[DeliveryGroupMap]):
|
|
|
403
403
|
parent_type: GraphQLObjectType,
|
|
404
404
|
source_value: Any,
|
|
405
405
|
path: Path | None,
|
|
406
|
-
new_grouped_field_sets:
|
|
406
|
+
new_grouped_field_sets: SetMap[DeferUsageSet, GroupedFieldSet],
|
|
407
407
|
delivery_group_map: DeliveryGroupMap,
|
|
408
408
|
) -> None:
|
|
409
409
|
"""Create execution groups for the new deferred grouped field sets."""
|