prefect-client 2.19.2__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 +151 -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 +307 -166
  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 +19 -15
  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 +311 -43
  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 +97 -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.2.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.2.dist-info/RECORD +0 -292
  237. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/LICENSE +0 -0
  238. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/WHEEL +0 -0
  239. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,289 +0,0 @@
1
- """
2
- DEPRECATION WARNING:
3
-
4
- This module is deprecated as of March 2024 and will not be available after September 2024.
5
- It has been replaced by the process worker from the `prefect.workers` module, which offers enhanced functionality and better performance.
6
-
7
- For upgrade instructions, see https://docs.prefect.io/latest/guides/upgrade-guide-agents-to-workers/.
8
- """
9
-
10
- import contextlib
11
- import os
12
- import shlex
13
- import signal
14
- import socket
15
- import subprocess
16
- import sys
17
- import tempfile
18
- from pathlib import Path
19
- from typing import Dict, Tuple, Union
20
-
21
- import anyio
22
- import anyio.abc
23
-
24
- from prefect._internal.compatibility.deprecated import deprecated_class
25
- from prefect._internal.pydantic import HAS_PYDANTIC_V2
26
-
27
- if HAS_PYDANTIC_V2:
28
- from pydantic.v1 import Field
29
- else:
30
- from pydantic import Field
31
-
32
- from typing_extensions import Literal
33
-
34
- from prefect.exceptions import InfrastructureNotAvailable, InfrastructureNotFound
35
- from prefect.infrastructure.base import Infrastructure, InfrastructureResult
36
- from prefect.utilities.asyncutils import sync_compatible
37
- from prefect.utilities.processutils import get_sys_executable, run_process
38
-
39
- if sys.platform == "win32":
40
- # exit code indicating that the process was terminated by Ctrl+C or Ctrl+Break
41
- STATUS_CONTROL_C_EXIT = 0xC000013A
42
-
43
-
44
- def _infrastructure_pid_from_process(process: anyio.abc.Process) -> str:
45
- hostname = socket.gethostname()
46
- return f"{hostname}:{process.pid}"
47
-
48
-
49
- def _parse_infrastructure_pid(infrastructure_pid: str) -> Tuple[str, int]:
50
- hostname, pid = infrastructure_pid.split(":")
51
- return hostname, int(pid)
52
-
53
-
54
- @deprecated_class(
55
- start_date="Mar 2024",
56
- help="Use the process worker instead."
57
- " Refer to the upgrade guide for more information:"
58
- " https://docs.prefect.io/latest/guides/upgrade-guide-agents-to-workers/.",
59
- )
60
- class Process(Infrastructure):
61
- """
62
- Run a command in a new process.
63
-
64
- Current environment variables and Prefect settings will be included in the created
65
- process. Configured environment variables will override any current environment
66
- variables.
67
-
68
- Attributes:
69
- command: A list of strings specifying the command to run in the container to
70
- start the flow run. In most cases you should not override this.
71
- env: Environment variables to set for the new process.
72
- labels: Labels for the process. Labels are for metadata purposes only and
73
- cannot be attached to the process itself.
74
- name: A name for the process. For display purposes only.
75
- stream_output: Whether to stream output to local stdout.
76
- working_dir: Working directory where the process should be opened. If not set,
77
- a tmp directory will be used.
78
- """
79
-
80
- _logo_url = "https://cdn.sanity.io/images/3ugk85nk/production/356e6766a91baf20e1d08bbe16e8b5aaef4d8643-48x48.png"
81
- _documentation_url = "https://docs.prefect.io/concepts/infrastructure/#process"
82
-
83
- type: Literal["process"] = Field(
84
- default="process", description="The type of infrastructure."
85
- )
86
- stream_output: bool = Field(
87
- default=True,
88
- description=(
89
- "If set, output will be streamed from the process to local standard output."
90
- ),
91
- )
92
- working_dir: Union[str, Path, None] = Field(
93
- default=None,
94
- description=(
95
- "If set, the process will open within the specified path as the working"
96
- " directory. Otherwise, a temporary directory will be created."
97
- ),
98
- ) # Underlying accepted types are str, bytes, PathLike[str], None
99
-
100
- @sync_compatible
101
- async def run(
102
- self,
103
- task_status: anyio.abc.TaskStatus = None,
104
- ) -> "ProcessResult":
105
- if not self.command:
106
- raise ValueError("Process cannot be run with empty command.")
107
-
108
- display_name = f" {self.name!r}" if self.name else ""
109
-
110
- # Open a subprocess to execute the flow run
111
- self.logger.info(f"Opening process{display_name}...")
112
- working_dir_ctx = (
113
- tempfile.TemporaryDirectory(suffix="prefect")
114
- if not self.working_dir
115
- else contextlib.nullcontext(self.working_dir)
116
- )
117
- with working_dir_ctx as working_dir:
118
- self.logger.debug(
119
- f"Process{display_name} running command: {' '.join(self.command)} in"
120
- f" {working_dir}"
121
- )
122
-
123
- # We must add creationflags to a dict so it is only passed as a function
124
- # parameter on Windows, because the presence of creationflags causes
125
- # errors on Unix even if set to None
126
- kwargs: Dict[str, object] = {}
127
- if sys.platform == "win32":
128
- kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP
129
-
130
- process = await run_process(
131
- self.command,
132
- stream_output=self.stream_output,
133
- task_status=task_status,
134
- task_status_handler=_infrastructure_pid_from_process,
135
- env=self._get_environment_variables(),
136
- cwd=working_dir,
137
- **kwargs,
138
- )
139
-
140
- # Use the pid for display if no name was given
141
- display_name = display_name or f" {process.pid}"
142
-
143
- if process.returncode:
144
- help_message = None
145
- if process.returncode == -9:
146
- help_message = (
147
- "This indicates that the process exited due to a SIGKILL signal. "
148
- "Typically, this is either caused by manual cancellation or "
149
- "high memory usage causing the operating system to "
150
- "terminate the process."
151
- )
152
- if process.returncode == -15:
153
- help_message = (
154
- "This indicates that the process exited due to a SIGTERM signal. "
155
- "Typically, this is caused by manual cancellation."
156
- )
157
- elif process.returncode == 247:
158
- help_message = (
159
- "This indicates that the process was terminated due to high "
160
- "memory usage."
161
- )
162
- elif (
163
- sys.platform == "win32" and process.returncode == STATUS_CONTROL_C_EXIT
164
- ):
165
- help_message = (
166
- "Process was terminated due to a Ctrl+C or Ctrl+Break signal. "
167
- "Typically, this is caused by manual cancellation."
168
- )
169
-
170
- self.logger.error(
171
- f"Process{display_name} exited with status code: {process.returncode}"
172
- + (f"; {help_message}" if help_message else "")
173
- )
174
- else:
175
- self.logger.info(f"Process{display_name} exited cleanly.")
176
-
177
- return ProcessResult(
178
- status_code=process.returncode, identifier=str(process.pid)
179
- )
180
-
181
- async def kill(self, infrastructure_pid: str, grace_seconds: int = 30):
182
- hostname, pid = _parse_infrastructure_pid(infrastructure_pid)
183
-
184
- if hostname != socket.gethostname():
185
- raise InfrastructureNotAvailable(
186
- f"Unable to kill process {pid!r}: The process is running on a different"
187
- f" host {hostname!r}."
188
- )
189
-
190
- # In a non-windows environment first send a SIGTERM, then, after
191
- # `grace_seconds` seconds have passed subsequent send SIGKILL. In
192
- # Windows we use CTRL_BREAK_EVENT as SIGTERM is useless:
193
- # https://bugs.python.org/issue26350
194
- if sys.platform == "win32":
195
- try:
196
- os.kill(pid, signal.CTRL_BREAK_EVENT)
197
- except (ProcessLookupError, WindowsError):
198
- raise InfrastructureNotFound(
199
- f"Unable to kill process {pid!r}: The process was not found."
200
- )
201
- else:
202
- try:
203
- os.kill(pid, signal.SIGTERM)
204
- except ProcessLookupError:
205
- raise InfrastructureNotFound(
206
- f"Unable to kill process {pid!r}: The process was not found."
207
- )
208
-
209
- # Throttle how often we check if the process is still alive to keep
210
- # from making too many system calls in a short period of time.
211
- check_interval = max(grace_seconds / 10, 1)
212
-
213
- with anyio.move_on_after(grace_seconds):
214
- while True:
215
- await anyio.sleep(check_interval)
216
-
217
- # Detect if the process is still alive. If not do an early
218
- # return as the process respected the SIGTERM from above.
219
- try:
220
- os.kill(pid, 0)
221
- except ProcessLookupError:
222
- return
223
-
224
- try:
225
- os.kill(pid, signal.SIGKILL)
226
- except OSError:
227
- # We shouldn't ever end up here, but it's possible that the
228
- # process ended right after the check above.
229
- return
230
-
231
- def preview(self):
232
- environment = self._get_environment_variables(include_os_environ=False)
233
- return " \\\n".join(
234
- [f"{key}={value}" for key, value in environment.items()]
235
- + [" ".join(self.command)]
236
- )
237
-
238
- def _get_environment_variables(self, include_os_environ: bool = True):
239
- os_environ = os.environ if include_os_environ else {}
240
- # The base environment must override the current environment or
241
- # the Prefect settings context may not be respected
242
- env = {**os_environ, **self._base_environment(), **self.env}
243
-
244
- # Drop null values allowing users to "unset" variables
245
- return {key: value for key, value in env.items() if value is not None}
246
-
247
- def _base_flow_run_command(self):
248
- return [get_sys_executable(), "-m", "prefect.engine"]
249
-
250
- def get_corresponding_worker_type(self):
251
- return "process"
252
-
253
- async def generate_work_pool_base_job_template(self):
254
- from prefect.workers.utilities import (
255
- get_default_base_job_template_for_infrastructure_type,
256
- )
257
-
258
- base_job_template = await get_default_base_job_template_for_infrastructure_type(
259
- self.get_corresponding_worker_type(),
260
- )
261
- assert (
262
- base_job_template is not None
263
- ), "Failed to generate default base job template for Process worker."
264
- for key, value in self.dict(exclude_unset=True, exclude_defaults=True).items():
265
- if key == "command":
266
- base_job_template["variables"]["properties"]["command"][
267
- "default"
268
- ] = shlex.join(value)
269
- elif key in [
270
- "type",
271
- "block_type_slug",
272
- "_block_document_id",
273
- "_block_document_name",
274
- "_is_anonymous",
275
- ]:
276
- continue
277
- elif key in base_job_template["variables"]["properties"]:
278
- base_job_template["variables"]["properties"][key]["default"] = value
279
- else:
280
- self.logger.warning(
281
- f"Variable {key!r} is not supported by Process work pools."
282
- " Skipping."
283
- )
284
-
285
- return base_job_template
286
-
287
-
288
- class ProcessResult(InfrastructureResult):
289
- """Contains information about the final state of a completed process"""