strawberry-graphql 0.276.1__tar.gz → 0.277.0__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 (242) hide show
  1. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/PKG-INFO +1 -1
  2. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/pyproject.toml +2 -1
  3. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/__init__.py +2 -0
  4. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/annotation.py +7 -0
  5. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/object_type.py +2 -2
  6. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/directives.py +6 -2
  7. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/mask_errors.py +23 -10
  8. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/validation_cache.py +1 -1
  9. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/__init__.py +22 -12
  10. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/async_base_view.py +80 -4
  11. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/printer/printer.py +10 -2
  12. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/relay/types.py +1 -1
  13. strawberry_graphql-0.277.0/strawberry/schema/_graphql_core.py +55 -0
  14. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/config.py +1 -0
  15. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/schema.py +76 -40
  16. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/static/graphiql.html +5 -5
  17. strawberry_graphql-0.277.0/strawberry/streamable.py +35 -0
  18. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/execution.py +9 -3
  19. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/LICENSE +0 -0
  20. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/README.md +0 -0
  21. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/__main__.py +0 -0
  22. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/aiohttp/__init__.py +0 -0
  23. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/aiohttp/test/__init__.py +0 -0
  24. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/aiohttp/test/client.py +0 -0
  25. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/aiohttp/views.py +0 -0
  26. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/asgi/__init__.py +0 -0
  27. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/asgi/test/__init__.py +0 -0
  28. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/asgi/test/client.py +0 -0
  29. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/chalice/__init__.py +0 -0
  30. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/chalice/views.py +0 -0
  31. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/__init__.py +0 -0
  32. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/handlers/__init__.py +0 -0
  33. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/handlers/base.py +0 -0
  34. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/handlers/http_handler.py +0 -0
  35. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/handlers/ws_handler.py +0 -0
  36. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/router.py +0 -0
  37. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/channels/testing.py +0 -0
  38. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/__init__.py +0 -0
  39. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/app.py +0 -0
  40. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/__init__.py +0 -0
  41. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/codegen.py +0 -0
  42. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/export_schema.py +0 -0
  43. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/locate_definition.py +0 -0
  44. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/schema_codegen.py +0 -0
  45. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/server.py +0 -0
  46. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/upgrade/__init__.py +0 -0
  47. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/upgrade/_fake_progress.py +0 -0
  48. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/commands/upgrade/_run_codemod.py +0 -0
  49. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/constants.py +0 -0
  50. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/debug_server.py +0 -0
  51. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/utils/__init__.py +0 -0
  52. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/cli/utils/load_schema.py +0 -0
  53. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/__init__.py +0 -0
  54. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/exceptions.py +0 -0
  55. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/plugins/__init__.py +0 -0
  56. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/plugins/print_operation.py +0 -0
  57. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/plugins/python.py +0 -0
  58. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/plugins/typescript.py +0 -0
  59. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/query_codegen.py +0 -0
  60. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codegen/types.py +0 -0
  61. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codemods/__init__.py +0 -0
  62. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codemods/annotated_unions.py +0 -0
  63. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/codemods/update_imports.py +0 -0
  64. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/dataloader.py +0 -0
  65. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/directive.py +0 -0
  66. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/__init__.py +0 -0
  67. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/apps.py +0 -0
  68. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/context.py +0 -0
  69. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/test/__init__.py +0 -0
  70. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/test/client.py +0 -0
  71. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/django/views.py +0 -0
  72. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/__init__.py +0 -0
  73. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/conflicting_arguments.py +0 -0
  74. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/duplicated_type_name.py +0 -0
  75. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/exception.py +0 -0
  76. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/exception_source.py +0 -0
  77. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/handler.py +0 -0
  78. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/invalid_argument_type.py +0 -0
  79. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/invalid_superclass_interface.py +0 -0
  80. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/invalid_union_type.py +0 -0
  81. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/missing_arguments_annotations.py +0 -0
  82. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/missing_dependencies.py +0 -0
  83. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/missing_field_annotation.py +0 -0
  84. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/missing_return_annotation.py +0 -0
  85. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/object_is_not_a_class.py +0 -0
  86. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/object_is_not_an_enum.py +0 -0
  87. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/permission_fail_silently_requires_optional.py +0 -0
  88. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/private_strawberry_field.py +0 -0
  89. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/scalar_already_registered.py +0 -0
  90. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/syntax.py +0 -0
  91. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/unresolved_field_type.py +0 -0
  92. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/utils/__init__.py +0 -0
  93. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/exceptions/utils/source_finder.py +0 -0
  94. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/__init__.py +0 -0
  95. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/__init__.py +0 -0
  96. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/_compat.py +0 -0
  97. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/conversion.py +0 -0
  98. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/conversion_types.py +0 -0
  99. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/error_type.py +0 -0
  100. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/exceptions.py +0 -0
  101. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/fields.py +0 -0
  102. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/experimental/pydantic/utils.py +0 -0
  103. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/LICENSE +0 -0
  104. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/__init__.py +0 -0
  105. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/dataclasses/LICENSE +0 -0
  106. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/dataclasses/README.md +0 -0
  107. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/dataclasses/__init__.py +0 -0
  108. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/dataclasses/dataclasses.py +0 -0
  109. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/ext/mypy_plugin.py +0 -0
  110. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/__init__.py +0 -0
  111. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/add_validation_rules.py +0 -0
  112. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/base_extension.py +0 -0
  113. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/context.py +0 -0
  114. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/disable_introspection.py +0 -0
  115. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/disable_validation.py +0 -0
  116. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/field_extension.py +0 -0
  117. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/max_aliases.py +0 -0
  118. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/max_tokens.py +0 -0
  119. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/parser_cache.py +0 -0
  120. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/pyinstrument.py +0 -0
  121. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/query_depth_limiter.py +0 -0
  122. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/runner.py +0 -0
  123. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/tracing/__init__.py +0 -0
  124. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/tracing/apollo.py +0 -0
  125. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/tracing/datadog.py +0 -0
  126. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/tracing/opentelemetry.py +0 -0
  127. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/tracing/utils.py +0 -0
  128. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/extensions/utils.py +0 -0
  129. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/fastapi/__init__.py +0 -0
  130. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/fastapi/context.py +0 -0
  131. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/fastapi/router.py +0 -0
  132. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/__init__.py +0 -0
  133. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/argument.py +0 -0
  134. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/enum.py +0 -0
  135. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/field.py +0 -0
  136. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/mutation.py +0 -0
  137. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/object_type.py +0 -0
  138. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/scalar.py +0 -0
  139. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/schema.py +0 -0
  140. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/schema_directive.py +0 -0
  141. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/schema_directives.py +0 -0
  142. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/types.py +0 -0
  143. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/federation/union.py +0 -0
  144. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/field_extensions/__init__.py +0 -0
  145. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/field_extensions/input_mutation.py +0 -0
  146. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/file_uploads/__init__.py +0 -0
  147. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/file_uploads/scalars.py +0 -0
  148. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/file_uploads/utils.py +0 -0
  149. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/flask/__init__.py +0 -0
  150. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/flask/views.py +0 -0
  151. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/base.py +0 -0
  152. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/exceptions.py +0 -0
  153. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/ides.py +0 -0
  154. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/parse_content_type.py +0 -0
  155. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/sync_base_view.py +0 -0
  156. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/temporal_response.py +0 -0
  157. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/types.py +0 -0
  158. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/http/typevars.py +0 -0
  159. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/litestar/__init__.py +0 -0
  160. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/litestar/controller.py +0 -0
  161. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/parent.py +0 -0
  162. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/permission.py +0 -0
  163. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/printer/__init__.py +0 -0
  164. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/printer/ast_from_value.py +0 -0
  165. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/py.typed +0 -0
  166. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/quart/__init__.py +0 -0
  167. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/quart/views.py +0 -0
  168. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/relay/__init__.py +0 -0
  169. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/relay/exceptions.py +0 -0
  170. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/relay/fields.py +0 -0
  171. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/relay/utils.py +0 -0
  172. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/resolvers.py +0 -0
  173. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/sanic/__init__.py +0 -0
  174. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/sanic/context.py +0 -0
  175. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/sanic/utils.py +0 -0
  176. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/sanic/views.py +0 -0
  177. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/scalars.py +0 -0
  178. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/__init__.py +0 -0
  179. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/base.py +0 -0
  180. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/compat.py +0 -0
  181. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/exceptions.py +0 -0
  182. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/name_converter.py +0 -0
  183. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/schema_converter.py +0 -0
  184. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/types/__init__.py +0 -0
  185. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/types/base_scalars.py +0 -0
  186. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/types/concrete_type.py +0 -0
  187. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/types/scalar.py +0 -0
  188. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/validation_rules/__init__.py +0 -0
  189. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema/validation_rules/one_of.py +0 -0
  190. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema_codegen/__init__.py +0 -0
  191. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema_directive.py +0 -0
  192. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/schema_directives.py +0 -0
  193. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/static/apollo-sandbox.html +0 -0
  194. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/static/pathfinder.html +0 -0
  195. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/__init__.py +0 -0
  196. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/__init__.py +0 -0
  197. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py +0 -0
  198. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py +0 -0
  199. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_transport_ws/types.py +0 -0
  200. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_ws/__init__.py +0 -0
  201. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_ws/handlers.py +0 -0
  202. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/subscriptions/protocols/graphql_ws/types.py +0 -0
  203. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/test/__init__.py +0 -0
  204. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/test/client.py +0 -0
  205. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/tools/__init__.py +0 -0
  206. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/tools/create_type.py +0 -0
  207. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/tools/merge_types.py +0 -0
  208. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/__init__.py +0 -0
  209. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/arguments.py +0 -0
  210. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/auto.py +0 -0
  211. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/base.py +0 -0
  212. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/cast.py +0 -0
  213. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/enum.py +0 -0
  214. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/field.py +0 -0
  215. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/fields/__init__.py +0 -0
  216. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/fields/resolver.py +0 -0
  217. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/graphql.py +0 -0
  218. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/info.py +0 -0
  219. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/lazy_type.py +0 -0
  220. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/maybe.py +0 -0
  221. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/mutation.py +0 -0
  222. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/nodes.py +0 -0
  223. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/object_type.py +0 -0
  224. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/private.py +0 -0
  225. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/scalar.py +0 -0
  226. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/type_resolver.py +0 -0
  227. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/union.py +0 -0
  228. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/types/unset.py +0 -0
  229. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/__init__.py +0 -0
  230. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/aio.py +0 -0
  231. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/await_maybe.py +0 -0
  232. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/dataclasses.py +0 -0
  233. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/debug.py +0 -0
  234. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/deprecations.py +0 -0
  235. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/graphql_lexer.py +0 -0
  236. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/importer.py +0 -0
  237. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/inspect.py +0 -0
  238. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/locate_definition.py +0 -0
  239. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/logging.py +0 -0
  240. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/operation.py +0 -0
  241. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/str_converters.py +0 -0
  242. {strawberry_graphql-0.276.1 → strawberry_graphql-0.277.0}/strawberry/utils/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strawberry-graphql
3
- Version: 0.276.1
3
+ Version: 0.277.0
4
4
  Summary: A library for creating GraphQL APIs
5
5
  License: MIT
6
6
  Keywords: graphql,api,rest,starlette,async
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "strawberry-graphql"
3
- version = "0.276.1"
3
+ version = "0.277.0"
4
4
  description = "A library for creating GraphQL APIs"
5
5
  authors = [{ name = "Patrick Arminio", email = "patrick.arminio@gmail.com" }]
6
6
  license = { text = "MIT" }
@@ -327,6 +327,7 @@ ignore = [
327
327
  "Q002",
328
328
  "Q003",
329
329
  "W191",
330
+ "PLR0915",
330
331
  ]
331
332
  exclude = ["tests/python_312/*"] # SyntaxError because we support Python 3.9+
332
333
 
@@ -11,6 +11,7 @@ from .permission import BasePermission
11
11
  from .scalars import ID
12
12
  from .schema import Schema
13
13
  from .schema_directive import schema_directive
14
+ from .streamable import Streamable
14
15
  from .types.arguments import argument
15
16
  from .types.auto import auto
16
17
  from .types.cast import cast
@@ -37,6 +38,7 @@ __all__ = [
37
38
  "Private",
38
39
  "Schema",
39
40
  "Some",
41
+ "Streamable",
40
42
  "argument",
41
43
  "asdict",
42
44
  "auto",
@@ -17,6 +17,7 @@ from typing import (
17
17
  )
18
18
  from typing_extensions import Self, get_args, get_origin
19
19
 
20
+ from strawberry.streamable import StrawberryStreamable
20
21
  from strawberry.types.base import (
21
22
  StrawberryList,
22
23
  StrawberryMaybe,
@@ -143,6 +144,8 @@ class StrawberryAnnotation:
143
144
 
144
145
  if self._is_lazy_type(evaled_type):
145
146
  return evaled_type
147
+ if self._is_streamable(evaled_type, args):
148
+ return self.create_list(list[evaled_type]) # type: ignore[valid-type]
146
149
  if self._is_list(evaled_type):
147
150
  return self.create_list(evaled_type)
148
151
  if self._is_maybe(evaled_type):
@@ -332,6 +335,10 @@ class StrawberryAnnotation:
332
335
  def _is_maybe(cls, annotation: Any) -> bool:
333
336
  return _annotation_is_maybe(annotation)
334
337
 
338
+ @classmethod
339
+ def _is_streamable(cls, annotation: Any, args: list[Any]) -> bool:
340
+ return any(isinstance(arg, StrawberryStreamable) for arg in args)
341
+
335
342
  @classmethod
336
343
  def _is_strawberry_type(cls, evaled_type: Any) -> bool:
337
344
  # Prevent import cycles
@@ -116,7 +116,7 @@ if TYPE_CHECKING:
116
116
  )
117
117
 
118
118
 
119
- def type( # noqa: PLR0915
119
+ def type(
120
120
  model: builtins.type[PydanticModel],
121
121
  *,
122
122
  fields: Optional[list[str]] = None,
@@ -129,7 +129,7 @@ def type( # noqa: PLR0915
129
129
  include_computed: bool = False,
130
130
  use_pydantic_alias: bool = True,
131
131
  ) -> Callable[..., builtins.type[StrawberryTypeFromPydantic[PydanticModel]]]:
132
- def wrap(cls: Any) -> builtins.type[StrawberryTypeFromPydantic[PydanticModel]]: # noqa: PLR0915
132
+ def wrap(cls: Any) -> builtins.type[StrawberryTypeFromPydantic[PydanticModel]]:
133
133
  compat = PydanticCompat.from_model(model)
134
134
  model_fields = compat.get_model_fields(model, include_computed=include_computed)
135
135
  original_fields_set = set(fields) if fields else set()
@@ -29,7 +29,9 @@ class DirectivesExtension(SchemaExtension):
29
29
  ) -> AwaitableOrValue[Any]:
30
30
  value = await await_maybe(_next(root, info, *args, **kwargs))
31
31
 
32
- for directive in info.field_nodes[0].directives:
32
+ nodes = list(info.field_nodes)
33
+
34
+ for directive in nodes[0].directives:
33
35
  if directive.name.value in SPECIFIED_DIRECTIVES:
34
36
  continue
35
37
  strawberry_directive, arguments = process_directive(directive, value, info)
@@ -49,7 +51,9 @@ class DirectivesExtensionSync(SchemaExtension):
49
51
  ) -> AwaitableOrValue[Any]:
50
52
  value = _next(root, info, *args, **kwargs)
51
53
 
52
- for directive in info.field_nodes[0].directives:
54
+ nodes = list(info.field_nodes)
55
+
56
+ for directive in nodes[0].directives:
53
57
  if directive.name.value in SPECIFIED_DIRECTIVES:
54
58
  continue
55
59
  strawberry_directive, arguments = process_directive(directive, value, info)
@@ -1,7 +1,8 @@
1
1
  from collections.abc import Iterator
2
- from typing import Callable
2
+ from typing import Any, Callable
3
3
 
4
4
  from graphql.error import GraphQLError
5
+ from graphql.execution import ExecutionResult
5
6
 
6
7
  from strawberry.extensions.base_extension import SchemaExtension
7
8
 
@@ -33,18 +34,30 @@ class MaskErrors(SchemaExtension):
33
34
  original_error=None,
34
35
  )
35
36
 
37
+ # TODO: proper typing
38
+ def _process_result(self, result: Any) -> None:
39
+ if not result.errors:
40
+ return
41
+
42
+ processed_errors: list[GraphQLError] = []
43
+
44
+ for error in result.errors:
45
+ if self.should_mask_error(error):
46
+ processed_errors.append(self.anonymise_error(error))
47
+ else:
48
+ processed_errors.append(error)
49
+
50
+ result.errors = processed_errors
51
+
36
52
  def on_operation(self) -> Iterator[None]:
37
53
  yield
54
+
38
55
  result = self.execution_context.result
39
- if result and result.errors:
40
- processed_errors: list[GraphQLError] = []
41
- for error in result.errors:
42
- if self.should_mask_error(error):
43
- processed_errors.append(self.anonymise_error(error))
44
- else:
45
- processed_errors.append(error)
46
-
47
- result.errors = processed_errors
56
+
57
+ if isinstance(result, ExecutionResult):
58
+ self._process_result(result)
59
+ elif result:
60
+ self._process_result(result.initial_result)
48
61
 
49
62
 
50
63
  __all__ = ["MaskErrors"]
@@ -43,7 +43,7 @@ class ValidationCache(SchemaExtension):
43
43
  execution_context.graphql_document,
44
44
  execution_context.validation_rules,
45
45
  )
46
- execution_context.errors = errors
46
+ execution_context.pre_execution_errors = errors
47
47
  yield
48
48
 
49
49
 
@@ -1,26 +1,36 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import TYPE_CHECKING, Any, Optional
4
+ from typing import Any, Optional
5
5
  from typing_extensions import Literal, TypedDict
6
6
 
7
- if TYPE_CHECKING:
8
- from strawberry.types import ExecutionResult
7
+ from strawberry.schema._graphql_core import (
8
+ GraphQLIncrementalExecutionResults,
9
+ ResultType,
10
+ )
9
11
 
10
12
 
11
13
  class GraphQLHTTPResponse(TypedDict, total=False):
12
14
  data: Optional[dict[str, object]]
13
15
  errors: Optional[list[object]]
14
16
  extensions: Optional[dict[str, object]]
15
-
16
-
17
- def process_result(result: ExecutionResult) -> GraphQLHTTPResponse:
18
- data: GraphQLHTTPResponse = {"data": result.data}
19
-
20
- if result.errors:
21
- data["errors"] = [err.formatted for err in result.errors]
22
- if result.extensions:
23
- data["extensions"] = result.extensions
17
+ hasNext: Optional[bool]
18
+ completed: Optional[list[Any]]
19
+ pending: Optional[list[Any]]
20
+ initial: Optional[list[Any]]
21
+ incremental: Optional[list[Any]]
22
+
23
+
24
+ def process_result(result: ResultType) -> GraphQLHTTPResponse:
25
+ if isinstance(result, GraphQLIncrementalExecutionResults):
26
+ return result
27
+
28
+ errors, extensions = result.errors, result.extensions
29
+ data: GraphQLHTTPResponse = {
30
+ "data": result.data,
31
+ **({"errors": [err.formatted for err in errors]} if errors else {}),
32
+ **({"extensions": extensions} if extensions else {}),
33
+ }
24
34
 
25
35
  return data
26
36
 
@@ -25,6 +25,9 @@ from strawberry.http import (
25
25
  process_result,
26
26
  )
27
27
  from strawberry.http.ides import GraphQL_IDE
28
+ from strawberry.schema._graphql_core import (
29
+ GraphQLIncrementalExecutionResults,
30
+ )
28
31
  from strawberry.schema.base import BaseSchema
29
32
  from strawberry.schema.exceptions import (
30
33
  CannotGetOperationTypeError,
@@ -352,6 +355,75 @@ class AsyncBaseHTTPView(
352
355
  "Content-Type": "multipart/mixed;boundary=graphql;subscriptionSpec=1.0,application/json",
353
356
  },
354
357
  )
358
+ if isinstance(result, GraphQLIncrementalExecutionResults):
359
+
360
+ async def stream() -> AsyncGenerator[str, None]:
361
+ yield "---"
362
+
363
+ response = await self.process_result(request, result.initial_result)
364
+
365
+ response["hasNext"] = result.initial_result.has_next
366
+ response["pending"] = [
367
+ p.formatted for p in result.initial_result.pending
368
+ ]
369
+ response["extensions"] = result.initial_result.extensions
370
+
371
+ yield self.encode_multipart_data(response, "-")
372
+
373
+ all_pending = result.initial_result.pending
374
+
375
+ async for value in result.subsequent_results:
376
+ response = {
377
+ "hasNext": value.has_next,
378
+ "extensions": value.extensions,
379
+ }
380
+
381
+ if value.pending:
382
+ response["pending"] = [p.formatted for p in value.pending]
383
+
384
+ if value.completed:
385
+ response["completed"] = [p.formatted for p in value.completed]
386
+
387
+ if value.incremental:
388
+ incremental = []
389
+
390
+ all_pending.extend(value.pending)
391
+
392
+ for incremental_value in value.incremental:
393
+ pending_value = next(
394
+ (
395
+ v
396
+ for v in all_pending
397
+ if v.id == incremental_value.id
398
+ ),
399
+ None,
400
+ )
401
+
402
+ assert pending_value
403
+
404
+ incremental.append(
405
+ {
406
+ **incremental_value.formatted,
407
+ "path": pending_value.path,
408
+ "label": pending_value.label,
409
+ }
410
+ )
411
+
412
+ response["incremental"] = incremental
413
+
414
+ yield self.encode_multipart_data(response, "-")
415
+
416
+ yield "--\r\n"
417
+
418
+ return await self.create_streaming_response(
419
+ request,
420
+ stream,
421
+ sub_response,
422
+ headers={
423
+ "Transfer-Encoding": "chunked",
424
+ "Content-Type": 'multipart/mixed; boundary="-"',
425
+ },
426
+ )
355
427
 
356
428
  response_data = await self.process_result(request=request, result=result)
357
429
 
@@ -363,12 +435,16 @@ class AsyncBaseHTTPView(
363
435
  )
364
436
 
365
437
  def encode_multipart_data(self, data: Any, separator: str) -> str:
438
+ encoded_data = self.encode_json(data)
439
+
366
440
  return "".join(
367
441
  [
368
- f"\r\n--{separator}\r\n",
369
- "Content-Type: application/json\r\n\r\n",
370
- self.encode_json(data),
371
- "\n",
442
+ "\r\n",
443
+ "Content-Type: application/json; charset=utf-8\r\n",
444
+ "Content-Length: " + str(len(encoded_data)) + "\r\n",
445
+ "\r\n",
446
+ encoded_data,
447
+ f"\r\n--{separator}",
372
448
  ]
373
449
  )
374
450
 
@@ -561,9 +561,9 @@ def print_schema_definition(
561
561
  def print_directive(
562
562
  directive: GraphQLDirective, *, schema: BaseSchema
563
563
  ) -> Optional[str]:
564
- strawberry_directive = directive.extensions["strawberry-definition"]
564
+ strawberry_directive = directive.extensions.get("strawberry-definition")
565
565
 
566
- if (
566
+ if strawberry_directive is None or (
567
567
  isinstance(strawberry_directive, StrawberrySchemaDirective)
568
568
  and not strawberry_directive.print_definition
569
569
  ):
@@ -621,6 +621,14 @@ def print_schema(schema: BaseSchema) -> str:
621
621
  if (printed_directive := print_directive(directive, schema=schema)) is not None
622
622
  ]
623
623
 
624
+ if schema.config.enable_experimental_incremental_execution:
625
+ directives.append(
626
+ "directive @defer(if: Boolean, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT"
627
+ )
628
+ directives.append(
629
+ "directive @stream(if: Boolean, label: String, initialCount: Int = 0) on FIELD"
630
+ )
631
+
624
632
  def _name_getter(type_: Any) -> str:
625
633
  if hasattr(type_, "name"):
626
634
  return type_.name
@@ -762,7 +762,7 @@ class ListConnection(Connection[NodeType]):
762
762
  )
763
763
 
764
764
  @classmethod
765
- def resolve_connection( # noqa: PLR0915
765
+ def resolve_connection(
766
766
  cls,
767
767
  nodes: NodeIterableType[NodeType],
768
768
  *,
@@ -0,0 +1,55 @@
1
+ from typing import Union
2
+
3
+ from graphql.execution import ExecutionContext as GraphQLExecutionContext
4
+ from graphql.execution import ExecutionResult as OriginalGraphQLExecutionResult
5
+ from graphql.execution import execute, subscribe
6
+
7
+ from strawberry.types import ExecutionResult
8
+
9
+ try:
10
+ from graphql import ( # type: ignore[attr-defined]
11
+ ExperimentalIncrementalExecutionResults as GraphQLIncrementalExecutionResults,
12
+ )
13
+ from graphql.execution import ( # type: ignore[attr-defined]
14
+ InitialIncrementalExecutionResult,
15
+ experimental_execute_incrementally,
16
+ )
17
+ from graphql.type.directives import ( # type: ignore[attr-defined]
18
+ GraphQLDeferDirective,
19
+ GraphQLStreamDirective,
20
+ )
21
+
22
+ incremental_execution_directives = (
23
+ GraphQLDeferDirective,
24
+ GraphQLStreamDirective,
25
+ )
26
+
27
+ GraphQLExecutionResult = Union[
28
+ OriginalGraphQLExecutionResult, InitialIncrementalExecutionResult
29
+ ]
30
+
31
+ except ImportError:
32
+ GraphQLIncrementalExecutionResults = type(None)
33
+ GraphQLExecutionResult = OriginalGraphQLExecutionResult # type: ignore
34
+
35
+ incremental_execution_directives = () # type: ignore
36
+ experimental_execute_incrementally = None
37
+
38
+
39
+ # TODO: give this a better name, maybe also a better place
40
+ ResultType = Union[
41
+ OriginalGraphQLExecutionResult,
42
+ GraphQLIncrementalExecutionResults,
43
+ ExecutionResult,
44
+ ]
45
+
46
+ __all__ = [
47
+ "GraphQLExecutionContext",
48
+ "GraphQLExecutionResult",
49
+ "GraphQLIncrementalExecutionResults",
50
+ "ResultType",
51
+ "execute",
52
+ "experimental_execute_incrementally",
53
+ "incremental_execution_directives",
54
+ "subscribe",
55
+ ]
@@ -17,6 +17,7 @@ class StrawberryConfig:
17
17
  relay_use_legacy_global_id: bool = False
18
18
  disable_field_suggestions: bool = False
19
19
  info_class: type[Info] = Info
20
+ enable_experimental_incremental_execution: bool = False
20
21
  _unsafe_disable_same_type_validation: bool = False
21
22
 
22
23
  def __post_init__(