strawberry-graphql 0.229.2.dev1715873118__tar.gz → 0.229.2.dev1715881453__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/PKG-INFO +1 -1
  2. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/pyproject.toml +1 -1
  3. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/permission.py +54 -30
  4. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/LICENSE +0 -0
  5. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/README.md +0 -0
  6. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/__init__.py +0 -0
  7. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/__main__.py +0 -0
  8. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/__init__.py +0 -0
  9. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/handlers/__init__.py +0 -0
  10. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/handlers/graphql_transport_ws_handler.py +0 -0
  11. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/handlers/graphql_ws_handler.py +0 -0
  12. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/test/__init__.py +0 -0
  13. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/test/client.py +0 -0
  14. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/aiohttp/views.py +0 -0
  15. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/annotation.py +0 -0
  16. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/arguments.py +0 -0
  17. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/__init__.py +0 -0
  18. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/handlers/__init__.py +0 -0
  19. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/handlers/graphql_transport_ws_handler.py +0 -0
  20. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/handlers/graphql_ws_handler.py +0 -0
  21. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/test/__init__.py +0 -0
  22. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/asgi/test/client.py +0 -0
  23. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/auto.py +0 -0
  24. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/chalice/__init__.py +0 -0
  25. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/chalice/views.py +0 -0
  26. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/__init__.py +0 -0
  27. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/handlers/base.py +0 -0
  28. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/handlers/graphql_transport_ws_handler.py +0 -0
  29. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/handlers/graphql_ws_handler.py +0 -0
  30. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/handlers/http_handler.py +0 -0
  31. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/handlers/ws_handler.py +0 -0
  32. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/router.py +0 -0
  33. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/channels/testing.py +0 -0
  34. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/__init__.py +0 -0
  35. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/app.py +0 -0
  36. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/__init__.py +0 -0
  37. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/codegen.py +0 -0
  38. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/export_schema.py +0 -0
  39. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/schema_codegen.py +0 -0
  40. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/server.py +0 -0
  41. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/upgrade/__init__.py +0 -0
  42. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/upgrade/_fake_progress.py +0 -0
  43. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/commands/upgrade/_run_codemod.py +0 -0
  44. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/constants.py +0 -0
  45. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/debug_server.py +0 -0
  46. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/utils/__init__.py +0 -0
  47. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/cli/utils/load_schema.py +0 -0
  48. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/__init__.py +0 -0
  49. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/exceptions.py +0 -0
  50. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/plugins/__init__.py +0 -0
  51. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/plugins/print_operation.py +0 -0
  52. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/plugins/python.py +0 -0
  53. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/plugins/typescript.py +0 -0
  54. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/query_codegen.py +0 -0
  55. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codegen/types.py +0 -0
  56. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codemods/__init__.py +0 -0
  57. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/codemods/annotated_unions.py +0 -0
  58. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/custom_scalar.py +0 -0
  59. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/dataloader.py +0 -0
  60. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/directive.py +0 -0
  61. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/__init__.py +0 -0
  62. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/apps.py +0 -0
  63. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/context.py +0 -0
  64. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/test/__init__.py +0 -0
  65. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/test/client.py +0 -0
  66. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/django/views.py +0 -0
  67. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/enum.py +0 -0
  68. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/__init__.py +0 -0
  69. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/conflicting_arguments.py +0 -0
  70. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/duplicated_type_name.py +0 -0
  71. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/exception.py +0 -0
  72. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/exception_source.py +0 -0
  73. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/handler.py +0 -0
  74. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/invalid_argument_type.py +0 -0
  75. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/invalid_union_type.py +0 -0
  76. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/missing_arguments_annotations.py +0 -0
  77. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/missing_field_annotation.py +0 -0
  78. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/missing_return_annotation.py +0 -0
  79. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/not_a_strawberry_enum.py +0 -0
  80. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/object_is_not_a_class.py +0 -0
  81. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/object_is_not_an_enum.py +0 -0
  82. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/permission_fail_silently_requires_optional.py +0 -0
  83. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/private_strawberry_field.py +0 -0
  84. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/scalar_already_registered.py +0 -0
  85. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/syntax.py +0 -0
  86. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/unresolved_field_type.py +0 -0
  87. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/utils/__init__.py +0 -0
  88. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/exceptions/utils/source_finder.py +0 -0
  89. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/__init__.py +0 -0
  90. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/__init__.py +0 -0
  91. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/_compat.py +0 -0
  92. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/conversion.py +0 -0
  93. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/conversion_types.py +0 -0
  94. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/error_type.py +0 -0
  95. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/exceptions.py +0 -0
  96. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/fields.py +0 -0
  97. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/object_type.py +0 -0
  98. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/experimental/pydantic/utils.py +0 -0
  99. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/LICENSE +0 -0
  100. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/__init__.py +0 -0
  101. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/dataclasses/LICENSE +0 -0
  102. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/dataclasses/__init__.py +0 -0
  103. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/dataclasses/dataclasses.py +0 -0
  104. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/ext/mypy_plugin.py +0 -0
  105. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/__init__.py +0 -0
  106. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/add_validation_rules.py +0 -0
  107. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/base_extension.py +0 -0
  108. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/context.py +0 -0
  109. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/directives.py +0 -0
  110. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/disable_validation.py +0 -0
  111. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/field_extension.py +0 -0
  112. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/mask_errors.py +0 -0
  113. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/max_aliases.py +0 -0
  114. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/max_tokens.py +0 -0
  115. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/parser_cache.py +0 -0
  116. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/pyinstrument.py +0 -0
  117. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/query_depth_limiter.py +0 -0
  118. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/runner.py +0 -0
  119. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/__init__.py +0 -0
  120. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/apollo.py +0 -0
  121. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/datadog.py +0 -0
  122. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/opentelemetry.py +0 -0
  123. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/sentry.py +0 -0
  124. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/tracing/utils.py +0 -0
  125. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/utils.py +0 -0
  126. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/extensions/validation_cache.py +0 -0
  127. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/__init__.py +0 -0
  128. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/context.py +0 -0
  129. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/handlers/__init__.py +0 -0
  130. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/handlers/graphql_transport_ws_handler.py +0 -0
  131. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/handlers/graphql_ws_handler.py +0 -0
  132. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/fastapi/router.py +0 -0
  133. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/__init__.py +0 -0
  134. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/argument.py +0 -0
  135. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/enum.py +0 -0
  136. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/field.py +0 -0
  137. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/mutation.py +0 -0
  138. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/object_type.py +0 -0
  139. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/scalar.py +0 -0
  140. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/schema.py +0 -0
  141. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/schema_directive.py +0 -0
  142. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/schema_directives.py +0 -0
  143. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/types.py +0 -0
  144. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/federation/union.py +0 -0
  145. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/field.py +0 -0
  146. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/field_extensions/__init__.py +0 -0
  147. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/field_extensions/input_mutation.py +0 -0
  148. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/file_uploads/__init__.py +0 -0
  149. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/file_uploads/scalars.py +0 -0
  150. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/file_uploads/utils.py +0 -0
  151. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/flask/__init__.py +0 -0
  152. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/flask/views.py +0 -0
  153. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/__init__.py +0 -0
  154. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/async_base_view.py +0 -0
  155. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/base.py +0 -0
  156. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/exceptions.py +0 -0
  157. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/ides.py +0 -0
  158. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/sync_base_view.py +0 -0
  159. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/temporal_response.py +0 -0
  160. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/types.py +0 -0
  161. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/http/typevars.py +0 -0
  162. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/lazy_type.py +0 -0
  163. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/litestar/__init__.py +0 -0
  164. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/litestar/controller.py +0 -0
  165. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/litestar/handlers/graphql_transport_ws_handler.py +0 -0
  166. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/litestar/handlers/graphql_ws_handler.py +0 -0
  167. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/mutation.py +0 -0
  168. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/object_type.py +0 -0
  169. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/parent.py +0 -0
  170. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/printer/__init__.py +0 -0
  171. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/printer/ast_from_value.py +0 -0
  172. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/printer/printer.py +0 -0
  173. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/private.py +0 -0
  174. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/py.typed +0 -0
  175. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/quart/__init__.py +0 -0
  176. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/quart/views.py +0 -0
  177. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/relay/__init__.py +0 -0
  178. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/relay/exceptions.py +0 -0
  179. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/relay/fields.py +0 -0
  180. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/relay/types.py +0 -0
  181. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/relay/utils.py +0 -0
  182. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/resolvers.py +0 -0
  183. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/sanic/__init__.py +0 -0
  184. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/sanic/context.py +0 -0
  185. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/sanic/utils.py +0 -0
  186. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/sanic/views.py +0 -0
  187. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/scalars.py +0 -0
  188. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/__init__.py +0 -0
  189. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/base.py +0 -0
  190. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/compat.py +0 -0
  191. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/config.py +0 -0
  192. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/exceptions.py +0 -0
  193. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/execute.py +0 -0
  194. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/name_converter.py +0 -0
  195. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/schema.py +0 -0
  196. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/schema_converter.py +0 -0
  197. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/types/__init__.py +0 -0
  198. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/types/base_scalars.py +0 -0
  199. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/types/concrete_type.py +0 -0
  200. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema/types/scalar.py +0 -0
  201. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema_codegen/__init__.py +0 -0
  202. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/schema_directive.py +0 -0
  203. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/starlite/__init__.py +0 -0
  204. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/starlite/controller.py +0 -0
  205. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/starlite/handlers/graphql_transport_ws_handler.py +0 -0
  206. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/starlite/handlers/graphql_ws_handler.py +0 -0
  207. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/static/apollo-sandbox.html +0 -0
  208. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/static/graphiql.html +0 -0
  209. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/static/pathfinder.html +0 -0
  210. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/__init__.py +0 -0
  211. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/__init__.py +0 -0
  212. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py +0 -0
  213. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py +0 -0
  214. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_transport_ws/types.py +0 -0
  215. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_ws/__init__.py +0 -0
  216. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_ws/handlers.py +0 -0
  217. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/subscriptions/protocols/graphql_ws/types.py +0 -0
  218. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/test/__init__.py +0 -0
  219. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/test/client.py +0 -0
  220. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/tools/__init__.py +0 -0
  221. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/tools/create_type.py +0 -0
  222. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/tools/merge_types.py +0 -0
  223. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/type.py +0 -0
  224. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/__init__.py +0 -0
  225. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/execution.py +0 -0
  226. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/fields/__init__.py +0 -0
  227. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/fields/resolver.py +0 -0
  228. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/graphql.py +0 -0
  229. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/info.py +0 -0
  230. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/nodes.py +0 -0
  231. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/type_resolver.py +0 -0
  232. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/types/types.py +0 -0
  233. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/union.py +0 -0
  234. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/unset.py +0 -0
  235. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/__init__.py +0 -0
  236. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/aio.py +0 -0
  237. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/await_maybe.py +0 -0
  238. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/dataclasses.py +0 -0
  239. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/debug.py +0 -0
  240. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/deprecations.py +0 -0
  241. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/graphql_lexer.py +0 -0
  242. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/importer.py +0 -0
  243. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/inspect.py +0 -0
  244. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/logging.py +0 -0
  245. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/operation.py +0 -0
  246. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/str_converters.py +0 -0
  247. {strawberry_graphql-0.229.2.dev1715873118 → strawberry_graphql-0.229.2.dev1715881453}/strawberry/utils/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.229.2.dev1715873118
3
+ Version: 0.229.2.dev1715881453
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "strawberry-graphql"
3
3
  packages = [ { include = "strawberry" } ]
4
- version = "0.229.2.dev.1715873118"
4
+ version = "0.229.2.dev.1715881453"
5
5
  description = "A library for creating GraphQL APIs"
6
6
  authors = ["Patrick Arminio <patrick.arminio@gmail.com>"]
7
7
  license = "MIT"
@@ -13,6 +13,7 @@ from typing import (
13
13
  Optional,
14
14
  Tuple,
15
15
  Type,
16
+ TypedDict,
16
17
  Union,
17
18
  )
18
19
  from typing_extensions import deprecated
@@ -37,6 +38,15 @@ if TYPE_CHECKING:
37
38
  from strawberry.types import Info
38
39
 
39
40
 
41
+ def unpack_maybe(
42
+ value: Union[object, Tuple[bool, object]], default: object = None
43
+ ) -> Tuple[object, object]:
44
+ if isinstance(value, tuple) and len(value) == 2:
45
+ return value
46
+ else:
47
+ return value, default
48
+
49
+
40
50
  class BasePermission(abc.ABC):
41
51
  """
42
52
  Base class for creating permissions
@@ -52,7 +62,7 @@ class BasePermission(abc.ABC):
52
62
 
53
63
  @abc.abstractmethod
54
64
  def has_permission(
55
- self, source: Any, info: Info, **kwargs: Any
65
+ self, source: Any, info: Info, **kwargs: object
56
66
  ) -> Union[
57
67
  bool,
58
68
  Awaitable[bool],
@@ -82,7 +92,7 @@ class BasePermission(abc.ABC):
82
92
  "Permission classes should override has_permission method"
83
93
  )
84
94
 
85
- def on_unauthorized(self, **kwargs: Any) -> None:
95
+ def on_unauthorized(self, **kwargs: object) -> None:
86
96
  """
87
97
  Default error raising for permissions.
88
98
  This can be overridden to customize the behavior.
@@ -128,14 +138,18 @@ class BasePermission(abc.ABC):
128
138
  return OrPermission([self, other])
129
139
 
130
140
 
141
+ class CompositePermissionContext(TypedDict):
142
+ failed_permissions: List[Tuple[BasePermission, dict]]
143
+
144
+
131
145
  class CompositePermission(BasePermission, abc.ABC):
132
146
  def __init__(self, child_permissions: List[BasePermission]):
133
147
  self.child_permissions = child_permissions
134
148
 
135
- def on_unauthorized(self, **kwargs: Any) -> Any:
149
+ def on_unauthorized(self, **kwargs: object) -> Any:
136
150
  failed_permissions = kwargs.get("failed_permissions", [])
137
- for permission in failed_permissions:
138
- permission.on_unauthorized()
151
+ for permission, context in failed_permissions:
152
+ permission.on_unauthorized(**context)
139
153
 
140
154
  @cached_property
141
155
  def is_async(self) -> bool:
@@ -144,27 +158,34 @@ class CompositePermission(BasePermission, abc.ABC):
144
158
 
145
159
  class AndPermission(CompositePermission):
146
160
  def has_permission(
147
- self, source: Any, info: Info, **kwargs: Any
161
+ self, source: Any, info: Info, **kwargs: object
148
162
  ) -> Union[
149
163
  bool,
150
164
  Awaitable[bool],
151
- Tuple[Literal[False], dict],
152
- Awaitable[Tuple[Literal[False], dict]],
165
+ Tuple[Literal[False], CompositePermissionContext],
166
+ Awaitable[Tuple[Literal[False], CompositePermissionContext]],
153
167
  ]:
154
168
  if self.is_async:
155
169
  return self._has_permission_async(source, info, **kwargs)
156
170
 
157
171
  for permission in self.child_permissions:
158
- if not permission.has_permission(source, info, **kwargs):
159
- return False, {"failed_permissions": [permission]}
172
+ has_permission, context = unpack_maybe(
173
+ permission.has_permission(source, info, **kwargs), {}
174
+ )
175
+ if not has_permission:
176
+ return False, {"failed_permissions": [(permission, context)]}
160
177
  return True
161
178
 
162
179
  async def _has_permission_async(
163
- self, source: Any, info: Info, **kwargs: Any
164
- ) -> Union[bool, Tuple[Literal[False], dict]]:
180
+ self, source: Any, info: Info, **kwargs: object
181
+ ) -> Union[bool, Tuple[Literal[False], CompositePermissionContext]]:
165
182
  for permission in self.child_permissions:
166
- if not await await_maybe(permission.has_permission(source, info, **kwargs)):
167
- return False, {"failed_permissions": [permission]}
183
+ permission_response = await await_maybe(
184
+ permission.has_permission(source, info, **kwargs)
185
+ )
186
+ has_permission, context = unpack_maybe(permission_response, {})
187
+ if not has_permission:
188
+ return False, {"failed_permissions": [(permission, context)]}
168
189
  return True
169
190
 
170
191
  def __and__(self, other: BasePermission):
@@ -173,7 +194,7 @@ class AndPermission(CompositePermission):
173
194
 
174
195
  class OrPermission(CompositePermission):
175
196
  def has_permission(
176
- self, source: Any, info: Info, **kwargs: Any
197
+ self, source: Any, info: Info, **kwargs: object
177
198
  ) -> Union[
178
199
  bool,
179
200
  Awaitable[bool],
@@ -184,20 +205,27 @@ class OrPermission(CompositePermission):
184
205
  return self._has_permission_async(source, info, **kwargs)
185
206
  failed_permissions = []
186
207
  for permission in self.child_permissions:
187
- if permission.has_permission(source, info, **kwargs):
208
+ has_permission, context = unpack_maybe(
209
+ permission.has_permission(source, info, **kwargs), {}
210
+ )
211
+ if has_permission:
188
212
  return True
189
- failed_permissions.append(permission)
213
+ failed_permissions.append((permission, context))
190
214
 
191
215
  return False, {"failed_permissions": failed_permissions}
192
216
 
193
217
  async def _has_permission_async(
194
- self, source: Any, info: Info, **kwargs: Any
218
+ self, source: Any, info: Info, **kwargs: object
195
219
  ) -> Union[bool, Tuple[Literal[False], dict]]:
196
220
  failed_permissions = []
197
221
  for permission in self.child_permissions:
198
- if await await_maybe(permission.has_permission(source, info, **kwargs)):
222
+ permission_response = await await_maybe(
223
+ permission.has_permission(source, info, **kwargs)
224
+ )
225
+ has_permission, context = unpack_maybe(permission_response, {})
226
+ if has_permission:
199
227
  return True
200
- failed_permissions.append(permission)
228
+ failed_permissions.append((permission, context))
201
229
 
202
230
  return False, {"failed_permissions": failed_permissions}
203
231
 
@@ -253,7 +281,7 @@ class PermissionExtension(FieldExtension):
253
281
  else:
254
282
  raise PermissionFailSilentlyRequiresOptionalError(field)
255
283
 
256
- def _on_unauthorized(self, permission: BasePermission, **kwargs: Any) -> Any:
284
+ def _on_unauthorized(self, permission: BasePermission, **kwargs: object) -> Any:
257
285
  if self.fail_silently:
258
286
  return [] if self.return_empty_list else None
259
287
 
@@ -266,7 +294,7 @@ class PermissionExtension(FieldExtension):
266
294
  next_: SyncExtensionResolver,
267
295
  source: Any,
268
296
  info: Info,
269
- **kwargs: Any[str, Any],
297
+ **kwargs: object[str, Any],
270
298
  ) -> Any:
271
299
  """
272
300
  Checks if the permission should be accepted and
@@ -274,13 +302,9 @@ class PermissionExtension(FieldExtension):
274
302
  """
275
303
 
276
304
  for permission in self.permissions:
277
- permission_response = permission.has_permission(source, info, **kwargs)
278
-
279
- context = {}
280
- if isinstance(permission_response, tuple):
281
- has_permission, context = permission_response
282
- else:
283
- has_permission = permission_response
305
+ has_permission, context = unpack_maybe(
306
+ permission.has_permission(source, info, **kwargs), {}
307
+ )
284
308
 
285
309
  if not has_permission:
286
310
  return self._on_unauthorized(permission, **context)
@@ -292,7 +316,7 @@ class PermissionExtension(FieldExtension):
292
316
  next_: AsyncExtensionResolver,
293
317
  source: Any,
294
318
  info: Info,
295
- **kwargs: Any[str, Any],
319
+ **kwargs: object[str, Any],
296
320
  ) -> Any:
297
321
  for permission in self.permissions:
298
322
  permission_response = await await_maybe(