strawberry-graphql 0.225.1__tar.gz → 0.226.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.
Files changed (248) hide show
  1. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/PKG-INFO +1 -1
  2. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/pyproject.toml +7 -7
  3. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/mypy_plugin.py +24 -1
  4. strawberry_graphql-0.226.2/strawberry/schema/execute.py +274 -0
  5. strawberry_graphql-0.225.1/strawberry/schema/execute.py +0 -263
  6. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/LICENSE +0 -0
  7. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/README.md +0 -0
  8. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/__init__.py +0 -0
  9. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/__main__.py +0 -0
  10. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/__init__.py +0 -0
  11. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/handlers/__init__.py +0 -0
  12. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/handlers/graphql_transport_ws_handler.py +0 -0
  13. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/handlers/graphql_ws_handler.py +0 -0
  14. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/test/__init__.py +0 -0
  15. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/test/client.py +0 -0
  16. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/aiohttp/views.py +0 -0
  17. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/annotation.py +0 -0
  18. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/arguments.py +0 -0
  19. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/__init__.py +0 -0
  20. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/handlers/__init__.py +0 -0
  21. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/handlers/graphql_transport_ws_handler.py +0 -0
  22. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/handlers/graphql_ws_handler.py +0 -0
  23. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/test/__init__.py +0 -0
  24. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/asgi/test/client.py +0 -0
  25. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/auto.py +0 -0
  26. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/chalice/__init__.py +0 -0
  27. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/chalice/views.py +0 -0
  28. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/__init__.py +0 -0
  29. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/handlers/base.py +0 -0
  30. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/handlers/graphql_transport_ws_handler.py +0 -0
  31. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/handlers/graphql_ws_handler.py +0 -0
  32. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/handlers/http_handler.py +0 -0
  33. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/handlers/ws_handler.py +0 -0
  34. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/router.py +0 -0
  35. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/channels/testing.py +0 -0
  36. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/__init__.py +0 -0
  37. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/app.py +0 -0
  38. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/__init__.py +0 -0
  39. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/codegen.py +0 -0
  40. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/export_schema.py +0 -0
  41. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/schema_codegen.py +0 -0
  42. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/server.py +0 -0
  43. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/upgrade/__init__.py +0 -0
  44. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/upgrade/_fake_progress.py +0 -0
  45. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/commands/upgrade/_run_codemod.py +0 -0
  46. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/constants.py +0 -0
  47. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/debug_server.py +0 -0
  48. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/utils/__init__.py +0 -0
  49. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/cli/utils/load_schema.py +0 -0
  50. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/__init__.py +0 -0
  51. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/exceptions.py +0 -0
  52. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/plugins/__init__.py +0 -0
  53. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/plugins/print_operation.py +0 -0
  54. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/plugins/python.py +0 -0
  55. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/plugins/typescript.py +0 -0
  56. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/query_codegen.py +0 -0
  57. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codegen/types.py +0 -0
  58. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codemods/__init__.py +0 -0
  59. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/codemods/annotated_unions.py +0 -0
  60. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/custom_scalar.py +0 -0
  61. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/dataloader.py +0 -0
  62. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/directive.py +0 -0
  63. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/__init__.py +0 -0
  64. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/apps.py +0 -0
  65. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/context.py +0 -0
  66. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/test/__init__.py +0 -0
  67. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/test/client.py +0 -0
  68. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/django/views.py +0 -0
  69. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/enum.py +0 -0
  70. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/__init__.py +0 -0
  71. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/conflicting_arguments.py +0 -0
  72. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/duplicated_type_name.py +0 -0
  73. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/exception.py +0 -0
  74. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/exception_source.py +0 -0
  75. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/handler.py +0 -0
  76. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/invalid_argument_type.py +0 -0
  77. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/invalid_union_type.py +0 -0
  78. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/missing_arguments_annotations.py +0 -0
  79. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/missing_field_annotation.py +0 -0
  80. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/missing_return_annotation.py +0 -0
  81. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/not_a_strawberry_enum.py +0 -0
  82. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/object_is_not_a_class.py +0 -0
  83. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/object_is_not_an_enum.py +0 -0
  84. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/permission_fail_silently_requires_optional.py +0 -0
  85. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/private_strawberry_field.py +0 -0
  86. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/scalar_already_registered.py +0 -0
  87. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/syntax.py +0 -0
  88. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/unresolved_field_type.py +0 -0
  89. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/utils/__init__.py +0 -0
  90. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/exceptions/utils/source_finder.py +0 -0
  91. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/__init__.py +0 -0
  92. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/__init__.py +0 -0
  93. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/_compat.py +0 -0
  94. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/conversion.py +0 -0
  95. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/conversion_types.py +0 -0
  96. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/error_type.py +0 -0
  97. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/exceptions.py +0 -0
  98. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/fields.py +0 -0
  99. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/object_type.py +0 -0
  100. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/experimental/pydantic/utils.py +0 -0
  101. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/LICENSE +0 -0
  102. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/__init__.py +0 -0
  103. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/dataclasses/LICENSE +0 -0
  104. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/dataclasses/__init__.py +0 -0
  105. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/ext/dataclasses/dataclasses.py +0 -0
  106. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/__init__.py +0 -0
  107. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/add_validation_rules.py +0 -0
  108. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/base_extension.py +0 -0
  109. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/context.py +0 -0
  110. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/directives.py +0 -0
  111. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/disable_validation.py +0 -0
  112. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/field_extension.py +0 -0
  113. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/mask_errors.py +0 -0
  114. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/max_aliases.py +0 -0
  115. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/max_tokens.py +0 -0
  116. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/parser_cache.py +0 -0
  117. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/pyinstrument.py +0 -0
  118. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/query_depth_limiter.py +0 -0
  119. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/runner.py +0 -0
  120. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/__init__.py +0 -0
  121. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/apollo.py +0 -0
  122. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/datadog.py +0 -0
  123. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/opentelemetry.py +0 -0
  124. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/sentry.py +0 -0
  125. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/tracing/utils.py +0 -0
  126. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/utils.py +0 -0
  127. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/extensions/validation_cache.py +0 -0
  128. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/__init__.py +0 -0
  129. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/context.py +0 -0
  130. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/handlers/__init__.py +0 -0
  131. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/handlers/graphql_transport_ws_handler.py +0 -0
  132. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/handlers/graphql_ws_handler.py +0 -0
  133. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/fastapi/router.py +0 -0
  134. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/__init__.py +0 -0
  135. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/argument.py +0 -0
  136. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/enum.py +0 -0
  137. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/field.py +0 -0
  138. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/mutation.py +0 -0
  139. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/object_type.py +0 -0
  140. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/scalar.py +0 -0
  141. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/schema.py +0 -0
  142. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/schema_directive.py +0 -0
  143. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/schema_directives.py +0 -0
  144. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/types.py +0 -0
  145. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/federation/union.py +0 -0
  146. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/field.py +0 -0
  147. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/field_extensions/__init__.py +0 -0
  148. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/field_extensions/input_mutation.py +0 -0
  149. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/file_uploads/__init__.py +0 -0
  150. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/file_uploads/scalars.py +0 -0
  151. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/file_uploads/utils.py +0 -0
  152. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/flask/__init__.py +0 -0
  153. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/flask/views.py +0 -0
  154. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/__init__.py +0 -0
  155. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/async_base_view.py +0 -0
  156. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/base.py +0 -0
  157. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/exceptions.py +0 -0
  158. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/ides.py +0 -0
  159. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/sync_base_view.py +0 -0
  160. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/temporal_response.py +0 -0
  161. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/types.py +0 -0
  162. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/http/typevars.py +0 -0
  163. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/lazy_type.py +0 -0
  164. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/litestar/__init__.py +0 -0
  165. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/litestar/controller.py +0 -0
  166. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/litestar/handlers/graphql_transport_ws_handler.py +0 -0
  167. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/litestar/handlers/graphql_ws_handler.py +0 -0
  168. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/mutation.py +0 -0
  169. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/object_type.py +0 -0
  170. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/parent.py +0 -0
  171. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/permission.py +0 -0
  172. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/printer/__init__.py +0 -0
  173. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/printer/ast_from_value.py +0 -0
  174. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/printer/printer.py +0 -0
  175. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/private.py +0 -0
  176. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/py.typed +0 -0
  177. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/quart/__init__.py +0 -0
  178. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/quart/views.py +0 -0
  179. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/relay/__init__.py +0 -0
  180. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/relay/exceptions.py +0 -0
  181. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/relay/fields.py +0 -0
  182. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/relay/types.py +0 -0
  183. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/relay/utils.py +0 -0
  184. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/resolvers.py +0 -0
  185. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/sanic/__init__.py +0 -0
  186. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/sanic/context.py +0 -0
  187. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/sanic/utils.py +0 -0
  188. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/sanic/views.py +0 -0
  189. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/scalars.py +0 -0
  190. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/__init__.py +0 -0
  191. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/base.py +0 -0
  192. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/compat.py +0 -0
  193. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/config.py +0 -0
  194. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/exceptions.py +0 -0
  195. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/name_converter.py +0 -0
  196. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/schema.py +0 -0
  197. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/schema_converter.py +0 -0
  198. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/types/__init__.py +0 -0
  199. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/types/base_scalars.py +0 -0
  200. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/types/concrete_type.py +0 -0
  201. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema/types/scalar.py +0 -0
  202. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema_codegen/__init__.py +0 -0
  203. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/schema_directive.py +0 -0
  204. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/starlite/__init__.py +0 -0
  205. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/starlite/controller.py +0 -0
  206. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/starlite/handlers/graphql_transport_ws_handler.py +0 -0
  207. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/starlite/handlers/graphql_ws_handler.py +0 -0
  208. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/static/apollo-sandbox.html +0 -0
  209. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/static/graphiql.html +0 -0
  210. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/static/pathfinder.html +0 -0
  211. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/__init__.py +0 -0
  212. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/__init__.py +0 -0
  213. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py +0 -0
  214. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py +0 -0
  215. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_transport_ws/types.py +0 -0
  216. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_ws/__init__.py +0 -0
  217. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_ws/handlers.py +0 -0
  218. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/subscriptions/protocols/graphql_ws/types.py +0 -0
  219. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/test/__init__.py +0 -0
  220. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/test/client.py +0 -0
  221. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/tools/__init__.py +0 -0
  222. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/tools/create_type.py +0 -0
  223. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/tools/merge_types.py +0 -0
  224. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/type.py +0 -0
  225. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/__init__.py +0 -0
  226. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/execution.py +0 -0
  227. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/fields/__init__.py +0 -0
  228. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/fields/resolver.py +0 -0
  229. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/graphql.py +0 -0
  230. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/info.py +0 -0
  231. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/nodes.py +0 -0
  232. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/type_resolver.py +0 -0
  233. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/types/types.py +0 -0
  234. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/union.py +0 -0
  235. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/unset.py +0 -0
  236. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/__init__.py +0 -0
  237. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/aio.py +0 -0
  238. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/await_maybe.py +0 -0
  239. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/dataclasses.py +0 -0
  240. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/debug.py +0 -0
  241. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/deprecations.py +0 -0
  242. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/graphql_lexer.py +0 -0
  243. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/importer.py +0 -0
  244. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/inspect.py +0 -0
  245. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/logging.py +0 -0
  246. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/operation.py +0 -0
  247. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/str_converters.py +0 -0
  248. {strawberry_graphql-0.225.1 → strawberry_graphql-0.226.2}/strawberry/utils/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.225.1
3
+ Version: 0.226.2
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.225.1"
4
+ version = "0.226.2"
5
5
  description = "A library for creating GraphQL APIs"
6
6
  authors = ["Patrick Arminio <patrick.arminio@gmail.com>"]
7
7
  license = "MIT"
@@ -64,10 +64,10 @@ pyinstrument = {version = ">=4.0.0", optional = true}
64
64
 
65
65
  [tool.poetry.group.dev.dependencies]
66
66
  asgiref = "^3.2"
67
- ddtrace = ">=1.6.4,<3.0.0"
67
+ ddtrace = ">=1.6.4"
68
68
  email-validator = {version = ">=1.1.3,<3.0.0", optional = false}
69
69
  freezegun = "^1.2.1"
70
- libcst = {version = ">=0.4.7,<1.2.0", optional = false}
70
+ libcst = {version = ">=0.4.7", optional = false}
71
71
  MarkupSafe = "2.1.3"
72
72
  nox = "^2023.4.22"
73
73
  nox-poetry = "^1.0.3"
@@ -76,7 +76,7 @@ opentelemetry-sdk = "<2"
76
76
  pygments = "^2.3"
77
77
  pyinstrument = {version = ">=4.0.0", optional = false}
78
78
  pytest = "^7.2"
79
- pytest-asyncio = ">=0.20.3,<0.24.0"
79
+ pytest-asyncio = ">=0.20.3"
80
80
  pytest-codspeed = "^2.0.1"
81
81
  pytest-cov = "^4.0.0"
82
82
  pytest-emoji = "^0.2.0"
@@ -84,11 +84,11 @@ pytest-mock = "^3.10"
84
84
  pytest-snapshot = "^0.9.0"
85
85
  pytest-xdist = {extras = ["psutil"], version = "^3.1.0"}
86
86
  python-multipart = ">=0.0.7"
87
- rich = {version = ">=12.5.1,<14.0.0", optional = false}
87
+ rich = {version = ">=12.5.1", optional = false}
88
88
  sanic-testing = ">=22.9,<24.0"
89
89
  sentry-sdk = "^1.39.2"
90
90
  typer = {version = ">=0.7.0", optional = false}
91
- types-aiofiles = ">=22.1,<24.0"
91
+ types-aiofiles = ">=22.1"
92
92
  types-certifi = "^2021.10.8"
93
93
  types-chardet = "^5.0.4"
94
94
  types-freezegun = "^1.1.9"
@@ -98,7 +98,7 @@ types-typed-ast = "^1.5.8"
98
98
  types-ujson = "^5.6.0"
99
99
  types-protobuf = "^4.23.0.1"
100
100
  mypy = "1.9.0"
101
- pytest-mypy-plugins = ">=1.10,<4.0"
101
+ pytest-mypy-plugins = "3.0.0"
102
102
  poetry-plugin-export = "^1.6.0"
103
103
  # another bug in poetry
104
104
  urllib3 = "<2"
@@ -11,6 +11,7 @@ from typing import (
11
11
  List,
12
12
  Optional,
13
13
  Set,
14
+ Tuple,
14
15
  Union,
15
16
  cast,
16
17
  )
@@ -59,11 +60,16 @@ try:
59
60
  except ImportError:
60
61
  TypeVarDef = TypeVarType
61
62
 
63
+ PYDANTIC_VERSION: Optional[Tuple[int, ...]] = None
64
+
62
65
  # To be compatible with user who don't use pydantic
63
66
  try:
67
+ import pydantic
64
68
  from pydantic.mypy import METADATA_KEY as PYDANTIC_METADATA_KEY
65
69
  from pydantic.mypy import PydanticModelField
66
70
 
71
+ PYDANTIC_VERSION = tuple(map(int, pydantic.__version__.split(".")))
72
+
67
73
  from strawberry.experimental.pydantic._compat import IS_PYDANTIC_V1
68
74
  except ImportError:
69
75
  PYDANTIC_METADATA_KEY = ""
@@ -464,6 +470,11 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
464
470
  return_type=model_type,
465
471
  )
466
472
  else:
473
+ extra = {}
474
+
475
+ if PYDANTIC_VERSION and PYDANTIC_VERSION >= (2, 7, 0):
476
+ extra["api"] = ctx.api
477
+
467
478
  add_method(
468
479
  ctx,
469
480
  "to_pydantic",
@@ -474,6 +485,7 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
474
485
  typed=True,
475
486
  force_optional=False,
476
487
  use_alias=True,
488
+ **extra,
477
489
  )
478
490
  for f in missing_pydantic_fields
479
491
  ],
@@ -487,12 +499,23 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
487
499
  initializer=None,
488
500
  kind=ARG_OPT,
489
501
  )
502
+ extra_type = ctx.api.named_type(
503
+ "builtins.dict",
504
+ [ctx.api.named_type("builtins.str"), AnyType(TypeOfAny.explicit)],
505
+ )
506
+
507
+ extra_argument = Argument(
508
+ variable=Var(name="extra", type=UnionType([NoneType(), extra_type])),
509
+ type_annotation=UnionType([NoneType(), extra_type]),
510
+ initializer=None,
511
+ kind=ARG_OPT,
512
+ )
490
513
 
491
514
  add_static_method_to_class(
492
515
  ctx.api,
493
516
  ctx.cls,
494
517
  name="from_pydantic",
495
- args=[model_argument],
518
+ args=[model_argument, extra_argument],
496
519
  return_type=fill_typevars(ctx.cls.info),
497
520
  )
498
521
 
@@ -0,0 +1,274 @@
1
+ from __future__ import annotations
2
+
3
+ from asyncio import ensure_future
4
+ from inspect import isawaitable
5
+ from typing import (
6
+ TYPE_CHECKING,
7
+ Awaitable,
8
+ Callable,
9
+ Iterable,
10
+ List,
11
+ Optional,
12
+ Sequence,
13
+ Tuple,
14
+ Type,
15
+ TypedDict,
16
+ Union,
17
+ cast,
18
+ )
19
+
20
+ from graphql import GraphQLError, parse
21
+ from graphql import execute as original_execute
22
+ from graphql.validation import validate
23
+
24
+ from strawberry.exceptions import MissingQueryError
25
+ from strawberry.extensions.runner import SchemaExtensionsRunner
26
+ from strawberry.types import ExecutionResult
27
+
28
+ from .exceptions import InvalidOperationTypeError
29
+
30
+ if TYPE_CHECKING:
31
+ from typing_extensions import NotRequired, Unpack
32
+
33
+ from graphql import ExecutionContext as GraphQLExecutionContext
34
+ from graphql import ExecutionResult as GraphQLExecutionResult
35
+ from graphql import GraphQLSchema
36
+ from graphql.language import DocumentNode
37
+ from graphql.validation import ASTValidationRule
38
+
39
+ from strawberry.extensions import SchemaExtension
40
+ from strawberry.types import ExecutionContext
41
+ from strawberry.types.graphql import OperationType
42
+
43
+
44
+ # duplicated because of https://github.com/mkdocstrings/griffe-typingdoc/issues/7
45
+ class ParseOptions(TypedDict):
46
+ max_tokens: NotRequired[int]
47
+
48
+
49
+ def parse_document(query: str, **kwargs: Unpack[ParseOptions]) -> DocumentNode:
50
+ return parse(query, **kwargs)
51
+
52
+
53
+ def validate_document(
54
+ schema: GraphQLSchema,
55
+ document: DocumentNode,
56
+ validation_rules: Tuple[Type[ASTValidationRule], ...],
57
+ ) -> List[GraphQLError]:
58
+ return validate(
59
+ schema,
60
+ document,
61
+ validation_rules,
62
+ )
63
+
64
+
65
+ def _run_validation(execution_context: ExecutionContext) -> None:
66
+ # Check if there are any validation rules or if validation has
67
+ # already been run by an extension
68
+ if len(execution_context.validation_rules) > 0 and execution_context.errors is None:
69
+ assert execution_context.graphql_document
70
+ execution_context.errors = validate_document(
71
+ execution_context.schema._schema,
72
+ execution_context.graphql_document,
73
+ execution_context.validation_rules,
74
+ )
75
+
76
+
77
+ async def execute(
78
+ schema: GraphQLSchema,
79
+ *,
80
+ allowed_operation_types: Iterable[OperationType],
81
+ extensions: Sequence[Union[Type[SchemaExtension], SchemaExtension]],
82
+ execution_context: ExecutionContext,
83
+ execution_context_class: Optional[Type[GraphQLExecutionContext]] = None,
84
+ process_errors: Callable[[List[GraphQLError], Optional[ExecutionContext]], None],
85
+ ) -> ExecutionResult:
86
+ extensions_runner = SchemaExtensionsRunner(
87
+ execution_context=execution_context,
88
+ extensions=list(extensions),
89
+ )
90
+
91
+ try:
92
+ async with extensions_runner.operation():
93
+ # Note: In graphql-core the schema would be validated here but in
94
+ # Strawberry we are validating it at initialisation time instead
95
+ if not execution_context.query:
96
+ raise MissingQueryError()
97
+
98
+ async with extensions_runner.parsing():
99
+ try:
100
+ if not execution_context.graphql_document:
101
+ execution_context.graphql_document = parse_document(
102
+ execution_context.query, **execution_context.parse_options
103
+ )
104
+
105
+ except GraphQLError as exc:
106
+ execution_context.errors = [exc]
107
+ process_errors([exc], execution_context)
108
+ return ExecutionResult(
109
+ data=None,
110
+ errors=[exc],
111
+ extensions=await extensions_runner.get_extensions_results(),
112
+ )
113
+
114
+ if execution_context.operation_type not in allowed_operation_types:
115
+ raise InvalidOperationTypeError(execution_context.operation_type)
116
+
117
+ async with extensions_runner.validation():
118
+ _run_validation(execution_context)
119
+ if execution_context.errors:
120
+ process_errors(execution_context.errors, execution_context)
121
+ return ExecutionResult(data=None, errors=execution_context.errors)
122
+
123
+ async with extensions_runner.executing():
124
+ if not execution_context.result:
125
+ result = original_execute(
126
+ schema,
127
+ execution_context.graphql_document,
128
+ root_value=execution_context.root_value,
129
+ middleware=extensions_runner.as_middleware_manager(),
130
+ variable_values=execution_context.variables,
131
+ operation_name=execution_context.operation_name,
132
+ context_value=execution_context.context,
133
+ execution_context_class=execution_context_class,
134
+ )
135
+
136
+ if isawaitable(result):
137
+ result = await cast(Awaitable["GraphQLExecutionResult"], result)
138
+
139
+ result = cast("GraphQLExecutionResult", result)
140
+ execution_context.result = result
141
+ # Also set errors on the execution_context so that it's easier
142
+ # to access in extensions
143
+ if result.errors:
144
+ execution_context.errors = result.errors
145
+
146
+ # Run the `Schema.process_errors` function here before
147
+ # extensions have a chance to modify them (see the MaskErrors
148
+ # extension). That way we can log the original errors but
149
+ # only return a sanitised version to the client.
150
+ process_errors(result.errors, execution_context)
151
+
152
+ except (MissingQueryError, InvalidOperationTypeError) as e:
153
+ raise e
154
+ except Exception as exc:
155
+ error = (
156
+ exc
157
+ if isinstance(exc, GraphQLError)
158
+ else GraphQLError(str(exc), original_error=exc)
159
+ )
160
+ execution_context.errors = [error]
161
+ process_errors([error], execution_context)
162
+ return ExecutionResult(
163
+ data=None,
164
+ errors=[error],
165
+ extensions=await extensions_runner.get_extensions_results(),
166
+ )
167
+
168
+ return ExecutionResult(
169
+ data=execution_context.result.data,
170
+ errors=execution_context.result.errors,
171
+ extensions=await extensions_runner.get_extensions_results(),
172
+ )
173
+
174
+
175
+ def execute_sync(
176
+ schema: GraphQLSchema,
177
+ *,
178
+ allowed_operation_types: Iterable[OperationType],
179
+ extensions: Sequence[Union[Type[SchemaExtension], SchemaExtension]],
180
+ execution_context: ExecutionContext,
181
+ execution_context_class: Optional[Type[GraphQLExecutionContext]] = None,
182
+ process_errors: Callable[[List[GraphQLError], Optional[ExecutionContext]], None],
183
+ ) -> ExecutionResult:
184
+ extensions_runner = SchemaExtensionsRunner(
185
+ execution_context=execution_context,
186
+ extensions=list(extensions),
187
+ )
188
+
189
+ try:
190
+ with extensions_runner.operation():
191
+ # Note: In graphql-core the schema would be validated here but in
192
+ # Strawberry we are validating it at initialisation time instead
193
+ if not execution_context.query:
194
+ raise MissingQueryError()
195
+
196
+ with extensions_runner.parsing():
197
+ try:
198
+ if not execution_context.graphql_document:
199
+ execution_context.graphql_document = parse_document(
200
+ execution_context.query, **execution_context.parse_options
201
+ )
202
+
203
+ except GraphQLError as exc:
204
+ execution_context.errors = [exc]
205
+ process_errors([exc], execution_context)
206
+ return ExecutionResult(
207
+ data=None,
208
+ errors=[exc],
209
+ extensions=extensions_runner.get_extensions_results_sync(),
210
+ )
211
+
212
+ if execution_context.operation_type not in allowed_operation_types:
213
+ raise InvalidOperationTypeError(execution_context.operation_type)
214
+
215
+ with extensions_runner.validation():
216
+ _run_validation(execution_context)
217
+ if execution_context.errors:
218
+ process_errors(execution_context.errors, execution_context)
219
+ return ExecutionResult(data=None, errors=execution_context.errors)
220
+
221
+ with extensions_runner.executing():
222
+ if not execution_context.result:
223
+ result = original_execute(
224
+ schema,
225
+ execution_context.graphql_document,
226
+ root_value=execution_context.root_value,
227
+ middleware=extensions_runner.as_middleware_manager(),
228
+ variable_values=execution_context.variables,
229
+ operation_name=execution_context.operation_name,
230
+ context_value=execution_context.context,
231
+ execution_context_class=execution_context_class,
232
+ )
233
+
234
+ if isawaitable(result):
235
+ result = cast(Awaitable["GraphQLExecutionResult"], result)
236
+ ensure_future(result).cancel()
237
+ raise RuntimeError(
238
+ "GraphQL execution failed to complete synchronously."
239
+ )
240
+
241
+ result = cast("GraphQLExecutionResult", result)
242
+ execution_context.result = result
243
+ # Also set errors on the execution_context so that it's easier
244
+ # to access in extensions
245
+ if result.errors:
246
+ execution_context.errors = result.errors
247
+
248
+ # Run the `Schema.process_errors` function here before
249
+ # extensions have a chance to modify them (see the MaskErrors
250
+ # extension). That way we can log the original errors but
251
+ # only return a sanitised version to the client.
252
+ process_errors(result.errors, execution_context)
253
+
254
+ except (MissingQueryError, InvalidOperationTypeError) as e:
255
+ raise e
256
+ except Exception as exc:
257
+ error = (
258
+ exc
259
+ if isinstance(exc, GraphQLError)
260
+ else GraphQLError(str(exc), original_error=exc)
261
+ )
262
+ execution_context.errors = [error]
263
+ process_errors([error], execution_context)
264
+ return ExecutionResult(
265
+ data=None,
266
+ errors=[error],
267
+ extensions=extensions_runner.get_extensions_results_sync(),
268
+ )
269
+
270
+ return ExecutionResult(
271
+ data=execution_context.result.data,
272
+ errors=execution_context.result.errors,
273
+ extensions=extensions_runner.get_extensions_results_sync(),
274
+ )
@@ -1,263 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from asyncio import ensure_future
4
- from inspect import isawaitable
5
- from typing import (
6
- TYPE_CHECKING,
7
- Awaitable,
8
- Callable,
9
- Iterable,
10
- List,
11
- Optional,
12
- Sequence,
13
- Tuple,
14
- Type,
15
- TypedDict,
16
- Union,
17
- cast,
18
- )
19
-
20
- from graphql import GraphQLError, parse
21
- from graphql import execute as original_execute
22
- from graphql.validation import validate
23
-
24
- from strawberry.exceptions import MissingQueryError
25
- from strawberry.extensions.runner import SchemaExtensionsRunner
26
- from strawberry.types import ExecutionResult
27
-
28
- from .exceptions import InvalidOperationTypeError
29
-
30
- if TYPE_CHECKING:
31
- from typing_extensions import NotRequired, Unpack
32
-
33
- from graphql import ExecutionContext as GraphQLExecutionContext
34
- from graphql import ExecutionResult as GraphQLExecutionResult
35
- from graphql import GraphQLSchema
36
- from graphql.language import DocumentNode
37
- from graphql.validation import ASTValidationRule
38
-
39
- from strawberry.extensions import SchemaExtension
40
- from strawberry.types import ExecutionContext
41
- from strawberry.types.graphql import OperationType
42
-
43
-
44
- # duplicated because of https://github.com/mkdocstrings/griffe-typingdoc/issues/7
45
- class ParseOptions(TypedDict):
46
- max_tokens: NotRequired[int]
47
-
48
-
49
- def parse_document(query: str, **kwargs: Unpack[ParseOptions]) -> DocumentNode:
50
- return parse(query, **kwargs)
51
-
52
-
53
- def validate_document(
54
- schema: GraphQLSchema,
55
- document: DocumentNode,
56
- validation_rules: Tuple[Type[ASTValidationRule], ...],
57
- ) -> List[GraphQLError]:
58
- return validate(
59
- schema,
60
- document,
61
- validation_rules,
62
- )
63
-
64
-
65
- def _run_validation(execution_context: ExecutionContext) -> None:
66
- # Check if there are any validation rules or if validation has
67
- # already been run by an extension
68
- if len(execution_context.validation_rules) > 0 and execution_context.errors is None:
69
- assert execution_context.graphql_document
70
- execution_context.errors = validate_document(
71
- execution_context.schema._schema,
72
- execution_context.graphql_document,
73
- execution_context.validation_rules,
74
- )
75
-
76
-
77
- async def execute(
78
- schema: GraphQLSchema,
79
- *,
80
- allowed_operation_types: Iterable[OperationType],
81
- extensions: Sequence[Union[Type[SchemaExtension], SchemaExtension]],
82
- execution_context: ExecutionContext,
83
- execution_context_class: Optional[Type[GraphQLExecutionContext]] = None,
84
- process_errors: Callable[[List[GraphQLError], Optional[ExecutionContext]], None],
85
- ) -> ExecutionResult:
86
- extensions_runner = SchemaExtensionsRunner(
87
- execution_context=execution_context,
88
- extensions=list(extensions),
89
- )
90
-
91
- async with extensions_runner.operation():
92
- # Note: In graphql-core the schema would be validated here but in
93
- # Strawberry we are validating it at initialisation time instead
94
- if not execution_context.query:
95
- raise MissingQueryError()
96
-
97
- async with extensions_runner.parsing():
98
- try:
99
- if not execution_context.graphql_document:
100
- execution_context.graphql_document = parse_document(
101
- execution_context.query, **execution_context.parse_options
102
- )
103
-
104
- except GraphQLError as error:
105
- execution_context.errors = [error]
106
- process_errors([error], execution_context)
107
- return ExecutionResult(
108
- data=None,
109
- errors=[error],
110
- extensions=await extensions_runner.get_extensions_results(),
111
- )
112
-
113
- except Exception as error: # pragma: no cover
114
- error = GraphQLError(str(error), original_error=error)
115
-
116
- execution_context.errors = [error]
117
- process_errors([error], execution_context)
118
-
119
- return ExecutionResult(
120
- data=None,
121
- errors=[error],
122
- extensions=await extensions_runner.get_extensions_results(),
123
- )
124
-
125
- if execution_context.operation_type not in allowed_operation_types:
126
- raise InvalidOperationTypeError(execution_context.operation_type)
127
-
128
- async with extensions_runner.validation():
129
- _run_validation(execution_context)
130
- if execution_context.errors:
131
- process_errors(execution_context.errors, execution_context)
132
- return ExecutionResult(data=None, errors=execution_context.errors)
133
-
134
- async with extensions_runner.executing():
135
- if not execution_context.result:
136
- result = original_execute(
137
- schema,
138
- execution_context.graphql_document,
139
- root_value=execution_context.root_value,
140
- middleware=extensions_runner.as_middleware_manager(),
141
- variable_values=execution_context.variables,
142
- operation_name=execution_context.operation_name,
143
- context_value=execution_context.context,
144
- execution_context_class=execution_context_class,
145
- )
146
-
147
- if isawaitable(result):
148
- result = await cast(Awaitable["GraphQLExecutionResult"], result)
149
-
150
- result = cast("GraphQLExecutionResult", result)
151
- execution_context.result = result
152
- # Also set errors on the execution_context so that it's easier
153
- # to access in extensions
154
- if result.errors:
155
- execution_context.errors = result.errors
156
-
157
- # Run the `Schema.process_errors` function here before
158
- # extensions have a chance to modify them (see the MaskErrors
159
- # extension). That way we can log the original errors but
160
- # only return a sanitised version to the client.
161
- process_errors(result.errors, execution_context)
162
-
163
- return ExecutionResult(
164
- data=execution_context.result.data,
165
- errors=execution_context.result.errors,
166
- extensions=await extensions_runner.get_extensions_results(),
167
- )
168
-
169
-
170
- def execute_sync(
171
- schema: GraphQLSchema,
172
- *,
173
- allowed_operation_types: Iterable[OperationType],
174
- extensions: Sequence[Union[Type[SchemaExtension], SchemaExtension]],
175
- execution_context: ExecutionContext,
176
- execution_context_class: Optional[Type[GraphQLExecutionContext]] = None,
177
- process_errors: Callable[[List[GraphQLError], Optional[ExecutionContext]], None],
178
- ) -> ExecutionResult:
179
- extensions_runner = SchemaExtensionsRunner(
180
- execution_context=execution_context,
181
- extensions=list(extensions),
182
- )
183
-
184
- with extensions_runner.operation():
185
- # Note: In graphql-core the schema would be validated here but in
186
- # Strawberry we are validating it at initialisation time instead
187
- if not execution_context.query:
188
- raise MissingQueryError()
189
-
190
- with extensions_runner.parsing():
191
- try:
192
- if not execution_context.graphql_document:
193
- execution_context.graphql_document = parse_document(
194
- execution_context.query, **execution_context.parse_options
195
- )
196
-
197
- except GraphQLError as error:
198
- execution_context.errors = [error]
199
- process_errors([error], execution_context)
200
- return ExecutionResult(
201
- data=None,
202
- errors=[error],
203
- extensions=extensions_runner.get_extensions_results_sync(),
204
- )
205
-
206
- except Exception as error: # pragma: no cover
207
- error = GraphQLError(str(error), original_error=error)
208
-
209
- execution_context.errors = [error]
210
- process_errors([error], execution_context)
211
- return ExecutionResult(
212
- data=None,
213
- errors=[error],
214
- extensions=extensions_runner.get_extensions_results_sync(),
215
- )
216
-
217
- if execution_context.operation_type not in allowed_operation_types:
218
- raise InvalidOperationTypeError(execution_context.operation_type)
219
-
220
- with extensions_runner.validation():
221
- _run_validation(execution_context)
222
- if execution_context.errors:
223
- process_errors(execution_context.errors, execution_context)
224
- return ExecutionResult(data=None, errors=execution_context.errors)
225
-
226
- with extensions_runner.executing():
227
- if not execution_context.result:
228
- result = original_execute(
229
- schema,
230
- execution_context.graphql_document,
231
- root_value=execution_context.root_value,
232
- middleware=extensions_runner.as_middleware_manager(),
233
- variable_values=execution_context.variables,
234
- operation_name=execution_context.operation_name,
235
- context_value=execution_context.context,
236
- execution_context_class=execution_context_class,
237
- )
238
-
239
- if isawaitable(result):
240
- result = cast(Awaitable["GraphQLExecutionResult"], result)
241
- ensure_future(result).cancel()
242
- raise RuntimeError(
243
- "GraphQL execution failed to complete synchronously."
244
- )
245
-
246
- result = cast("GraphQLExecutionResult", result)
247
- execution_context.result = result
248
- # Also set errors on the execution_context so that it's easier
249
- # to access in extensions
250
- if result.errors:
251
- execution_context.errors = result.errors
252
-
253
- # Run the `Schema.process_errors` function here before
254
- # extensions have a chance to modify them (see the MaskErrors
255
- # extension). That way we can log the original errors but
256
- # only return a sanitised version to the client.
257
- process_errors(result.errors, execution_context)
258
-
259
- return ExecutionResult(
260
- data=execution_context.result.data,
261
- errors=execution_context.result.errors,
262
- extensions=extensions_runner.get_extensions_results_sync(),
263
- )