prefect-client 3.3.5.dev3__py3-none-any.whl → 3.3.6__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.
- prefect/_build_info.py +3 -3
- prefect/_experimental/{bundles.py → bundles/__init__.py} +39 -11
- prefect/_experimental/bundles/execute.py +34 -0
- prefect/_versioning.py +180 -0
- prefect/cache_policies.py +4 -4
- prefect/client/orchestration/_deployments/client.py +49 -22
- prefect/concurrency/context.py +3 -1
- prefect/context.py +1 -3
- prefect/deployments/runner.py +22 -6
- prefect/events/clients.py +1 -1
- prefect/flows.py +240 -1
- prefect/futures.py +54 -21
- prefect/runner/runner.py +8 -3
- prefect/server/api/deployments.py +41 -3
- prefect/utilities/_ast.py +117 -0
- prefect/workers/base.py +193 -7
- prefect/workers/process.py +60 -3
- {prefect_client-3.3.5.dev3.dist-info → prefect_client-3.3.6.dist-info}/METADATA +2 -2
- {prefect_client-3.3.5.dev3.dist-info → prefect_client-3.3.6.dist-info}/RECORD +21 -18
- {prefect_client-3.3.5.dev3.dist-info → prefect_client-3.3.6.dist-info}/WHEEL +0 -0
- {prefect_client-3.3.5.dev3.dist-info → prefect_client-3.3.6.dist-info}/licenses/LICENSE +0 -0
prefect/workers/base.py
CHANGED
@@ -3,7 +3,11 @@ from __future__ import annotations
|
|
3
3
|
import abc
|
4
4
|
import asyncio
|
5
5
|
import datetime
|
6
|
+
import json
|
7
|
+
import subprocess
|
8
|
+
import tempfile
|
6
9
|
import threading
|
10
|
+
import uuid
|
7
11
|
import warnings
|
8
12
|
from contextlib import AsyncExitStack
|
9
13
|
from functools import partial
|
@@ -21,6 +25,7 @@ from zoneinfo import ZoneInfo
|
|
21
25
|
import anyio
|
22
26
|
import anyio.abc
|
23
27
|
import httpx
|
28
|
+
from exceptiongroup import BaseExceptionGroup, ExceptionGroup
|
24
29
|
from importlib_metadata import (
|
25
30
|
distributions, # type: ignore[reportUnknownVariableType] incomplete typing
|
26
31
|
)
|
@@ -35,6 +40,7 @@ from prefect._internal.schemas.validators import return_v_or_none
|
|
35
40
|
from prefect.client.base import ServerType
|
36
41
|
from prefect.client.orchestration import PrefectClient, get_client
|
37
42
|
from prefect.client.schemas.actions import WorkPoolCreate, WorkPoolUpdate
|
43
|
+
from prefect.client.schemas.objects import Flow as APIFlow
|
38
44
|
from prefect.client.schemas.objects import (
|
39
45
|
Integration,
|
40
46
|
StateType,
|
@@ -42,12 +48,14 @@ from prefect.client.schemas.objects import (
|
|
42
48
|
WorkPool,
|
43
49
|
)
|
44
50
|
from prefect.client.utilities import inject_client
|
51
|
+
from prefect.context import FlowRunContext, TagsContext
|
45
52
|
from prefect.events import Event, RelatedResource, emit_event
|
46
53
|
from prefect.events.related import object_as_related_resource, tags_as_related_resources
|
47
54
|
from prefect.exceptions import (
|
48
55
|
Abort,
|
49
56
|
ObjectNotFound,
|
50
57
|
)
|
58
|
+
from prefect.futures import PrefectFlowRunFuture
|
51
59
|
from prefect.logging.loggers import (
|
52
60
|
PrefectLogAdapter,
|
53
61
|
flow_run_logger,
|
@@ -68,6 +76,7 @@ from prefect.states import (
|
|
68
76
|
Pending,
|
69
77
|
exception_to_failed_state,
|
70
78
|
)
|
79
|
+
from prefect.tasks import Task
|
71
80
|
from prefect.types import KeyValueLabels
|
72
81
|
from prefect.utilities.dispatch import get_registry_for_type, register_base_type
|
73
82
|
from prefect.utilities.engine import propose_state
|
@@ -81,11 +90,12 @@ from prefect.utilities.templating import (
|
|
81
90
|
from prefect.utilities.urls import url_for
|
82
91
|
|
83
92
|
if TYPE_CHECKING:
|
84
|
-
from prefect.client.schemas.objects import
|
93
|
+
from prefect.client.schemas.objects import FlowRun
|
85
94
|
from prefect.client.schemas.responses import (
|
86
95
|
DeploymentResponse,
|
87
96
|
WorkerFlowRunResponse,
|
88
97
|
)
|
98
|
+
from prefect.flows import Flow
|
89
99
|
|
90
100
|
|
91
101
|
class BaseJobConfiguration(BaseModel):
|
@@ -217,7 +227,7 @@ class BaseJobConfiguration(BaseModel):
|
|
217
227
|
self,
|
218
228
|
flow_run: "FlowRun",
|
219
229
|
deployment: "DeploymentResponse | None" = None,
|
220
|
-
flow: "
|
230
|
+
flow: "APIFlow | None" = None,
|
221
231
|
work_pool: "WorkPool | None" = None,
|
222
232
|
worker_name: str | None = None,
|
223
233
|
) -> None:
|
@@ -314,7 +324,7 @@ class BaseJobConfiguration(BaseModel):
|
|
314
324
|
return labels
|
315
325
|
|
316
326
|
@staticmethod
|
317
|
-
def _base_flow_labels(flow: "
|
327
|
+
def _base_flow_labels(flow: "APIFlow | None") -> dict[str, str]:
|
318
328
|
if flow is None:
|
319
329
|
return {}
|
320
330
|
|
@@ -418,6 +428,7 @@ class BaseWorkerResult(BaseModel, abc.ABC):
|
|
418
428
|
C = TypeVar("C", bound=BaseJobConfiguration)
|
419
429
|
V = TypeVar("V", bound=BaseVariables)
|
420
430
|
R = TypeVar("R", bound=BaseWorkerResult)
|
431
|
+
FR = TypeVar("FR") # used to capture the return type of a flow
|
421
432
|
|
422
433
|
|
423
434
|
@register_base_type
|
@@ -685,6 +696,171 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
685
696
|
"Workers must implement a method for running submitted flow runs"
|
686
697
|
)
|
687
698
|
|
699
|
+
async def submit(
|
700
|
+
self,
|
701
|
+
flow: "Flow[..., FR]",
|
702
|
+
parameters: dict[str, Any] | None = None,
|
703
|
+
job_variables: dict[str, Any] | None = None,
|
704
|
+
) -> "PrefectFlowRunFuture[FR]":
|
705
|
+
"""
|
706
|
+
EXPERIMENTAL: The interface for this method is subject to change.
|
707
|
+
|
708
|
+
Submits a flow to run via the worker.
|
709
|
+
|
710
|
+
Args:
|
711
|
+
flow: The flow to submit
|
712
|
+
parameters: The parameters to pass to the flow
|
713
|
+
|
714
|
+
Returns:
|
715
|
+
A flow run object
|
716
|
+
"""
|
717
|
+
warnings.warn(
|
718
|
+
"Ad-hoc flow submission via workers is experimental. The interface "
|
719
|
+
"and behavior of this feature are subject to change.",
|
720
|
+
category=FutureWarning,
|
721
|
+
)
|
722
|
+
if self._runs_task_group is None:
|
723
|
+
raise RuntimeError("Worker not properly initialized")
|
724
|
+
|
725
|
+
from prefect.results import get_result_store
|
726
|
+
|
727
|
+
current_result_store = get_result_store()
|
728
|
+
if current_result_store.result_storage is None and flow.result_storage is None:
|
729
|
+
self._logger.warning(
|
730
|
+
f"Flow {flow.name!r} has no result storage configured. Please configure "
|
731
|
+
"result storage for the flow if you want to retrieve the result for the flow run."
|
732
|
+
)
|
733
|
+
|
734
|
+
flow_run = await self._runs_task_group.start(
|
735
|
+
partial(
|
736
|
+
self._submit_adhoc_run,
|
737
|
+
flow=flow,
|
738
|
+
parameters=parameters,
|
739
|
+
job_variables=job_variables,
|
740
|
+
),
|
741
|
+
)
|
742
|
+
return PrefectFlowRunFuture(flow_run_id=flow_run.id)
|
743
|
+
|
744
|
+
async def _submit_adhoc_run(
|
745
|
+
self,
|
746
|
+
flow: "Flow[..., FR]",
|
747
|
+
parameters: dict[str, Any] | None = None,
|
748
|
+
job_variables: dict[str, Any] | None = None,
|
749
|
+
task_status: anyio.abc.TaskStatus["FlowRun"] | None = None,
|
750
|
+
):
|
751
|
+
"""
|
752
|
+
Submits a flow run to the Kubernetes worker.
|
753
|
+
"""
|
754
|
+
from prefect._experimental.bundles import (
|
755
|
+
convert_step_to_command,
|
756
|
+
create_bundle_for_flow_run,
|
757
|
+
)
|
758
|
+
|
759
|
+
if (
|
760
|
+
self.work_pool.storage_configuration.bundle_upload_step is None
|
761
|
+
or self.work_pool.storage_configuration.bundle_execution_step is None
|
762
|
+
):
|
763
|
+
raise RuntimeError(
|
764
|
+
f"Storage is not configured for work pool {self.work_pool.name!r}. "
|
765
|
+
"Please configure storage for the work pool by running `prefect "
|
766
|
+
"work-pool storage configure`."
|
767
|
+
)
|
768
|
+
|
769
|
+
bundle_key = str(uuid.uuid4())
|
770
|
+
upload_command = convert_step_to_command(
|
771
|
+
self.work_pool.storage_configuration.bundle_upload_step,
|
772
|
+
bundle_key,
|
773
|
+
quiet=True,
|
774
|
+
)
|
775
|
+
execute_command = convert_step_to_command(
|
776
|
+
self.work_pool.storage_configuration.bundle_execution_step, bundle_key
|
777
|
+
)
|
778
|
+
|
779
|
+
job_variables = (job_variables or {}) | {"command": " ".join(execute_command)}
|
780
|
+
parameters = parameters or {}
|
781
|
+
parent_task_run = None
|
782
|
+
|
783
|
+
if flow_run_ctx := FlowRunContext.get():
|
784
|
+
parent_task = Task[Any, Any](
|
785
|
+
name=flow.name,
|
786
|
+
fn=flow.fn,
|
787
|
+
version=flow.version,
|
788
|
+
)
|
789
|
+
parent_task_run = await parent_task.create_run(
|
790
|
+
flow_run_context=flow_run_ctx,
|
791
|
+
parameters=parameters,
|
792
|
+
)
|
793
|
+
|
794
|
+
flow_run = await self.client.create_flow_run(
|
795
|
+
flow,
|
796
|
+
parameters=flow.serialize_parameters(parameters),
|
797
|
+
state=Pending(),
|
798
|
+
job_variables=job_variables,
|
799
|
+
work_pool_name=self.work_pool.name,
|
800
|
+
tags=TagsContext.get().current_tags,
|
801
|
+
parent_task_run_id=getattr(parent_task_run, "id", None),
|
802
|
+
)
|
803
|
+
if task_status is not None:
|
804
|
+
# Emit the flow run object to .submit to allow it to return a future as soon as possible
|
805
|
+
task_status.started(flow_run)
|
806
|
+
# Avoid an API call to get the flow
|
807
|
+
api_flow = APIFlow(id=flow_run.flow_id, name=flow.name, labels={})
|
808
|
+
logger = self.get_flow_run_logger(flow_run)
|
809
|
+
|
810
|
+
configuration = await self.job_configuration.from_template_and_values(
|
811
|
+
base_job_template=self.work_pool.base_job_template,
|
812
|
+
values=job_variables,
|
813
|
+
client=self._client,
|
814
|
+
)
|
815
|
+
configuration.prepare_for_flow_run(
|
816
|
+
flow_run=flow_run,
|
817
|
+
flow=api_flow,
|
818
|
+
work_pool=self.work_pool,
|
819
|
+
worker_name=self.name,
|
820
|
+
)
|
821
|
+
|
822
|
+
bundle = create_bundle_for_flow_run(flow=flow, flow_run=flow_run)
|
823
|
+
|
824
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
825
|
+
await (
|
826
|
+
anyio.Path(temp_dir)
|
827
|
+
.joinpath(bundle_key)
|
828
|
+
.write_bytes(json.dumps(bundle).encode("utf-8"))
|
829
|
+
)
|
830
|
+
|
831
|
+
try:
|
832
|
+
full_command = upload_command + [bundle_key]
|
833
|
+
logger.debug(
|
834
|
+
"Uploading execution bundle with command: %s", full_command
|
835
|
+
)
|
836
|
+
await anyio.run_process(
|
837
|
+
full_command,
|
838
|
+
cwd=temp_dir,
|
839
|
+
)
|
840
|
+
except subprocess.CalledProcessError as e:
|
841
|
+
raise RuntimeError(e.stderr.decode("utf-8")) from e
|
842
|
+
|
843
|
+
logger.debug("Successfully uploaded execution bundle")
|
844
|
+
|
845
|
+
try:
|
846
|
+
result = await self.run(flow_run, configuration)
|
847
|
+
|
848
|
+
if result.status_code != 0:
|
849
|
+
await self._propose_crashed_state(
|
850
|
+
flow_run,
|
851
|
+
(
|
852
|
+
"Flow run infrastructure exited with non-zero status code"
|
853
|
+
f" {result.status_code}."
|
854
|
+
),
|
855
|
+
)
|
856
|
+
except Exception as exc:
|
857
|
+
# This flow run was being submitted and did not start successfully
|
858
|
+
logger.exception(
|
859
|
+
f"Failed to submit flow run '{flow_run.id}' to infrastructure."
|
860
|
+
)
|
861
|
+
message = f"Flow run could not be submitted to infrastructure:\n{exc!r}"
|
862
|
+
await self._propose_crashed_state(flow_run, message, client=self.client)
|
863
|
+
|
688
864
|
@classmethod
|
689
865
|
def __dispatch_key__(cls) -> str | None:
|
690
866
|
if cls.__name__ == "BaseWorker":
|
@@ -1230,11 +1406,13 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
1230
1406
|
exc_info=True,
|
1231
1407
|
)
|
1232
1408
|
|
1233
|
-
async def _propose_crashed_state(
|
1409
|
+
async def _propose_crashed_state(
|
1410
|
+
self, flow_run: "FlowRun", message: str, client: PrefectClient | None = None
|
1411
|
+
) -> None:
|
1234
1412
|
run_logger = self.get_flow_run_logger(flow_run)
|
1235
1413
|
try:
|
1236
1414
|
state = await propose_state(
|
1237
|
-
self.client,
|
1415
|
+
client or self.client,
|
1238
1416
|
Crashed(message=message),
|
1239
1417
|
flow_run_id=flow_run.id,
|
1240
1418
|
)
|
@@ -1345,8 +1523,16 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
1345
1523
|
return self
|
1346
1524
|
|
1347
1525
|
async def __aexit__(self, *exc_info: Any) -> None:
|
1348
|
-
|
1349
|
-
|
1526
|
+
try:
|
1527
|
+
self._logger.debug("Exiting worker context...")
|
1528
|
+
await self.teardown(*exc_info)
|
1529
|
+
except (ExceptionGroup, BaseExceptionGroup) as exc:
|
1530
|
+
# For less verbose tracebacks
|
1531
|
+
exceptions = exc.exceptions
|
1532
|
+
if len(exceptions) == 1:
|
1533
|
+
raise exceptions[0] from None
|
1534
|
+
else:
|
1535
|
+
raise
|
1350
1536
|
|
1351
1537
|
def __repr__(self) -> str:
|
1352
1538
|
return f"Worker(pool={self._work_pool_name!r}, name={self.name!r})"
|
prefect/workers/process.py
CHANGED
@@ -22,15 +22,17 @@ import tempfile
|
|
22
22
|
import threading
|
23
23
|
from functools import partial
|
24
24
|
from pathlib import Path
|
25
|
-
from typing import TYPE_CHECKING, Any, Callable, Optional
|
25
|
+
from typing import TYPE_CHECKING, Any, Callable, Optional, TypeVar
|
26
26
|
|
27
27
|
import anyio
|
28
28
|
import anyio.abc
|
29
29
|
from pydantic import Field, field_validator
|
30
30
|
|
31
31
|
from prefect._internal.schemas.validators import validate_working_dir
|
32
|
+
from prefect.client.schemas.objects import Flow as APIFlow
|
32
33
|
from prefect.runner.runner import Runner
|
33
34
|
from prefect.settings import PREFECT_WORKER_QUERY_SECONDS
|
35
|
+
from prefect.states import Pending
|
34
36
|
from prefect.utilities.processutils import get_sys_executable
|
35
37
|
from prefect.utilities.services import critical_service_loop
|
36
38
|
from prefect.workers.base import (
|
@@ -41,8 +43,11 @@ from prefect.workers.base import (
|
|
41
43
|
)
|
42
44
|
|
43
45
|
if TYPE_CHECKING:
|
44
|
-
from prefect.client.schemas.objects import
|
46
|
+
from prefect.client.schemas.objects import FlowRun, WorkPool
|
45
47
|
from prefect.client.schemas.responses import DeploymentResponse
|
48
|
+
from prefect.flows import Flow
|
49
|
+
|
50
|
+
FR = TypeVar("FR") # used to capture the return type of a flow
|
46
51
|
|
47
52
|
|
48
53
|
class ProcessJobConfiguration(BaseJobConfiguration):
|
@@ -60,7 +65,7 @@ class ProcessJobConfiguration(BaseJobConfiguration):
|
|
60
65
|
self,
|
61
66
|
flow_run: "FlowRun",
|
62
67
|
deployment: "DeploymentResponse | None" = None,
|
63
|
-
flow: "
|
68
|
+
flow: "APIFlow | None" = None,
|
64
69
|
work_pool: "WorkPool | None" = None,
|
65
70
|
worker_name: str | None = None,
|
66
71
|
) -> None:
|
@@ -231,6 +236,58 @@ class ProcessWorker(
|
|
231
236
|
status_code=process.returncode, identifier=str(process.pid)
|
232
237
|
)
|
233
238
|
|
239
|
+
async def _submit_adhoc_run(
|
240
|
+
self,
|
241
|
+
flow: "Flow[..., FR]",
|
242
|
+
parameters: dict[str, Any] | None = None,
|
243
|
+
job_variables: dict[str, Any] | None = None,
|
244
|
+
task_status: anyio.abc.TaskStatus["FlowRun"] | None = None,
|
245
|
+
):
|
246
|
+
from prefect._experimental.bundles import (
|
247
|
+
create_bundle_for_flow_run,
|
248
|
+
)
|
249
|
+
|
250
|
+
flow_run = await self.client.create_flow_run(
|
251
|
+
flow,
|
252
|
+
parameters=parameters,
|
253
|
+
state=Pending(),
|
254
|
+
job_variables=job_variables,
|
255
|
+
work_pool_name=self.work_pool.name,
|
256
|
+
)
|
257
|
+
if task_status is not None:
|
258
|
+
# Emit the flow run object to .submit to allow it to return a future as soon as possible
|
259
|
+
task_status.started(flow_run)
|
260
|
+
|
261
|
+
api_flow = APIFlow(id=flow_run.flow_id, name=flow.name, labels={})
|
262
|
+
logger = self.get_flow_run_logger(flow_run)
|
263
|
+
|
264
|
+
configuration = await self.job_configuration.from_template_and_values(
|
265
|
+
base_job_template=self.work_pool.base_job_template,
|
266
|
+
values=job_variables or {},
|
267
|
+
client=self._client,
|
268
|
+
)
|
269
|
+
configuration.prepare_for_flow_run(
|
270
|
+
flow_run=flow_run,
|
271
|
+
flow=api_flow,
|
272
|
+
work_pool=self.work_pool,
|
273
|
+
worker_name=self.name,
|
274
|
+
)
|
275
|
+
|
276
|
+
bundle = create_bundle_for_flow_run(flow=flow, flow_run=flow_run)
|
277
|
+
|
278
|
+
logger.debug("Executing flow run bundle in subprocess...")
|
279
|
+
try:
|
280
|
+
await self._runner.execute_bundle(
|
281
|
+
bundle=bundle,
|
282
|
+
cwd=configuration.working_dir,
|
283
|
+
env=configuration.env,
|
284
|
+
)
|
285
|
+
except Exception:
|
286
|
+
logger.exception("Error executing flow run bundle in subprocess")
|
287
|
+
await self._propose_crashed_state(flow_run, "Flow run execution failed")
|
288
|
+
finally:
|
289
|
+
logger.debug("Flow run bundle execution complete")
|
290
|
+
|
234
291
|
async def __aenter__(self) -> ProcessWorker:
|
235
292
|
await super().__aenter__()
|
236
293
|
self._runner = await self._exit_stack.enter_async_context(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: prefect-client
|
3
|
-
Version: 3.3.
|
3
|
+
Version: 3.3.6
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
|
6
6
|
Project-URL: Documentation, https://docs.prefect.io
|
@@ -47,7 +47,7 @@ Requires-Dist: prometheus-client>=0.20.0
|
|
47
47
|
Requires-Dist: pydantic!=2.10.0,<3.0.0,>=2.9
|
48
48
|
Requires-Dist: pydantic-core<3.0.0,>=2.12.0
|
49
49
|
Requires-Dist: pydantic-extra-types<3.0.0,>=2.8.2
|
50
|
-
Requires-Dist: pydantic-settings
|
50
|
+
Requires-Dist: pydantic-settings!=2.9.0,<3.0.0,>2.2.1
|
51
51
|
Requires-Dist: python-dateutil<3.0.0,>=2.8.2
|
52
52
|
Requires-Dist: python-slugify<9.0,>=5.0
|
53
53
|
Requires-Dist: python-socks[asyncio]<3.0,>=2.5.3
|
@@ -1,21 +1,22 @@
|
|
1
1
|
prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
|
2
2
|
prefect/__init__.py,sha256=iCdcC5ZmeewikCdnPEP6YBAjPNV5dvfxpYCTpw30Hkw,3685
|
3
3
|
prefect/__main__.py,sha256=WFjw3kaYJY6pOTA7WDOgqjsz8zUEUZHCcj3P5wyVa-g,66
|
4
|
-
prefect/_build_info.py,sha256=
|
4
|
+
prefect/_build_info.py,sha256=OD-rnD9CpXpPYNn3bk6Wp8dfxfSjgkDcwGroH4wbFic,180
|
5
5
|
prefect/_result_records.py,sha256=S6QmsODkehGVSzbMm6ig022PYbI6gNKz671p_8kBYx4,7789
|
6
|
+
prefect/_versioning.py,sha256=Bm2EwEODvMe_kLkeVXy32BaTA_4ijBZl9eFbdtXEV4w,5498
|
6
7
|
prefect/_waiters.py,sha256=Ia2ITaXdHzevtyWIgJoOg95lrEXQqNEOquHvw3T33UQ,9026
|
7
8
|
prefect/agent.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
|
8
9
|
prefect/artifacts.py,sha256=dMBUOAWnUamzjb5HSqwB5-GR2Qb-Gxee26XG5NDCUuw,22720
|
9
10
|
prefect/automations.py,sha256=ZzPxn2tINdlXTQo805V4rIlbXuNWxd7cdb3gTJxZIeY,12567
|
10
|
-
prefect/cache_policies.py,sha256=
|
11
|
-
prefect/context.py,sha256=
|
11
|
+
prefect/cache_policies.py,sha256=jH1aDW6vItTcsEytuTCrNYyjbq87IQPwdOgF0yxiUts,12749
|
12
|
+
prefect/context.py,sha256=IXS_ddSkQVFKFCQhjWk7Fwgfstfu6ITCmNeZ1beablY,23737
|
12
13
|
prefect/engine.py,sha256=uB5JN4l045i5JTlRQNT1x7MwlSiGQ5Bop2Q6jHHOgxY,3699
|
13
14
|
prefect/exceptions.py,sha256=wZLQQMRB_DyiYkeEdIC5OKwbba5A94Dlnics-lrWI7A,11581
|
14
15
|
prefect/filesystems.py,sha256=v5YqGB4uXf9Ew2VuB9VCSkawvYMMVvEtZf7w1VmAmr8,18036
|
15
16
|
prefect/flow_engine.py,sha256=hZpTYEtwTPMtwVoTCrfD93igN7rlKeG_0kyCvdU4aYE,58876
|
16
17
|
prefect/flow_runs.py,sha256=dbHcXsOq1UsNM7vyJV9gboCTylmdUwQ_-W4NQt4R4ds,17267
|
17
|
-
prefect/flows.py,sha256=
|
18
|
-
prefect/futures.py,sha256=
|
18
|
+
prefect/flows.py,sha256=UCBwsb99wtPTGPu2PneKCfAMlMBA2GhXJb5rzMBxw1s,118041
|
19
|
+
prefect/futures.py,sha256=F4eplqRcqw5-aMNKu6-lOFOWdDNr0RGrPso4C4G02bU,24248
|
19
20
|
prefect/main.py,sha256=8V-qLB4GjEVCkGRgGXeaIk-JIXY8Z9FozcNluj4Sm9E,2589
|
20
21
|
prefect/plugins.py,sha256=FPRLR2mWVBMuOnlzeiTD9krlHONZH2rtYLD753JQDNQ,2516
|
21
22
|
prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -31,8 +32,9 @@ prefect/tasks.py,sha256=EpMw5O1B9pAFVraC0KzytMOKi8iy7ZYnKWRs7WtvogU,74742
|
|
31
32
|
prefect/transactions.py,sha256=uIoPNudzJzH6NrMJhrgr5lyh6JxOJQqT1GvrXt69yNw,26068
|
32
33
|
prefect/variables.py,sha256=dCK3vX7TbkqXZhnNT_v7rcGh3ISRqoR6pJVLpoll3Js,8342
|
33
34
|
prefect/_experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
|
-
prefect/_experimental/bundles.py,sha256=EIZc6hsjQS8V2CH1RbsxOiFeR11l1IgvhiXTSO3uDyM,6386
|
35
35
|
prefect/_experimental/lineage.py,sha256=8LssReoq7eLtQScUCu-7FCtrWoRZstXKRdpO0PxgbKg,9958
|
36
|
+
prefect/_experimental/bundles/__init__.py,sha256=9e7L7drTpHG82fnr6kuABkpk3SdqUNF-8HB2y6vD5U4,7108
|
37
|
+
prefect/_experimental/bundles/execute.py,sha256=xBwk1H1Fui1lt2G7Fgd6yDArqSmqZiYEA7Y7R4f7SDM,699
|
36
38
|
prefect/_experimental/sla/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
39
|
prefect/_experimental/sla/client.py,sha256=XTkYHFZiBy_O7RgUyGEdl9MxaHP-6fEAKBk3ksNQobU,3611
|
38
40
|
prefect/_experimental/sla/objects.py,sha256=Ja1z2XUgkklvtNTumKWWjojEM5I0L_RjdGv61sRbVP0,2834
|
@@ -98,7 +100,7 @@ prefect/client/orchestration/_blocks_types/client.py,sha256=alA4xD-yp3mycAbzMyRu
|
|
98
100
|
prefect/client/orchestration/_concurrency_limits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
101
|
prefect/client/orchestration/_concurrency_limits/client.py,sha256=r_oyY7hQbgyG1rntwe7WWcsraQHBKhk6MOPFUAHWiVc,23678
|
100
102
|
prefect/client/orchestration/_deployments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
|
-
prefect/client/orchestration/_deployments/client.py,sha256=
|
103
|
+
prefect/client/orchestration/_deployments/client.py,sha256=a_sUmznQC3lBLxXfu4hIIbszbUc28sWXtCioQoNgZPk,43876
|
102
104
|
prefect/client/orchestration/_flow_runs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
105
|
prefect/client/orchestration/_flow_runs/client.py,sha256=fjh5J-LG8tsny7BGYEvynbuGuHDAudYHpx-PamL0GYQ,32220
|
104
106
|
prefect/client/orchestration/_flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -122,7 +124,7 @@ prefect/concurrency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
122
124
|
prefect/concurrency/_asyncio.py,sha256=uHjC3vQAiznRz_ueZE1RQ4x28zTcPJPoO2MMi0J41vU,2575
|
123
125
|
prefect/concurrency/_events.py,sha256=KWHDldCWE3b5AH9eZ7kfmajvp36lRFCjCXIEx77jtKk,1825
|
124
126
|
prefect/concurrency/asyncio.py,sha256=SUnRfqwBdBGwQll7SvywugVQnVbEzePqPFcUfIcTNMs,4505
|
125
|
-
prefect/concurrency/context.py,sha256=
|
127
|
+
prefect/concurrency/context.py,sha256=kJWE2zGuoel9qiGOqHW5qnSyzV1INlsicTmeEEexoFo,1029
|
126
128
|
prefect/concurrency/services.py,sha256=U_1Y8Mm-Fd4Nvn0gxiWc_UdacdqT-vKjzex-oJpUt50,2288
|
127
129
|
prefect/concurrency/sync.py,sha256=MMRJvxK-Yzyt0WEEu95C2RaMwfLdYgYH6vejCqfSUmw,4687
|
128
130
|
prefect/concurrency/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -136,7 +138,7 @@ prefect/deployments/__init__.py,sha256=_wb7NxDKhq11z9MjYsPckmT3o6MRhGLRgCV9TmvYt
|
|
136
138
|
prefect/deployments/base.py,sha256=YY7g8MN6qzjNEjEA8wQXPxCrd47WnACIUeSRtI4nrEk,11849
|
137
139
|
prefect/deployments/deployments.py,sha256=K3Rgnpjxo_T8I8LMwlq24OKqZiZBTE8-YnPg-YGUStM,171
|
138
140
|
prefect/deployments/flow_runs.py,sha256=NYe-Bphsy6ENLqSSfywQuX5cRZt-uVgzqGmOsf3Sqw4,7643
|
139
|
-
prefect/deployments/runner.py,sha256=
|
141
|
+
prefect/deployments/runner.py,sha256=_VqbkXvPVvdyFVkRsr5emi26cJmu5-2uhtVUoE0EkNA,54805
|
140
142
|
prefect/deployments/schedules.py,sha256=2eL1-w8qXtwKVkgfUK7cuamwpKK3X6tN1QYTDa_gWxU,2190
|
141
143
|
prefect/deployments/steps/__init__.py,sha256=Dlz9VqMRyG1Gal8dj8vfGpPr0LyQhZdvcciozkK8WoY,206
|
142
144
|
prefect/deployments/steps/core.py,sha256=ulSgBFSx1lhBt1fP-UxebrernkumBDlympR6IPffV1g,6900
|
@@ -146,7 +148,7 @@ prefect/docker/__init__.py,sha256=z6wdc6UFfiBG2jb9Jk64uCWVM04JKVWeVyDWwuuon8M,52
|
|
146
148
|
prefect/docker/docker_image.py,sha256=bR_pEq5-FDxlwTj8CP_7nwZ_MiGK6KxIi8v7DRjy1Kg,3138
|
147
149
|
prefect/events/__init__.py,sha256=GtKl2bE--pJduTxelH2xy7SadlLJmmis8WR1EYixhuA,2094
|
148
150
|
prefect/events/actions.py,sha256=A7jS8bo4zWGnrt3QfSoQs0uYC1xfKXio3IfU0XtTb5s,9129
|
149
|
-
prefect/events/clients.py,sha256=
|
151
|
+
prefect/events/clients.py,sha256=c5ZTt-ZVslvDr6-OrbsWb_7XUocWptGyAuVAVtAzokY,27589
|
150
152
|
prefect/events/filters.py,sha256=2hVfzc3Rdgy0mBHDutWxT__LJY0zpVM8greWX3y6kjM,8233
|
151
153
|
prefect/events/related.py,sha256=CTeexYUmmA93V4gsR33GIFmw-SS-X_ouOpRg-oeq-BU,6672
|
152
154
|
prefect/events/utilities.py,sha256=ww34bTMENCNwcp6RhhgzG0KgXOvKGe0MKmBdSJ8NpZY,3043
|
@@ -182,7 +184,7 @@ prefect/logging/highlighters.py,sha256=BCf_LNhFInIfGPqwuu8YVrGa4wVxNc4YXo2pYgftp
|
|
182
184
|
prefect/logging/loggers.py,sha256=rwFJv0i3dhdKr25XX-xUkQy4Vv4dy18bTy366jrC0OQ,12741
|
183
185
|
prefect/logging/logging.yml,sha256=tT7gTyC4NmngFSqFkCdHaw7R0GPNPDDsTCGZQByiJAQ,3169
|
184
186
|
prefect/runner/__init__.py,sha256=pQBd9wVrUVUDUFJlgiweKSnbahoBZwqnd2O2jkhrULY,158
|
185
|
-
prefect/runner/runner.py,sha256=
|
187
|
+
prefect/runner/runner.py,sha256=jv87XyaJ89uK0VzKpMzL3HfXgKZky8JlRs-gW04no5Y,65117
|
186
188
|
prefect/runner/server.py,sha256=YRYFNoYddA9XfiTIYtudxrnD1vCX-PaOLhvyGUOb9AQ,11966
|
187
189
|
prefect/runner/storage.py,sha256=L7aSjie5L6qbXYCDqYDX3ouQ_NsNMlmfjPeaWOC-ncs,28043
|
188
190
|
prefect/runner/submit.py,sha256=qOEj-NChQ6RYFV35hHEVMTklrNmKwaGs2mR78ku9H0o,9474
|
@@ -205,7 +207,7 @@ prefect/server/api/concurrency_limits.py,sha256=E5TB2cJPIZjnxnm1pGxUJnwMDz5CS58g
|
|
205
207
|
prefect/server/api/concurrency_limits_v2.py,sha256=PGjG7W2Z65OojNTP0ezFu2z69plXo1N8paqwHlHAPj0,10183
|
206
208
|
prefect/server/api/csrf_token.py,sha256=BwysSjQAhre7O0OY_LF3ZcIiO53FdMQroNT11Q6OcOM,1344
|
207
209
|
prefect/server/api/dependencies.py,sha256=VujfcIGn41TGJxUunFHVabY5hE-6nY6uSHyhNFj8PdI,6634
|
208
|
-
prefect/server/api/deployments.py,sha256=
|
210
|
+
prefect/server/api/deployments.py,sha256=ppYA3b2csnw32-SbOXz5Dm_IsnmPKczNiSbqCzusFKI,39332
|
209
211
|
prefect/server/api/events.py,sha256=3-Qdt6ORxFv3nLoogQqvd72zEulJSoAmcqZto2OULuk,9907
|
210
212
|
prefect/server/api/flow_run_notification_policies.py,sha256=F8xNm6bgZTC3nFe9xCUJS4NlU9tLXZ8fShtJqmhT2m4,4828
|
211
213
|
prefect/server/api/flow_run_states.py,sha256=lIdxVE9CqLgtDCuH9bTaKkzHNL81FPrr11liPzvONrw,1661
|
@@ -278,6 +280,7 @@ prefect/types/__init__.py,sha256=yBjKxiQmSC7jXoo0UNmM3KZil1NBFS-BWGPfwSEaoJo,462
|
|
278
280
|
prefect/types/_datetime.py,sha256=Cy6z7MxPDV_-jH2vxqC3PNA2G74IdUDIB07Jaakdj5w,7294
|
279
281
|
prefect/types/entrypoint.py,sha256=2FF03-wLPgtnqR_bKJDB2BsXXINPdu8ptY9ZYEZnXg8,328
|
280
282
|
prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
283
|
+
prefect/utilities/_ast.py,sha256=sgEPUWElih-3cp4PoAy1IOyPtu8E27lL0Dldf3ijnYY,4905
|
281
284
|
prefect/utilities/_deprecated.py,sha256=b3pqRSoFANdVJAc8TJkygBcP-VjZtLJUxVIWC7kwspI,1303
|
282
285
|
prefect/utilities/_engine.py,sha256=9GW4X1lyAbmPwCuXXIubVJ7Z0DMT3dykkEUtp9tm5hI,3356
|
283
286
|
prefect/utilities/_git.py,sha256=bPYWQdr9xvH0BqxR1ll1RkaSb3x0vhwylhYD5EilkKU,863
|
@@ -310,13 +313,13 @@ prefect/utilities/schema_tools/__init__.py,sha256=At3rMHd2g_Em2P3_dFQlFgqR_EpBwr
|
|
310
313
|
prefect/utilities/schema_tools/hydration.py,sha256=NkRhWkNfxxFmVGhNDfmxdK_xeKaEhs3a42q83Sg9cT4,9436
|
311
314
|
prefect/utilities/schema_tools/validation.py,sha256=Wix26IVR-ZJ32-6MX2pHhrwm3reB-Q4iB6_phn85OKE,10743
|
312
315
|
prefect/workers/__init__.py,sha256=EaM1F0RZ-XIJaGeTKLsXDnfOPHzVWk5bk0_c4BVS44M,64
|
313
|
-
prefect/workers/base.py,sha256=
|
316
|
+
prefect/workers/base.py,sha256=B3K80V-bZ1oI-5iwM2jw93is9srTSCLNN2lvVtlmB7g,60267
|
314
317
|
prefect/workers/block.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
|
315
318
|
prefect/workers/cloud.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
|
316
|
-
prefect/workers/process.py,sha256=
|
319
|
+
prefect/workers/process.py,sha256=Yi5D0U5AQ51wHT86GdwtImXSefe0gJf3LGq4r4z9zwM,11090
|
317
320
|
prefect/workers/server.py,sha256=2pmVeJZiVbEK02SO6BEZaBIvHMsn6G8LzjW8BXyiTtk,1952
|
318
321
|
prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
|
319
|
-
prefect_client-3.3.
|
320
|
-
prefect_client-3.3.
|
321
|
-
prefect_client-3.3.
|
322
|
-
prefect_client-3.3.
|
322
|
+
prefect_client-3.3.6.dist-info/METADATA,sha256=P3Idrvm26XdduiE-Fo-WN0zyLG4_2wgdDV4tD9DXqio,7466
|
323
|
+
prefect_client-3.3.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
324
|
+
prefect_client-3.3.6.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
|
325
|
+
prefect_client-3.3.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|