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/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 Flow, FlowRun
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: "Flow | None" = None,
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: "Flow | None") -> dict[str, str]:
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(self, flow_run: "FlowRun", message: str) -> None:
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
- self._logger.debug("Exiting worker context...")
1349
- await self.teardown(*exc_info)
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})"
@@ -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 Flow, FlowRun, WorkPool
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: "Flow | None" = None,
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.5.dev3
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>2.2.1
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=8rZCXd-Nz2-o4Nm_4yyvy6osOkdGCLiuhickzD7KvFM,185
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=Kwdei4JjitNfx42OepKpDNxwPtEwRgUUAn_soxsnNzI,12699
11
- prefect/context.py,sha256=LYEOlz7ZkuSDj7TmrE4mByy3N3TquFkIE2hEy0WHW1Y,23798
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=kBLT6M903ZFD4TUvmvRN-zOdNcjSlIO9d2kHhPYq5Oo,109547
18
- prefect/futures.py,sha256=ZD5rdgUHA4sfxwHaPToumOUKlyn4d989JHR7eI97-Hs,23271
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=I2-RhU15lbEI1_JX_-WJErfp3lkvTCJHja-p4y8hzLA,42923
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=8ZXs3G7NOF5Q2NqydK-K3zfjmYNnmfer-25hH6r6MgA,1009
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=QNKdKsLEzx3TE7T_3dJcK7bGvTCvNLY2WCpgDxiQDno,54368
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=g_LNcPtYd1Erbz1q4UI33e5dmPjQv_OeejoYGkASs5w,27581
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=D2sTbcUvFW5eiQLsQgzUO8hSTyWMvwQ7-nTg35twuIY,64962
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=HQwgiFQXHJ0bpNFRrhW6cY0rQFua0JJfcsMnPyj1H8I,37963
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=2GtGIJ4eAEVUaZwi6q1OMEbU_JhkEQNUmEznzj8HKbE,53364
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=uxOwcqA2Ps-V-W6WeSdKCQMINrCxBEVx1K1Un8pb7vs,8973
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.5.dev3.dist-info/METADATA,sha256=LcejbNc0zC2HoeBq6bkhgj5Pyne1GPZwmi9SLwEwCBc,7456
320
- prefect_client-3.3.5.dev3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
321
- prefect_client-3.3.5.dev3.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
322
- prefect_client-3.3.5.dev3.dist-info/RECORD,,
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,,