prefect-client 2.19.3__py3-none-any.whl → 3.0.0rc1__py3-none-any.whl

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 (239) hide show
  1. prefect/__init__.py +8 -56
  2. prefect/_internal/compatibility/deprecated.py +6 -115
  3. prefect/_internal/compatibility/experimental.py +4 -79
  4. prefect/_internal/concurrency/api.py +0 -34
  5. prefect/_internal/concurrency/calls.py +0 -6
  6. prefect/_internal/concurrency/cancellation.py +0 -3
  7. prefect/_internal/concurrency/event_loop.py +0 -20
  8. prefect/_internal/concurrency/inspection.py +3 -3
  9. prefect/_internal/concurrency/threads.py +35 -0
  10. prefect/_internal/concurrency/waiters.py +0 -28
  11. prefect/_internal/pydantic/__init__.py +0 -45
  12. prefect/_internal/pydantic/v1_schema.py +21 -22
  13. prefect/_internal/pydantic/v2_schema.py +0 -2
  14. prefect/_internal/pydantic/v2_validated_func.py +18 -23
  15. prefect/_internal/schemas/bases.py +44 -177
  16. prefect/_internal/schemas/fields.py +1 -43
  17. prefect/_internal/schemas/validators.py +60 -158
  18. prefect/artifacts.py +161 -14
  19. prefect/automations.py +39 -4
  20. prefect/blocks/abstract.py +1 -1
  21. prefect/blocks/core.py +268 -148
  22. prefect/blocks/fields.py +2 -57
  23. prefect/blocks/kubernetes.py +8 -12
  24. prefect/blocks/notifications.py +40 -20
  25. prefect/blocks/system.py +22 -11
  26. prefect/blocks/webhook.py +2 -9
  27. prefect/client/base.py +4 -4
  28. prefect/client/cloud.py +8 -13
  29. prefect/client/orchestration.py +347 -341
  30. prefect/client/schemas/actions.py +92 -86
  31. prefect/client/schemas/filters.py +20 -40
  32. prefect/client/schemas/objects.py +147 -145
  33. prefect/client/schemas/responses.py +16 -24
  34. prefect/client/schemas/schedules.py +47 -35
  35. prefect/client/subscriptions.py +2 -2
  36. prefect/client/utilities.py +5 -2
  37. prefect/concurrency/asyncio.py +3 -1
  38. prefect/concurrency/events.py +1 -1
  39. prefect/concurrency/services.py +6 -3
  40. prefect/context.py +195 -27
  41. prefect/deployments/__init__.py +5 -6
  42. prefect/deployments/base.py +7 -5
  43. prefect/deployments/flow_runs.py +185 -0
  44. prefect/deployments/runner.py +50 -45
  45. prefect/deployments/schedules.py +28 -23
  46. prefect/deployments/steps/__init__.py +0 -1
  47. prefect/deployments/steps/core.py +1 -0
  48. prefect/deployments/steps/pull.py +7 -21
  49. prefect/engine.py +12 -2422
  50. prefect/events/actions.py +17 -23
  51. prefect/events/cli/automations.py +19 -6
  52. prefect/events/clients.py +14 -37
  53. prefect/events/filters.py +14 -18
  54. prefect/events/related.py +2 -2
  55. prefect/events/schemas/__init__.py +0 -5
  56. prefect/events/schemas/automations.py +55 -46
  57. prefect/events/schemas/deployment_triggers.py +7 -197
  58. prefect/events/schemas/events.py +34 -65
  59. prefect/events/schemas/labelling.py +10 -14
  60. prefect/events/utilities.py +2 -3
  61. prefect/events/worker.py +2 -3
  62. prefect/filesystems.py +6 -517
  63. prefect/{new_flow_engine.py → flow_engine.py} +313 -72
  64. prefect/flow_runs.py +377 -5
  65. prefect/flows.py +248 -165
  66. prefect/futures.py +186 -345
  67. prefect/infrastructure/__init__.py +0 -27
  68. prefect/infrastructure/provisioners/__init__.py +5 -3
  69. prefect/infrastructure/provisioners/cloud_run.py +11 -6
  70. prefect/infrastructure/provisioners/container_instance.py +11 -7
  71. prefect/infrastructure/provisioners/ecs.py +6 -4
  72. prefect/infrastructure/provisioners/modal.py +8 -5
  73. prefect/input/actions.py +2 -4
  74. prefect/input/run_input.py +5 -7
  75. prefect/logging/formatters.py +0 -2
  76. prefect/logging/handlers.py +3 -11
  77. prefect/logging/loggers.py +2 -2
  78. prefect/manifests.py +2 -1
  79. prefect/records/__init__.py +1 -0
  80. prefect/records/result_store.py +42 -0
  81. prefect/records/store.py +9 -0
  82. prefect/results.py +43 -39
  83. prefect/runner/runner.py +9 -9
  84. prefect/runner/server.py +6 -10
  85. prefect/runner/storage.py +3 -8
  86. prefect/runner/submit.py +2 -2
  87. prefect/runner/utils.py +2 -2
  88. prefect/serializers.py +24 -35
  89. prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
  90. prefect/settings.py +70 -133
  91. prefect/states.py +17 -47
  92. prefect/task_engine.py +697 -58
  93. prefect/task_runners.py +269 -301
  94. prefect/task_server.py +53 -34
  95. prefect/tasks.py +327 -337
  96. prefect/transactions.py +220 -0
  97. prefect/types/__init__.py +61 -82
  98. prefect/utilities/asyncutils.py +195 -136
  99. prefect/utilities/callables.py +121 -41
  100. prefect/utilities/collections.py +23 -38
  101. prefect/utilities/dispatch.py +11 -3
  102. prefect/utilities/dockerutils.py +4 -0
  103. prefect/utilities/engine.py +140 -20
  104. prefect/utilities/importtools.py +26 -27
  105. prefect/utilities/pydantic.py +128 -38
  106. prefect/utilities/schema_tools/hydration.py +5 -1
  107. prefect/utilities/templating.py +12 -2
  108. prefect/variables.py +78 -61
  109. prefect/workers/__init__.py +0 -1
  110. prefect/workers/base.py +15 -17
  111. prefect/workers/process.py +3 -8
  112. prefect/workers/server.py +2 -2
  113. {prefect_client-2.19.3.dist-info → prefect_client-3.0.0rc1.dist-info}/METADATA +22 -21
  114. prefect_client-3.0.0rc1.dist-info/RECORD +176 -0
  115. prefect/_internal/pydantic/_base_model.py +0 -51
  116. prefect/_internal/pydantic/_compat.py +0 -82
  117. prefect/_internal/pydantic/_flags.py +0 -20
  118. prefect/_internal/pydantic/_types.py +0 -8
  119. prefect/_internal/pydantic/utilities/__init__.py +0 -0
  120. prefect/_internal/pydantic/utilities/config_dict.py +0 -72
  121. prefect/_internal/pydantic/utilities/field_validator.py +0 -150
  122. prefect/_internal/pydantic/utilities/model_construct.py +0 -56
  123. prefect/_internal/pydantic/utilities/model_copy.py +0 -55
  124. prefect/_internal/pydantic/utilities/model_dump.py +0 -136
  125. prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
  126. prefect/_internal/pydantic/utilities/model_fields.py +0 -50
  127. prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
  128. prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
  129. prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
  130. prefect/_internal/pydantic/utilities/model_validate.py +0 -75
  131. prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
  132. prefect/_internal/pydantic/utilities/model_validator.py +0 -87
  133. prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
  134. prefect/_vendor/__init__.py +0 -0
  135. prefect/_vendor/fastapi/__init__.py +0 -25
  136. prefect/_vendor/fastapi/applications.py +0 -946
  137. prefect/_vendor/fastapi/background.py +0 -3
  138. prefect/_vendor/fastapi/concurrency.py +0 -44
  139. prefect/_vendor/fastapi/datastructures.py +0 -58
  140. prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
  141. prefect/_vendor/fastapi/dependencies/models.py +0 -64
  142. prefect/_vendor/fastapi/dependencies/utils.py +0 -877
  143. prefect/_vendor/fastapi/encoders.py +0 -177
  144. prefect/_vendor/fastapi/exception_handlers.py +0 -40
  145. prefect/_vendor/fastapi/exceptions.py +0 -46
  146. prefect/_vendor/fastapi/logger.py +0 -3
  147. prefect/_vendor/fastapi/middleware/__init__.py +0 -1
  148. prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
  149. prefect/_vendor/fastapi/middleware/cors.py +0 -3
  150. prefect/_vendor/fastapi/middleware/gzip.py +0 -3
  151. prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
  152. prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
  153. prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
  154. prefect/_vendor/fastapi/openapi/__init__.py +0 -0
  155. prefect/_vendor/fastapi/openapi/constants.py +0 -2
  156. prefect/_vendor/fastapi/openapi/docs.py +0 -203
  157. prefect/_vendor/fastapi/openapi/models.py +0 -480
  158. prefect/_vendor/fastapi/openapi/utils.py +0 -485
  159. prefect/_vendor/fastapi/param_functions.py +0 -340
  160. prefect/_vendor/fastapi/params.py +0 -453
  161. prefect/_vendor/fastapi/requests.py +0 -4
  162. prefect/_vendor/fastapi/responses.py +0 -40
  163. prefect/_vendor/fastapi/routing.py +0 -1331
  164. prefect/_vendor/fastapi/security/__init__.py +0 -15
  165. prefect/_vendor/fastapi/security/api_key.py +0 -98
  166. prefect/_vendor/fastapi/security/base.py +0 -6
  167. prefect/_vendor/fastapi/security/http.py +0 -172
  168. prefect/_vendor/fastapi/security/oauth2.py +0 -227
  169. prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
  170. prefect/_vendor/fastapi/security/utils.py +0 -10
  171. prefect/_vendor/fastapi/staticfiles.py +0 -1
  172. prefect/_vendor/fastapi/templating.py +0 -3
  173. prefect/_vendor/fastapi/testclient.py +0 -1
  174. prefect/_vendor/fastapi/types.py +0 -3
  175. prefect/_vendor/fastapi/utils.py +0 -235
  176. prefect/_vendor/fastapi/websockets.py +0 -7
  177. prefect/_vendor/starlette/__init__.py +0 -1
  178. prefect/_vendor/starlette/_compat.py +0 -28
  179. prefect/_vendor/starlette/_exception_handler.py +0 -80
  180. prefect/_vendor/starlette/_utils.py +0 -88
  181. prefect/_vendor/starlette/applications.py +0 -261
  182. prefect/_vendor/starlette/authentication.py +0 -159
  183. prefect/_vendor/starlette/background.py +0 -43
  184. prefect/_vendor/starlette/concurrency.py +0 -59
  185. prefect/_vendor/starlette/config.py +0 -151
  186. prefect/_vendor/starlette/convertors.py +0 -87
  187. prefect/_vendor/starlette/datastructures.py +0 -707
  188. prefect/_vendor/starlette/endpoints.py +0 -130
  189. prefect/_vendor/starlette/exceptions.py +0 -60
  190. prefect/_vendor/starlette/formparsers.py +0 -276
  191. prefect/_vendor/starlette/middleware/__init__.py +0 -17
  192. prefect/_vendor/starlette/middleware/authentication.py +0 -52
  193. prefect/_vendor/starlette/middleware/base.py +0 -220
  194. prefect/_vendor/starlette/middleware/cors.py +0 -176
  195. prefect/_vendor/starlette/middleware/errors.py +0 -265
  196. prefect/_vendor/starlette/middleware/exceptions.py +0 -74
  197. prefect/_vendor/starlette/middleware/gzip.py +0 -113
  198. prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
  199. prefect/_vendor/starlette/middleware/sessions.py +0 -82
  200. prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
  201. prefect/_vendor/starlette/middleware/wsgi.py +0 -147
  202. prefect/_vendor/starlette/requests.py +0 -328
  203. prefect/_vendor/starlette/responses.py +0 -347
  204. prefect/_vendor/starlette/routing.py +0 -933
  205. prefect/_vendor/starlette/schemas.py +0 -154
  206. prefect/_vendor/starlette/staticfiles.py +0 -248
  207. prefect/_vendor/starlette/status.py +0 -199
  208. prefect/_vendor/starlette/templating.py +0 -231
  209. prefect/_vendor/starlette/testclient.py +0 -804
  210. prefect/_vendor/starlette/types.py +0 -30
  211. prefect/_vendor/starlette/websockets.py +0 -193
  212. prefect/agent.py +0 -698
  213. prefect/deployments/deployments.py +0 -1042
  214. prefect/deprecated/__init__.py +0 -0
  215. prefect/deprecated/data_documents.py +0 -350
  216. prefect/deprecated/packaging/__init__.py +0 -12
  217. prefect/deprecated/packaging/base.py +0 -96
  218. prefect/deprecated/packaging/docker.py +0 -146
  219. prefect/deprecated/packaging/file.py +0 -92
  220. prefect/deprecated/packaging/orion.py +0 -80
  221. prefect/deprecated/packaging/serializers.py +0 -171
  222. prefect/events/instrument.py +0 -135
  223. prefect/infrastructure/base.py +0 -323
  224. prefect/infrastructure/container.py +0 -818
  225. prefect/infrastructure/kubernetes.py +0 -920
  226. prefect/infrastructure/process.py +0 -289
  227. prefect/new_task_engine.py +0 -423
  228. prefect/pydantic/__init__.py +0 -76
  229. prefect/pydantic/main.py +0 -39
  230. prefect/software/__init__.py +0 -2
  231. prefect/software/base.py +0 -50
  232. prefect/software/conda.py +0 -199
  233. prefect/software/pip.py +0 -122
  234. prefect/software/python.py +0 -52
  235. prefect/workers/block.py +0 -218
  236. prefect_client-2.19.3.dist-info/RECORD +0 -292
  237. {prefect_client-2.19.3.dist-info → prefect_client-3.0.0rc1.dist-info}/LICENSE +0 -0
  238. {prefect_client-2.19.3.dist-info → prefect_client-3.0.0rc1.dist-info}/WHEEL +0 -0
  239. {prefect_client-2.19.3.dist-info → prefect_client-3.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,231 +0,0 @@
1
- import typing
2
- import warnings
3
- from os import PathLike
4
-
5
- from prefect._vendor.starlette.background import BackgroundTask
6
- from prefect._vendor.starlette.datastructures import URL
7
- from prefect._vendor.starlette.requests import Request
8
- from prefect._vendor.starlette.responses import HTMLResponse
9
- from prefect._vendor.starlette.types import Receive, Scope, Send
10
-
11
- try:
12
- import jinja2
13
-
14
- # @contextfunction was renamed to @pass_context in Jinja 3.0, and was removed in 3.1
15
- # hence we try to get pass_context (most installs will be >=3.1)
16
- # and fall back to contextfunction,
17
- # adding a type ignore for mypy to let us access an attribute that may not exist
18
- if hasattr(jinja2, "pass_context"):
19
- pass_context = jinja2.pass_context
20
- else: # pragma: nocover
21
- pass_context = jinja2.contextfunction # type: ignore[attr-defined]
22
- except ModuleNotFoundError: # pragma: nocover
23
- jinja2 = None # type: ignore[assignment]
24
-
25
-
26
- class _TemplateResponse(HTMLResponse):
27
- def __init__(
28
- self,
29
- template: typing.Any,
30
- context: typing.Dict[str, typing.Any],
31
- status_code: int = 200,
32
- headers: typing.Optional[typing.Mapping[str, str]] = None,
33
- media_type: typing.Optional[str] = None,
34
- background: typing.Optional[BackgroundTask] = None,
35
- ):
36
- self.template = template
37
- self.context = context
38
- content = template.render(context)
39
- super().__init__(content, status_code, headers, media_type, background)
40
-
41
- async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
42
- request = self.context.get("request", {})
43
- extensions = request.get("extensions", {})
44
- if "http.response.debug" in extensions:
45
- await send(
46
- {
47
- "type": "http.response.debug",
48
- "info": {
49
- "template": self.template,
50
- "context": self.context,
51
- },
52
- }
53
- )
54
- await super().__call__(scope, receive, send)
55
-
56
-
57
- class Jinja2Templates:
58
- """
59
- templates = Jinja2Templates("templates")
60
-
61
- return templates.TemplateResponse("index.html", {"request": request})
62
- """
63
-
64
- @typing.overload
65
- def __init__(
66
- self,
67
- directory: "typing.Union[str, PathLike[typing.AnyStr], typing.Sequence[typing.Union[str, PathLike[typing.AnyStr]]]]", # noqa: E501
68
- *,
69
- context_processors: typing.Optional[
70
- typing.List[typing.Callable[[Request], typing.Dict[str, typing.Any]]]
71
- ] = None,
72
- **env_options: typing.Any,
73
- ) -> None:
74
- ...
75
-
76
- @typing.overload
77
- def __init__(
78
- self,
79
- *,
80
- env: "jinja2.Environment",
81
- context_processors: typing.Optional[
82
- typing.List[typing.Callable[[Request], typing.Dict[str, typing.Any]]]
83
- ] = None,
84
- ) -> None:
85
- ...
86
-
87
- def __init__(
88
- self,
89
- directory: "typing.Union[str, PathLike[typing.AnyStr], typing.Sequence[typing.Union[str, PathLike[typing.AnyStr]]], None]" = None, # noqa: E501
90
- *,
91
- context_processors: typing.Optional[
92
- typing.List[typing.Callable[[Request], typing.Dict[str, typing.Any]]]
93
- ] = None,
94
- env: typing.Optional["jinja2.Environment"] = None,
95
- **env_options: typing.Any,
96
- ) -> None:
97
- if env_options:
98
- warnings.warn(
99
- "Extra environment options are deprecated. Use a preconfigured jinja2.Environment instead.", # noqa: E501
100
- DeprecationWarning,
101
- )
102
- assert jinja2 is not None, "jinja2 must be installed to use Jinja2Templates"
103
- assert directory or env, "either 'directory' or 'env' arguments must be passed"
104
- self.context_processors = context_processors or []
105
- if directory is not None:
106
- self.env = self._create_env(directory, **env_options)
107
- elif env is not None:
108
- self.env = env
109
-
110
- self._setup_env_defaults(self.env)
111
-
112
- def _create_env(
113
- self,
114
- directory: "typing.Union[str, PathLike[typing.AnyStr], typing.Sequence[typing.Union[str, PathLike[typing.AnyStr]]]]", # noqa: E501
115
- **env_options: typing.Any,
116
- ) -> "jinja2.Environment":
117
- loader = jinja2.FileSystemLoader(directory)
118
- env_options.setdefault("loader", loader)
119
- env_options.setdefault("autoescape", True)
120
-
121
- return jinja2.Environment(**env_options)
122
-
123
- def _setup_env_defaults(self, env: "jinja2.Environment") -> None:
124
- @pass_context
125
- def url_for(
126
- context: typing.Dict[str, typing.Any],
127
- name: str,
128
- /,
129
- **path_params: typing.Any,
130
- ) -> URL:
131
- request: Request = context["request"]
132
- return request.url_for(name, **path_params)
133
-
134
- env.globals.setdefault("url_for", url_for)
135
-
136
- def get_template(self, name: str) -> "jinja2.Template":
137
- return self.env.get_template(name)
138
-
139
- @typing.overload
140
- def TemplateResponse(
141
- self,
142
- request: Request,
143
- name: str,
144
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
145
- status_code: int = 200,
146
- headers: typing.Optional[typing.Mapping[str, str]] = None,
147
- media_type: typing.Optional[str] = None,
148
- background: typing.Optional[BackgroundTask] = None,
149
- ) -> _TemplateResponse:
150
- ...
151
-
152
- @typing.overload
153
- def TemplateResponse(
154
- self,
155
- name: str,
156
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
157
- status_code: int = 200,
158
- headers: typing.Optional[typing.Mapping[str, str]] = None,
159
- media_type: typing.Optional[str] = None,
160
- background: typing.Optional[BackgroundTask] = None,
161
- ) -> _TemplateResponse:
162
- # Deprecated usage
163
- ...
164
-
165
- def TemplateResponse(
166
- self, *args: typing.Any, **kwargs: typing.Any
167
- ) -> _TemplateResponse:
168
- if args:
169
- if isinstance(
170
- args[0], str
171
- ): # the first argument is template name (old style)
172
- warnings.warn(
173
- "The `name` is not the first parameter anymore. "
174
- "The first parameter should be the `Request` instance.\n"
175
- 'Replace `TemplateResponse(name, {"request": request})` by `TemplateResponse(request, name)`.', # noqa: E501
176
- DeprecationWarning,
177
- )
178
-
179
- name = args[0]
180
- context = args[1] if len(args) > 1 else kwargs.get("context", {})
181
- status_code = (
182
- args[2] if len(args) > 2 else kwargs.get("status_code", 200)
183
- )
184
- headers = args[2] if len(args) > 2 else kwargs.get("headers")
185
- media_type = args[3] if len(args) > 3 else kwargs.get("media_type")
186
- background = args[4] if len(args) > 4 else kwargs.get("background")
187
-
188
- if "request" not in context:
189
- raise ValueError('context must include a "request" key')
190
- request = context["request"]
191
- else: # the first argument is a request instance (new style)
192
- request = args[0]
193
- name = args[1] if len(args) > 1 else kwargs["name"]
194
- context = args[2] if len(args) > 2 else kwargs.get("context", {})
195
- status_code = (
196
- args[3] if len(args) > 3 else kwargs.get("status_code", 200)
197
- )
198
- headers = args[4] if len(args) > 4 else kwargs.get("headers")
199
- media_type = args[5] if len(args) > 5 else kwargs.get("media_type")
200
- background = args[6] if len(args) > 6 else kwargs.get("background")
201
- else: # all arguments are kwargs
202
- if "request" not in kwargs:
203
- warnings.warn(
204
- "The `TemplateResponse` now requires the `request` argument.\n"
205
- 'Replace `TemplateResponse(name, {"context": context})` by `TemplateResponse(request, name)`.', # noqa: E501
206
- DeprecationWarning,
207
- )
208
- if "request" not in kwargs.get("context", {}):
209
- raise ValueError('context must include a "request" key')
210
-
211
- context = kwargs.get("context", {})
212
- request = kwargs.get("request", context.get("request"))
213
- name = typing.cast(str, kwargs["name"])
214
- status_code = kwargs.get("status_code", 200)
215
- headers = kwargs.get("headers")
216
- media_type = kwargs.get("media_type")
217
- background = kwargs.get("background")
218
-
219
- context.setdefault("request", request)
220
- for context_processor in self.context_processors:
221
- context.update(context_processor(request))
222
-
223
- template = self.get_template(name)
224
- return _TemplateResponse(
225
- template,
226
- context,
227
- status_code=status_code,
228
- headers=headers,
229
- media_type=media_type,
230
- background=background,
231
- )