strawberry-graphql 0.229.2.dev1715881453__tar.gz → 0.230.0.dev1716318708__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.
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/PKG-INFO +1 -1
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/pyproject.toml +1 -1
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/object_type.py +9 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/object_type.py +8 -0
- strawberry_graphql-0.230.0.dev1716318708/strawberry/permission.py +187 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/execute.py +5 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/schema.py +11 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/schema_converter.py +23 -0
- strawberry_graphql-0.230.0.dev1716318708/strawberry/schema/validation_rules/one_of.py +80 -0
- strawberry_graphql-0.230.0.dev1716318708/strawberry/schema_directives.py +8 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/type.py +4 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/types.py +9 -0
- strawberry_graphql-0.230.0.dev1716318708/strawberry/utils/__init__.py +0 -0
- strawberry_graphql-0.229.2.dev1715881453/strawberry/permission.py +0 -343
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/LICENSE +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/README.md +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/__main__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/handlers/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/test/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/test/client.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/aiohttp/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/annotation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/arguments.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/handlers/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/test/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/asgi/test/client.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/auto.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/chalice/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/chalice/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/handlers/base.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/handlers/http_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/handlers/ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/router.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/channels/testing.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/app.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/codegen.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/export_schema.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/schema_codegen.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/server.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/upgrade/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/upgrade/_fake_progress.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/commands/upgrade/_run_codemod.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/constants.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/debug_server.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/utils/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/cli/utils/load_schema.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/exceptions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/plugins/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/plugins/print_operation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/plugins/python.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/plugins/typescript.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/query_codegen.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codegen/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codemods/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/codemods/annotated_unions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/custom_scalar.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/dataloader.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/directive.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/apps.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/context.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/test/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/test/client.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/django/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/enum.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/conflicting_arguments.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/duplicated_type_name.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/exception.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/exception_source.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/invalid_argument_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/invalid_union_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/missing_arguments_annotations.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/missing_field_annotation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/missing_return_annotation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/not_a_strawberry_enum.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/object_is_not_a_class.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/object_is_not_an_enum.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/permission_fail_silently_requires_optional.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/private_strawberry_field.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/scalar_already_registered.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/syntax.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/unresolved_field_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/utils/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/exceptions/utils/source_finder.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/_compat.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/conversion.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/conversion_types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/error_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/exceptions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/fields.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/object_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/experimental/pydantic/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/LICENSE +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/dataclasses/LICENSE +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/dataclasses/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/dataclasses/dataclasses.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/ext/mypy_plugin.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/add_validation_rules.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/base_extension.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/context.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/directives.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/disable_validation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/field_extension.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/mask_errors.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/max_aliases.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/max_tokens.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/parser_cache.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/pyinstrument.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/query_depth_limiter.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/runner.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/apollo.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/datadog.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/opentelemetry.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/sentry.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/tracing/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/extensions/validation_cache.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/context.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/handlers/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/fastapi/router.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/argument.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/enum.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/field.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/mutation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/scalar.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/schema.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/schema_directive.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/schema_directives.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/federation/union.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/field.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/field_extensions/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/field_extensions/input_mutation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/file_uploads/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/file_uploads/scalars.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/file_uploads/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/flask/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/flask/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/async_base_view.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/base.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/exceptions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/ides.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/sync_base_view.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/temporal_response.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/http/typevars.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/lazy_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/litestar/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/litestar/controller.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/litestar/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/litestar/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/mutation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/parent.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/printer/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/printer/ast_from_value.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/printer/printer.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/private.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/py.typed +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/quart/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/quart/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/relay/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/relay/exceptions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/relay/fields.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/relay/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/relay/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/resolvers.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/sanic/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/sanic/context.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/sanic/utils.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/sanic/views.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/scalars.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/base.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/compat.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/config.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/exceptions.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/name_converter.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/types/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/types/base_scalars.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/types/concrete_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema/types/scalar.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453/strawberry/subscriptions/protocols → strawberry_graphql-0.230.0.dev1716318708/strawberry/schema/validation_rules}/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema_codegen/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/schema_directive.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/starlite/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/starlite/controller.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/starlite/handlers/graphql_transport_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/starlite/handlers/graphql_ws_handler.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/static/apollo-sandbox.html +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/static/graphiql.html +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/static/pathfinder.html +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453/strawberry/types/fields → strawberry_graphql-0.230.0.dev1716318708/strawberry/subscriptions/protocols}/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_transport_ws/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_ws/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_ws/handlers.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/subscriptions/protocols/graphql_ws/types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/test/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/test/client.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/tools/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/tools/create_type.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/tools/merge_types.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/execution.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453/strawberry/utils → strawberry_graphql-0.230.0.dev1716318708/strawberry/types/fields}/__init__.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/fields/resolver.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/graphql.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/info.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/nodes.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/types/type_resolver.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/union.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/unset.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/aio.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/await_maybe.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/dataclasses.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/debug.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/deprecations.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/graphql_lexer.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/importer.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/inspect.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/logging.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/operation.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/str_converters.py +0 -0
- {strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/strawberry/utils/typing.py +0 -0
{strawberry_graphql-0.229.2.dev1715881453 → strawberry_graphql-0.230.0.dev1716318708}/pyproject.toml
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "strawberry-graphql"
|
3
3
|
packages = [ { include = "strawberry" } ]
|
4
|
-
version = "0.
|
4
|
+
version = "0.230.0.dev.1716318708"
|
5
5
|
description = "A library for creating GraphQL APIs"
|
6
6
|
authors = ["Patrick Arminio <patrick.arminio@gmail.com>"]
|
7
7
|
license = "MIT"
|
@@ -31,6 +31,7 @@ def _impl_type(
|
|
31
31
|
*,
|
32
32
|
name: Optional[str] = None,
|
33
33
|
description: Optional[str] = None,
|
34
|
+
one_of: Optional[bool] = None,
|
34
35
|
directives: Iterable[object] = (),
|
35
36
|
authenticated: bool = False,
|
36
37
|
keys: Iterable[Union["Key", str]] = (),
|
@@ -54,6 +55,7 @@ def _impl_type(
|
|
54
55
|
Shareable,
|
55
56
|
Tag,
|
56
57
|
)
|
58
|
+
from strawberry.schema_directives import OneOf
|
57
59
|
|
58
60
|
directives = list(directives)
|
59
61
|
|
@@ -83,6 +85,9 @@ def _impl_type(
|
|
83
85
|
if is_interface_object:
|
84
86
|
directives.append(InterfaceObject())
|
85
87
|
|
88
|
+
if one_of:
|
89
|
+
directives.append(OneOf())
|
90
|
+
|
86
91
|
return base_type( # type: ignore
|
87
92
|
cls,
|
88
93
|
name=name,
|
@@ -180,6 +185,7 @@ def input(
|
|
180
185
|
cls: T,
|
181
186
|
*,
|
182
187
|
name: Optional[str] = None,
|
188
|
+
one_of: Optional[bool] = None,
|
183
189
|
description: Optional[str] = None,
|
184
190
|
directives: Sequence[object] = (),
|
185
191
|
inaccessible: bool = UNSET,
|
@@ -197,6 +203,7 @@ def input(
|
|
197
203
|
*,
|
198
204
|
name: Optional[str] = None,
|
199
205
|
description: Optional[str] = None,
|
206
|
+
one_of: Optional[bool] = None,
|
200
207
|
directives: Sequence[object] = (),
|
201
208
|
inaccessible: bool = UNSET,
|
202
209
|
tags: Iterable[str] = (),
|
@@ -207,6 +214,7 @@ def input(
|
|
207
214
|
cls: Optional[T] = None,
|
208
215
|
*,
|
209
216
|
name: Optional[str] = None,
|
217
|
+
one_of: Optional[bool] = None,
|
210
218
|
description: Optional[str] = None,
|
211
219
|
directives: Sequence[object] = (),
|
212
220
|
inaccessible: bool = UNSET,
|
@@ -219,6 +227,7 @@ def input(
|
|
219
227
|
directives=directives,
|
220
228
|
inaccessible=inaccessible,
|
221
229
|
is_input=True,
|
230
|
+
one_of=one_of,
|
222
231
|
tags=tags,
|
223
232
|
)
|
224
233
|
|
@@ -293,6 +293,7 @@ def input(
|
|
293
293
|
cls: T,
|
294
294
|
*,
|
295
295
|
name: Optional[str] = None,
|
296
|
+
one_of: Optional[bool] = None,
|
296
297
|
description: Optional[str] = None,
|
297
298
|
directives: Optional[Sequence[object]] = (),
|
298
299
|
) -> T: ...
|
@@ -305,6 +306,7 @@ def input(
|
|
305
306
|
def input(
|
306
307
|
*,
|
307
308
|
name: Optional[str] = None,
|
309
|
+
one_of: Optional[bool] = None,
|
308
310
|
description: Optional[str] = None,
|
309
311
|
directives: Optional[Sequence[object]] = (),
|
310
312
|
) -> Callable[[T], T]: ...
|
@@ -314,6 +316,7 @@ def input(
|
|
314
316
|
cls: Optional[T] = None,
|
315
317
|
*,
|
316
318
|
name: Optional[str] = None,
|
319
|
+
one_of: Optional[bool] = None,
|
317
320
|
description: Optional[str] = None,
|
318
321
|
directives: Optional[Sequence[object]] = (),
|
319
322
|
):
|
@@ -324,6 +327,11 @@ def input(
|
|
324
327
|
>>> field_abc: str = "ABC"
|
325
328
|
"""
|
326
329
|
|
330
|
+
from strawberry.schema_directives import OneOf
|
331
|
+
|
332
|
+
if one_of:
|
333
|
+
directives = (*(directives or ()), OneOf())
|
334
|
+
|
327
335
|
return type( # type: ignore # not sure why mypy complains here
|
328
336
|
cls,
|
329
337
|
name=name,
|
@@ -0,0 +1,187 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import abc
|
4
|
+
import inspect
|
5
|
+
from functools import cached_property
|
6
|
+
from inspect import iscoroutinefunction
|
7
|
+
from typing import (
|
8
|
+
TYPE_CHECKING,
|
9
|
+
Any,
|
10
|
+
Awaitable,
|
11
|
+
Dict,
|
12
|
+
List,
|
13
|
+
Optional,
|
14
|
+
Type,
|
15
|
+
Union,
|
16
|
+
)
|
17
|
+
|
18
|
+
from strawberry.exceptions import StrawberryGraphQLError
|
19
|
+
from strawberry.exceptions.permission_fail_silently_requires_optional import (
|
20
|
+
PermissionFailSilentlyRequiresOptionalError,
|
21
|
+
)
|
22
|
+
from strawberry.extensions import FieldExtension
|
23
|
+
from strawberry.schema_directive import Location, StrawberrySchemaDirective
|
24
|
+
from strawberry.type import StrawberryList, StrawberryOptional
|
25
|
+
from strawberry.utils.await_maybe import await_maybe
|
26
|
+
|
27
|
+
if TYPE_CHECKING:
|
28
|
+
from graphql import GraphQLError, GraphQLErrorExtensions
|
29
|
+
|
30
|
+
from strawberry.extensions.field_extension import (
|
31
|
+
AsyncExtensionResolver,
|
32
|
+
SyncExtensionResolver,
|
33
|
+
)
|
34
|
+
from strawberry.field import StrawberryField
|
35
|
+
from strawberry.types import Info
|
36
|
+
|
37
|
+
|
38
|
+
class BasePermission(abc.ABC):
|
39
|
+
"""
|
40
|
+
Base class for creating permissions
|
41
|
+
"""
|
42
|
+
|
43
|
+
message: Optional[str] = None
|
44
|
+
|
45
|
+
error_extensions: Optional[GraphQLErrorExtensions] = None
|
46
|
+
|
47
|
+
error_class: Type[GraphQLError] = StrawberryGraphQLError
|
48
|
+
|
49
|
+
_schema_directive: Optional[object] = None
|
50
|
+
|
51
|
+
@abc.abstractmethod
|
52
|
+
def has_permission(
|
53
|
+
self, source: Any, info: Info, **kwargs: Any
|
54
|
+
) -> Union[bool, Awaitable[bool]]:
|
55
|
+
raise NotImplementedError(
|
56
|
+
"Permission classes should override has_permission method"
|
57
|
+
)
|
58
|
+
|
59
|
+
def on_unauthorized(self) -> None:
|
60
|
+
"""
|
61
|
+
Default error raising for permissions.
|
62
|
+
This can be overridden to customize the behavior.
|
63
|
+
"""
|
64
|
+
|
65
|
+
# Instantiate error class
|
66
|
+
error = self.error_class(self.message or "")
|
67
|
+
|
68
|
+
if self.error_extensions:
|
69
|
+
# Add our extensions to the error
|
70
|
+
if not error.extensions:
|
71
|
+
error.extensions = dict()
|
72
|
+
error.extensions.update(self.error_extensions)
|
73
|
+
|
74
|
+
raise error
|
75
|
+
|
76
|
+
@property
|
77
|
+
def schema_directive(self) -> object:
|
78
|
+
if not self._schema_directive:
|
79
|
+
|
80
|
+
class AutoDirective:
|
81
|
+
__strawberry_directive__ = StrawberrySchemaDirective(
|
82
|
+
self.__class__.__name__,
|
83
|
+
self.__class__.__name__,
|
84
|
+
[Location.FIELD_DEFINITION],
|
85
|
+
[],
|
86
|
+
)
|
87
|
+
|
88
|
+
self._schema_directive = AutoDirective()
|
89
|
+
|
90
|
+
return self._schema_directive
|
91
|
+
|
92
|
+
|
93
|
+
class PermissionExtension(FieldExtension):
|
94
|
+
"""
|
95
|
+
Handles permissions for a field
|
96
|
+
Instantiate this as a field extension with all of the permissions you want to apply
|
97
|
+
|
98
|
+
fail_silently: bool = False will return None or [] if the permission fails
|
99
|
+
instead of raising an exception. This is only valid for optional or list fields.
|
100
|
+
|
101
|
+
NOTE:
|
102
|
+
Currently, this is automatically added to the field, when using
|
103
|
+
field.permission_classes
|
104
|
+
This is deprecated behavior, please manually add the extension to field.extensions
|
105
|
+
"""
|
106
|
+
|
107
|
+
def __init__(
|
108
|
+
self,
|
109
|
+
permissions: List[BasePermission],
|
110
|
+
use_directives: bool = True,
|
111
|
+
fail_silently: bool = False,
|
112
|
+
) -> None:
|
113
|
+
self.permissions = permissions
|
114
|
+
self.fail_silently = fail_silently
|
115
|
+
self.return_empty_list = False
|
116
|
+
self.use_directives = use_directives
|
117
|
+
|
118
|
+
def apply(self, field: StrawberryField) -> None:
|
119
|
+
"""
|
120
|
+
Applies all of the permission directives to the schema
|
121
|
+
and sets up silent permissions
|
122
|
+
"""
|
123
|
+
if self.use_directives:
|
124
|
+
field.directives.extend(
|
125
|
+
p.schema_directive for p in self.permissions if p.schema_directive
|
126
|
+
)
|
127
|
+
# We can only fail silently if the field is optional or a list
|
128
|
+
if self.fail_silently:
|
129
|
+
if isinstance(field.type, StrawberryOptional):
|
130
|
+
if isinstance(field.type.of_type, StrawberryList):
|
131
|
+
self.return_empty_list = True
|
132
|
+
elif isinstance(field.type, StrawberryList):
|
133
|
+
self.return_empty_list = True
|
134
|
+
else:
|
135
|
+
errror = PermissionFailSilentlyRequiresOptionalError(field)
|
136
|
+
raise errror
|
137
|
+
|
138
|
+
def _on_unauthorized(self, permission: BasePermission) -> Any:
|
139
|
+
if self.fail_silently:
|
140
|
+
return [] if self.return_empty_list else None
|
141
|
+
return permission.on_unauthorized()
|
142
|
+
|
143
|
+
def resolve(
|
144
|
+
self,
|
145
|
+
next_: SyncExtensionResolver,
|
146
|
+
source: Any,
|
147
|
+
info: Info,
|
148
|
+
**kwargs: Dict[str, Any],
|
149
|
+
) -> Any:
|
150
|
+
"""
|
151
|
+
Checks if the permission should be accepted and
|
152
|
+
raises an exception if not
|
153
|
+
"""
|
154
|
+
for permission in self.permissions:
|
155
|
+
if not permission.has_permission(source, info, **kwargs):
|
156
|
+
return self._on_unauthorized(permission)
|
157
|
+
return next_(source, info, **kwargs)
|
158
|
+
|
159
|
+
async def resolve_async(
|
160
|
+
self,
|
161
|
+
next_: AsyncExtensionResolver,
|
162
|
+
source: Any,
|
163
|
+
info: Info,
|
164
|
+
**kwargs: Dict[str, Any],
|
165
|
+
) -> Any:
|
166
|
+
for permission in self.permissions:
|
167
|
+
has_permission = await await_maybe(
|
168
|
+
permission.has_permission(source, info, **kwargs)
|
169
|
+
)
|
170
|
+
|
171
|
+
if not has_permission:
|
172
|
+
return self._on_unauthorized(permission)
|
173
|
+
next = next_(source, info, **kwargs)
|
174
|
+
if inspect.isasyncgen(next):
|
175
|
+
return next
|
176
|
+
return await next
|
177
|
+
|
178
|
+
@cached_property
|
179
|
+
def supports_sync(self) -> bool:
|
180
|
+
"""The Permission extension always supports async checking using await_maybe,
|
181
|
+
but only supports sync checking if there are no async permissions"""
|
182
|
+
async_permissions = [
|
183
|
+
True
|
184
|
+
for permission in self.permissions
|
185
|
+
if iscoroutinefunction(permission.has_permission)
|
186
|
+
]
|
187
|
+
return len(async_permissions) == 0
|
@@ -23,6 +23,7 @@ from graphql.validation import validate
|
|
23
23
|
|
24
24
|
from strawberry.exceptions import MissingQueryError
|
25
25
|
from strawberry.extensions.runner import SchemaExtensionsRunner
|
26
|
+
from strawberry.schema.validation_rules.one_of import OneOfInputValidationRule
|
26
27
|
from strawberry.types import ExecutionResult
|
27
28
|
|
28
29
|
from .exceptions import InvalidOperationTypeError
|
@@ -55,6 +56,10 @@ def validate_document(
|
|
55
56
|
document: DocumentNode,
|
56
57
|
validation_rules: Tuple[Type[ASTValidationRule], ...],
|
57
58
|
) -> List[GraphQLError]:
|
59
|
+
validation_rules = (
|
60
|
+
*validation_rules,
|
61
|
+
OneOfInputValidationRule,
|
62
|
+
)
|
58
63
|
return validate(
|
59
64
|
schema,
|
60
65
|
document,
|
@@ -16,6 +16,8 @@ from typing import (
|
|
16
16
|
)
|
17
17
|
|
18
18
|
from graphql import (
|
19
|
+
GraphQLBoolean,
|
20
|
+
GraphQLField,
|
19
21
|
GraphQLNamedType,
|
20
22
|
GraphQLNonNull,
|
21
23
|
GraphQLSchema,
|
@@ -168,6 +170,7 @@ class Schema(BaseSchema):
|
|
168
170
|
|
169
171
|
self._warn_for_federation_directives()
|
170
172
|
self._resolve_node_ids()
|
173
|
+
self._extend_introspection()
|
171
174
|
|
172
175
|
# Validate schema early because we want developers to know about
|
173
176
|
# possible issues as soon as possible
|
@@ -375,6 +378,14 @@ class Schema(BaseSchema):
|
|
375
378
|
stacklevel=3,
|
376
379
|
)
|
377
380
|
|
381
|
+
def _extend_introspection(self):
|
382
|
+
def _resolve_is_one_of(obj: Any, info: Any) -> bool:
|
383
|
+
return obj.extensions["strawberry-definition"].is_one_of
|
384
|
+
|
385
|
+
instrospection_type = self._schema.type_map["__Type"]
|
386
|
+
instrospection_type.fields["isOneOf"] = GraphQLField(GraphQLBoolean) # type: ignore[attr-defined]
|
387
|
+
instrospection_type.fields["isOneOf"].resolve = _resolve_is_one_of # type: ignore[attr-defined]
|
388
|
+
|
378
389
|
def as_str(self) -> str:
|
379
390
|
return print_schema(self)
|
380
391
|
|
@@ -26,6 +26,7 @@ from graphql import (
|
|
26
26
|
GraphQLDirective,
|
27
27
|
GraphQLEnumType,
|
28
28
|
GraphQLEnumValue,
|
29
|
+
GraphQLError,
|
29
30
|
GraphQLField,
|
30
31
|
GraphQLInputField,
|
31
32
|
GraphQLInputObjectType,
|
@@ -411,6 +412,27 @@ class GraphQLCoreConverter:
|
|
411
412
|
assert isinstance(graphql_object_type, GraphQLInputObjectType) # For mypy
|
412
413
|
return graphql_object_type
|
413
414
|
|
415
|
+
def check_one_of(value: dict[str, Any]) -> dict[str, Any]:
|
416
|
+
if len(value) != 1:
|
417
|
+
raise GraphQLError(
|
418
|
+
f"OneOf Input Object '{type_name}' must specify exactly one key."
|
419
|
+
)
|
420
|
+
|
421
|
+
first_key, first_value = next(iter(value.items()))
|
422
|
+
|
423
|
+
if first_value is None or first_value is UNSET:
|
424
|
+
raise GraphQLError(
|
425
|
+
f"Value for member field '{first_key}' must be non-null"
|
426
|
+
)
|
427
|
+
|
428
|
+
return value
|
429
|
+
|
430
|
+
out_type = (
|
431
|
+
check_one_of
|
432
|
+
if type_definition.is_input and type_definition.is_one_of
|
433
|
+
else None
|
434
|
+
)
|
435
|
+
|
414
436
|
graphql_object_type = GraphQLInputObjectType(
|
415
437
|
name=type_name,
|
416
438
|
fields=lambda: self.get_graphql_input_fields(type_definition),
|
@@ -418,6 +440,7 @@ class GraphQLCoreConverter:
|
|
418
440
|
extensions={
|
419
441
|
GraphQLCoreConverter.DEFINITION_BACKREF: type_definition,
|
420
442
|
},
|
443
|
+
out_type=out_type,
|
421
444
|
)
|
422
445
|
|
423
446
|
self.type_map[type_name] = ConcreteType(
|
@@ -0,0 +1,80 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from graphql import (
|
4
|
+
ExecutableDefinitionNode,
|
5
|
+
GraphQLError,
|
6
|
+
GraphQLNamedType,
|
7
|
+
ObjectValueNode,
|
8
|
+
ValidationContext,
|
9
|
+
ValidationRule,
|
10
|
+
VariableDefinitionNode,
|
11
|
+
get_named_type,
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
class OneOfInputValidationRule(ValidationRule):
|
16
|
+
def __init__(self, validation_context: ValidationContext) -> None:
|
17
|
+
super().__init__(validation_context)
|
18
|
+
|
19
|
+
def enter_operation_definition(
|
20
|
+
self, node: ExecutableDefinitionNode, *_args: Any
|
21
|
+
) -> None:
|
22
|
+
self.variable_definitions: dict[str, VariableDefinitionNode] = {}
|
23
|
+
|
24
|
+
def enter_variable_definition(
|
25
|
+
self, node: VariableDefinitionNode, *_args: Any
|
26
|
+
) -> None:
|
27
|
+
self.variable_definitions[node.variable.name.value] = node
|
28
|
+
|
29
|
+
def enter_object_value(self, node: ObjectValueNode, *_args: Any) -> None:
|
30
|
+
type_ = get_named_type(self.context.get_input_type())
|
31
|
+
|
32
|
+
if not type_:
|
33
|
+
return
|
34
|
+
|
35
|
+
strawberry_type = type_.extensions.get("strawberry-definition")
|
36
|
+
|
37
|
+
if strawberry_type and strawberry_type.is_one_of:
|
38
|
+
self.validate_one_of(node, type_)
|
39
|
+
|
40
|
+
def validate_one_of(self, node: ObjectValueNode, type: GraphQLNamedType) -> None:
|
41
|
+
field_node_map = {field.name.value: field for field in node.fields}
|
42
|
+
keys = list(field_node_map.keys())
|
43
|
+
is_not_exactly_one_field = len(keys) != 1
|
44
|
+
|
45
|
+
if is_not_exactly_one_field:
|
46
|
+
self.report_error(
|
47
|
+
GraphQLError(
|
48
|
+
f"OneOf Input Object '{type.name}' must specify exactly one key.",
|
49
|
+
nodes=[node],
|
50
|
+
)
|
51
|
+
)
|
52
|
+
|
53
|
+
return
|
54
|
+
|
55
|
+
value = field_node_map[keys[0]].value
|
56
|
+
is_null_literal = not value or value.kind == "null_value"
|
57
|
+
is_variable = value.kind == "variable"
|
58
|
+
|
59
|
+
if is_null_literal:
|
60
|
+
self.report_error(
|
61
|
+
GraphQLError(
|
62
|
+
f"Field '{type.name}.{keys[0]}' must be non-null.",
|
63
|
+
nodes=[node],
|
64
|
+
)
|
65
|
+
)
|
66
|
+
|
67
|
+
return
|
68
|
+
|
69
|
+
if is_variable:
|
70
|
+
variable_name = value.name.value # type: ignore
|
71
|
+
definition = self.variable_definitions[variable_name]
|
72
|
+
is_nullable_variable = definition.type.kind != "non_null_type"
|
73
|
+
|
74
|
+
if is_nullable_variable:
|
75
|
+
self.report_error(
|
76
|
+
GraphQLError(
|
77
|
+
f"Variable '{variable_name}' must be non-nullable to be used for OneOf Input Object '{type.name}'.",
|
78
|
+
nodes=[node],
|
79
|
+
)
|
80
|
+
)
|
@@ -225,6 +225,15 @@ class StrawberryObjectDefinition(StrawberryType):
|
|
225
225
|
# All field mappings succeeded. This is a match
|
226
226
|
return True
|
227
227
|
|
228
|
+
@property
|
229
|
+
def is_one_of(self) -> bool:
|
230
|
+
from strawberry.schema_directives import OneOf
|
231
|
+
|
232
|
+
if not self.is_input or not self.directives:
|
233
|
+
return False
|
234
|
+
|
235
|
+
return any(isinstance(directive, OneOf) for directive in self.directives)
|
236
|
+
|
228
237
|
|
229
238
|
# TODO: remove when deprecating _type_definition
|
230
239
|
if TYPE_CHECKING:
|
File without changes
|