prefect-client 2.14.8__py3-none-any.whl → 2.14.10__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/runner/runner.py CHANGED
@@ -798,7 +798,20 @@ class Runner:
798
798
  try:
799
799
  if self._limiter:
800
800
  self._limiter.acquire_on_behalf_of_nowait(flow_run_id)
801
+ self._logger.debug("Limit slot acquired for flow run '%s'", flow_run_id)
801
802
  return True
803
+ except RuntimeError as exc:
804
+ if (
805
+ "this borrower is already holding one of this CapacityLimiter's tokens"
806
+ in str(exc)
807
+ ):
808
+ self._logger.warning(
809
+ f"Duplicate submission of flow run '{flow_run_id}' detected. Runner"
810
+ " will not re-submit flow run."
811
+ )
812
+ return False
813
+ else:
814
+ raise
802
815
  except anyio.WouldBlock:
803
816
  self._logger.info(
804
817
  f"Flow run limit reached; {self._limiter.borrowed_tokens} flow runs"
@@ -813,6 +826,7 @@ class Runner:
813
826
  """
814
827
  if self._limiter:
815
828
  self._limiter.release_on_behalf_of(flow_run_id)
829
+ self._logger.debug("Limit slot released for flow run '%s'", flow_run_id)
816
830
 
817
831
  async def _submit_scheduled_flow_runs(
818
832
  self, flow_run_response: List["FlowRun"]
prefect/runner/storage.py CHANGED
@@ -9,12 +9,18 @@ import fsspec
9
9
  from anyio import run_process
10
10
 
11
11
  from prefect._internal.concurrency.api import create_call, from_async
12
+ from prefect._internal.pydantic import HAS_PYDANTIC_V2
12
13
  from prefect.blocks.core import Block, BlockNotSavedError
13
14
  from prefect.blocks.system import Secret
14
15
  from prefect.filesystems import ReadableDeploymentStorage, WritableDeploymentStorage
15
16
  from prefect.logging.loggers import get_logger
16
17
  from prefect.utilities.collections import visit_collection
17
18
 
19
+ if HAS_PYDANTIC_V2:
20
+ from pydantic.v1 import SecretStr
21
+ else:
22
+ from pydantic import SecretStr
23
+
18
24
 
19
25
  @runtime_checkable
20
26
  class RunnerStorage(Protocol):
@@ -156,8 +162,12 @@ class GitRepository:
156
162
  if isinstance(self._credentials, Block)
157
163
  else deepcopy(self._credentials)
158
164
  )
159
- if isinstance(credentials.get("access_token"), Secret):
160
- credentials["access_token"] = credentials["access_token"].get()
165
+
166
+ for k, v in credentials.items():
167
+ if isinstance(v, Secret):
168
+ credentials[k] = v.get()
169
+ elif isinstance(v, SecretStr):
170
+ credentials[k] = v.get_secret_value()
161
171
 
162
172
  formatted_credentials = _format_token_from_credentials(
163
173
  urlparse(self._url).netloc, credentials
prefect/states.py CHANGED
@@ -568,10 +568,10 @@ def Pending(cls: Type[State] = State, **kwargs) -> State:
568
568
 
569
569
  def Paused(
570
570
  cls: Type[State] = State,
571
- timeout_seconds: int = None,
572
- pause_expiration_time: datetime.datetime = None,
571
+ timeout_seconds: Optional[int] = None,
572
+ pause_expiration_time: Optional[datetime.datetime] = None,
573
573
  reschedule: bool = False,
574
- pause_key: str = None,
574
+ pause_key: Optional[str] = None,
575
575
  **kwargs,
576
576
  ) -> State:
577
577
  """Convenience function for creating `Paused` states.
@@ -602,6 +602,29 @@ def Paused(
602
602
  return cls(type=StateType.PAUSED, state_details=state_details, **kwargs)
603
603
 
604
604
 
605
+ def Suspended(
606
+ cls: Type[State] = State,
607
+ timeout_seconds: Optional[int] = None,
608
+ pause_expiration_time: Optional[datetime.datetime] = None,
609
+ pause_key: Optional[str] = None,
610
+ **kwargs,
611
+ ):
612
+ """Convenience function for creating `Suspended` states.
613
+
614
+ Returns:
615
+ State: a Suspended state
616
+ """
617
+ return Paused(
618
+ cls=cls,
619
+ name="Suspended",
620
+ reschedule=True,
621
+ timeout_seconds=timeout_seconds,
622
+ pause_expiration_time=pause_expiration_time,
623
+ pause_key=pause_key,
624
+ **kwargs,
625
+ )
626
+
627
+
605
628
  def AwaitingRetry(
606
629
  cls: Type[State] = State, scheduled_time: datetime.datetime = None, **kwargs
607
630
  ) -> State:
@@ -7,9 +7,12 @@ from typing import Callable, Coroutine, Deque, Tuple
7
7
  import anyio
8
8
  import httpx
9
9
 
10
+ from prefect.logging.loggers import get_logger
10
11
  from prefect.utilities.collections import distinct
11
12
  from prefect.utilities.math import clamped_poisson_interval
12
13
 
14
+ logger = get_logger("utilities.services.critical_service_loop")
15
+
13
16
 
14
17
  async def critical_service_loop(
15
18
  workload: Callable[..., Coroutine],
@@ -50,6 +53,7 @@ async def critical_service_loop(
50
53
 
51
54
  while True:
52
55
  try:
56
+ logger.debug(f"Starting run of {workload!r}")
53
57
  await workload()
54
58
 
55
59
  # Reset the backoff count on success; we may want to consider resetting
@@ -69,6 +73,9 @@ async def critical_service_loop(
69
73
  # exception clause below)
70
74
  track_record.append(False)
71
75
  failures.append((exc, sys.exc_info()[-1]))
76
+ logger.debug(
77
+ f"Run of {workload!r} failed with TransportError", exc_info=exc
78
+ )
72
79
  except httpx.HTTPStatusError as exc:
73
80
  if exc.response.status_code >= 500:
74
81
  # 5XX codes indicate a potential outage of the Prefect API which is
@@ -76,6 +83,9 @@ async def critical_service_loop(
76
83
  # it is prolonged.
77
84
  track_record.append(False)
78
85
  failures.append((exc, sys.exc_info()[-1]))
86
+ logger.debug(
87
+ f"Run of {workload!r} failed with HTTPStatusError", exc_info=exc
88
+ )
79
89
  else:
80
90
  raise
81
91
 
@@ -1 +1,2 @@
1
1
  from .process import ProcessWorker
2
+ from .block import BlockWorker
@@ -0,0 +1,226 @@
1
+ import shlex
2
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional
3
+
4
+ import anyio
5
+ import anyio.abc
6
+
7
+ from prefect._internal.pydantic import HAS_PYDANTIC_V2
8
+ from prefect.blocks.core import Block
9
+ from prefect.client.schemas.objects import BlockDocument
10
+ from prefect.infrastructure.base import Infrastructure
11
+ from prefect.utilities.collections import get_from_dict
12
+ from prefect.workers.base import BaseWorker, BaseWorkerResult
13
+
14
+ if HAS_PYDANTIC_V2:
15
+ from pydantic.v1 import BaseModel, Field, PrivateAttr, validator
16
+ else:
17
+ from pydantic import BaseModel, Field, PrivateAttr, validator
18
+
19
+ from prefect.client.orchestration import PrefectClient
20
+ from prefect.client.utilities import inject_client
21
+ from prefect.events.related import object_as_related_resource, tags_as_related_resources
22
+ from prefect.events.schemas import RelatedResource
23
+ from prefect.utilities.templating import (
24
+ apply_values,
25
+ )
26
+
27
+ if TYPE_CHECKING:
28
+ from prefect.client.schemas.objects import Flow, FlowRun
29
+ from prefect.client.schemas.responses import (
30
+ DeploymentResponse,
31
+ )
32
+
33
+
34
+ class BlockWorkerJobConfiguration(BaseModel):
35
+ block: Block = Field(
36
+ default=..., description="The infrastructure block to use for job creation."
37
+ )
38
+
39
+ @validator("block")
40
+ def _validate_block_is_infrastructure(cls, v):
41
+ print("v: ", v)
42
+ if not isinstance(v, Infrastructure):
43
+ raise TypeError("Provided block is not a valid infrastructure block.")
44
+
45
+ return v
46
+
47
+ _related_objects: Dict[str, Any] = PrivateAttr(default_factory=dict)
48
+
49
+ @property
50
+ def is_using_a_runner(self):
51
+ return (
52
+ self.block.command is not None
53
+ and "prefect flow-run execute" in shlex.join(self.block.command)
54
+ )
55
+
56
+ @staticmethod
57
+ def _get_base_config_defaults(variables: dict) -> dict:
58
+ """Get default values from base config for all variables that have them."""
59
+ defaults = dict()
60
+ for variable_name, attrs in variables.items():
61
+ if "default" in attrs:
62
+ defaults[variable_name] = attrs["default"]
63
+
64
+ return defaults
65
+
66
+ @classmethod
67
+ @inject_client
68
+ async def from_template_and_values(
69
+ cls, base_job_template: dict, values: dict, client: "PrefectClient" = None
70
+ ):
71
+ """Creates a valid worker configuration object from the provided base
72
+ configuration and overrides.
73
+
74
+ Important: this method expects that the base_job_template was already
75
+ validated server-side.
76
+ """
77
+ job_config: Dict[str, Any] = base_job_template["job_configuration"]
78
+ variables_schema = base_job_template["variables"]
79
+ variables = cls._get_base_config_defaults(
80
+ variables_schema.get("properties", {})
81
+ )
82
+ variables.update(values)
83
+
84
+ populated_configuration = apply_values(template=job_config, values=variables)
85
+
86
+ block_document_id = get_from_dict(
87
+ populated_configuration, "block.$ref.block_document_id"
88
+ )
89
+ if not block_document_id:
90
+ raise ValueError(
91
+ "Base job template is invalid for this worker type because it does not"
92
+ " contain a block_document_id after variable resolution."
93
+ )
94
+
95
+ block_document = await client.read_block_document(
96
+ block_document_id=block_document_id
97
+ )
98
+ infrastructure_block = Block._from_block_document(block_document)
99
+
100
+ populated_configuration["block"] = infrastructure_block
101
+
102
+ return cls(**populated_configuration)
103
+
104
+ @classmethod
105
+ def json_template(cls) -> dict:
106
+ """Returns a dict with job configuration as keys and the corresponding templates as values
107
+
108
+ Defaults to using the job configuration parameter name as the template variable name.
109
+
110
+ e.g.
111
+ {
112
+ key1: '{{ key1 }}', # default variable template
113
+ key2: '{{ template2 }}', # `template2` specifically provide as template
114
+ }
115
+ """
116
+ configuration = {}
117
+ properties = cls.schema()["properties"]
118
+ for k, v in properties.items():
119
+ if v.get("template"):
120
+ template = v["template"]
121
+ else:
122
+ template = "{{ " + k + " }}"
123
+ configuration[k] = template
124
+
125
+ return configuration
126
+
127
+ def _related_resources(self) -> List[RelatedResource]:
128
+ tags = set()
129
+ related = []
130
+
131
+ for kind, obj in self._related_objects.items():
132
+ if obj is None:
133
+ continue
134
+ if hasattr(obj, "tags"):
135
+ tags.update(obj.tags)
136
+ related.append(object_as_related_resource(kind=kind, role=kind, object=obj))
137
+
138
+ return related + tags_as_related_resources(tags)
139
+
140
+ def prepare_for_flow_run(
141
+ self,
142
+ flow_run: "FlowRun",
143
+ deployment: Optional["DeploymentResponse"] = None,
144
+ flow: Optional["Flow"] = None,
145
+ ):
146
+ self.block = self.block.prepare_for_flow_run(
147
+ flow_run=flow_run, deployment=deployment, flow=flow
148
+ )
149
+
150
+
151
+ class BlockWorkerResult(BaseWorkerResult):
152
+ """Result of a block worker job"""
153
+
154
+
155
+ class BlockWorker(BaseWorker):
156
+ type = "block"
157
+ job_configuration = BlockWorkerJobConfiguration
158
+
159
+ _description = "Execute flow runs using an infrastructure block as the job creator."
160
+ _display_name = "Block"
161
+
162
+ async def run(
163
+ self,
164
+ flow_run: "FlowRun",
165
+ configuration: BlockWorkerJobConfiguration,
166
+ task_status: Optional[anyio.abc.TaskStatus] = None,
167
+ ):
168
+ block = configuration.block
169
+
170
+ # logic for applying infra overrides taken from src/prefect/agent.py
171
+ deployment = await self._client.read_deployment(flow_run.deployment_id)
172
+ flow = await self._client.read_flow(deployment.flow_id)
173
+ infra_document = await self._client.read_block_document(
174
+ configuration.block._block_document_id
175
+ )
176
+
177
+ # this piece of logic applies any overrides that may have been set on the
178
+ # deployment; overrides are defined as dot.delimited paths on possibly nested
179
+ # attributes of the infrastructure block
180
+ doc_dict = infra_document.dict()
181
+ infra_dict = doc_dict.get("data", {})
182
+ for override, value in (deployment.infra_overrides or {}).items():
183
+ nested_fields = override.split(".")
184
+ if nested_fields == ["command"]:
185
+ value = shlex.split(value)
186
+ data = infra_dict
187
+ for field in nested_fields[:-1]:
188
+ data = data[field]
189
+
190
+ # once we reach the end, set the value
191
+ data[nested_fields[-1]] = value
192
+
193
+ # reconstruct the infra block
194
+ doc_dict["data"] = infra_dict
195
+ infra_document = BlockDocument(**doc_dict)
196
+ block = Block._from_block_document(infra_document)
197
+
198
+ block = block.prepare_for_flow_run(
199
+ flow_run=flow_run, deployment=deployment, flow=flow
200
+ )
201
+
202
+ result = await block.run(
203
+ task_status=task_status,
204
+ )
205
+ return BlockWorkerResult(
206
+ identifier=result.identifier, status_code=result.status_code
207
+ )
208
+
209
+ async def kill_infrastructure(
210
+ self,
211
+ infrastructure_pid: str,
212
+ configuration: BlockWorkerJobConfiguration,
213
+ grace_seconds: int = 30,
214
+ ):
215
+ block = configuration.block
216
+ if not hasattr(block, "kill"):
217
+ self._logger.error(
218
+ f"Flow run infrastructure block {block.type!r} "
219
+ "does not support killing created infrastructure. "
220
+ "Cancellation cannot be guaranteed."
221
+ )
222
+ return
223
+
224
+ await block.kill(
225
+ infrastructure_pid=infrastructure_pid, grace_seconds=grace_seconds
226
+ )
@@ -1,3 +1,4 @@
1
+ from copy import deepcopy
1
2
  from logging import getLogger
2
3
  from typing import Any, Dict, List, Optional
3
4
 
@@ -35,7 +36,7 @@ async def get_default_base_job_template_for_infrastructure_type(
35
36
  # from the local type registry first.
36
37
  worker_cls = BaseWorker.get_worker_class_from_type(infra_type)
37
38
  if worker_cls is not None:
38
- return worker_cls.get_default_base_job_template()
39
+ return deepcopy(worker_cls.get_default_base_job_template())
39
40
 
40
41
  # If the worker type is not found in the local type registry, attempt to
41
42
  # get the default base job template from the collections registry.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 2.14.8
3
+ Version: 2.14.10
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -25,6 +25,7 @@ Requires-Python: >=3.8
25
25
  Description-Content-Type: text/markdown
26
26
  Requires-Dist: anyio <4.0.0,>=3.7.1
27
27
  Requires-Dist: asgi-lifespan <3.0,>=1.0
28
+ Requires-Dist: cachetools <6.0,>=5.3
28
29
  Requires-Dist: cloudpickle <4.0,>=2.0
29
30
  Requires-Dist: coolname <3.0.0,>=1.0.4
30
31
  Requires-Dist: croniter <3.0.0,>=1.0.12
@@ -1,10 +1,10 @@
1
1
  prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
2
- prefect/__init__.py,sha256=W_Nqn5HJVN-eaxJpcLHxaEjSawsCsvufKUjtqUBWiVE,5056
2
+ prefect/__init__.py,sha256=eomMSkMZMHSV8oRTV0HX3XwoKm0sdm_UmbEqX7rqhnU,5143
3
3
  prefect/_version.py,sha256=fQguBh1dzT7Baahj504O5RrsLlSyg3Zrx42OpgdPnFc,22378
4
4
  prefect/agent.py,sha256=b557LEcKxcBrgAGOlEDlOPclAkucDj1RhzywBSYxYpI,27487
5
5
  prefect/context.py,sha256=61IwPuOCIpYIHtgjz7ADe_-s2Zy8QD6RezWwAKl3Ytk,17774
6
- prefect/engine.py,sha256=54-oJGJoEtC3QgWXLz6FCjezU3HbBigerjE65OmbuSc,92877
7
- prefect/exceptions.py,sha256=ObVErPdth_BomEf7DWguEy84bb3SitXoxb5pMZMB-HE,10717
6
+ prefect/engine.py,sha256=q8ZjmMiCcXvHry-EwBdmqsaHxpwyDvhU0m3T093I9Fc,99531
7
+ prefect/exceptions.py,sha256=AtYh--XOUJujutX9r355eDjln27fUBFQXG0slOPWPcY,10840
8
8
  prefect/filesystems.py,sha256=X0M8_jddar7j1JtdEZgyDTX_8EVNJUYYs-Dat48GUhE,34101
9
9
  prefect/flows.py,sha256=MnysBebAxWZZkznQsPBrJuDD5o69Ih7wMC4TaJgxN4A,62648
10
10
  prefect/futures.py,sha256=uqNlykBSRrXQO1pQ6mZWLMqwkFCLhvMLrEFR4eHs--I,12589
@@ -15,7 +15,7 @@ prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  prefect/results.py,sha256=uFVy2MBpr5b8eeZ6H8KVd2m7aKCqI6wM0J8nuMMQdfk,20189
16
16
  prefect/serializers.py,sha256=sSbe40Ipj-d6VuzBae5k2ao9lkMUZpIXcLtD7f2a7cE,10852
17
17
  prefect/settings.py,sha256=41dZcrKBZMaq7Xi9G9mzKtlmeiAtZx30ky4w3xUgee4,64005
18
- prefect/states.py,sha256=0zT1-fZY8oW4EE3STukKKyTpyMnICOsiwd2pqVUvaZ8,20252
18
+ prefect/states.py,sha256=-Ud4AUom3Qu-HQ4hOLvfVZuuF-b_ibaqtzmL7V949Ac,20839
19
19
  prefect/task_runners.py,sha256=HXUg5UqhZRN2QNBqMdGE1lKhwFhT8TaRN75ScgLbnw8,11012
20
20
  prefect/tasks.py,sha256=_iCyePhTcdq8jW6gkB_TiIrCJjd9A2Mqhq0LfO5sV4Q,44730
21
21
  prefect/variables.py,sha256=57h-cJ15ZXWrdQiOnoEQmUVlAe59hmIaa57ZcGNBzao,914
@@ -103,7 +103,7 @@ prefect/client/base.py,sha256=19VMAsq6Wvp1ZUwAb2OAT4pMQ0CFWsHBwqY3kZfPR2w,12209
103
103
  prefect/client/cloud.py,sha256=vlGivNaOIS0YNc0OnVKEx2L88SRU8pal8GYMoPHXyrU,3955
104
104
  prefect/client/collections.py,sha256=I9EgbTg4Fn57gn8vwP_WdDmgnATbx9gfkm2jjhCORjw,1037
105
105
  prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
106
- prefect/client/orchestration.py,sha256=iOpdiiBniVLDVnR3dr5bPd70vMQcfe-mKedZl6dPnVk,95790
106
+ prefect/client/orchestration.py,sha256=FyUZJnbPpe2wtn_CWik_flOXH-zdjij_h43CPThvQHE,95794
107
107
  prefect/client/utilities.py,sha256=ejALWrVYuqW-A2zKJkAuRXDkhZ5e8fsiEkn-wI1tzF0,1998
108
108
  prefect/client/schemas/__init__.py,sha256=KlyqFV-hMulMkNstBn_0ijoHoIwJZaBj6B1r07UmgvE,607
109
109
  prefect/client/schemas/actions.py,sha256=2Chfqg1yoRweIQW6WvhTFHW0WQ2HDkInDQdPzp-Iot8,24017
@@ -121,28 +121,31 @@ prefect/concurrency/sync.py,sha256=AChhkA6hykgnnPmIeOp87jauLL0p_lrSwMwUoeuYprI,2
121
121
  prefect/deployments/__init__.py,sha256=gPxKvTDTQTR9e8eAxxGkbvhjsY_zYHJ3VgROGQmZOVI,404
122
122
  prefect/deployments/base.py,sha256=J7eAfoRs-RjVI157BB4p7lClT1YmkrIuipZPKyg6EJk,20286
123
123
  prefect/deployments/deployments.py,sha256=xVJ4CyfloaTApn8J2t-0G98BGCpKjaXivP_jYmte_0M,35215
124
- prefect/deployments/runner.py,sha256=nTxFs482bxBrFk71aZqg1g322Y-1teI5cfzlxwvg1b8,35783
124
+ prefect/deployments/runner.py,sha256=tr1nPByLgBqR42CUDITBWluA6vyARf4gfERKfiQd5uY,36047
125
125
  prefect/deployments/steps/__init__.py,sha256=3pZWONAZzenDszqNQT3bmTFilnvjB6xMolMz9tr5pLw,229
126
- prefect/deployments/steps/core.py,sha256=7WrHmtP0diewF9p4pzdE1AD8xycYkionEe_gCiWS_-w,6697
126
+ prefect/deployments/steps/core.py,sha256=Mg2F5GBJyO-jBAAP7PGtIu1sZgNsvmw5Jn5Qj-bUlgk,6617
127
127
  prefect/deployments/steps/pull.py,sha256=VXyMXedH9JNPFQ0Cs54qlTgL1EJ8Y6IbvxPKjAduqpA,7602
128
128
  prefect/deployments/steps/utility.py,sha256=LebTPEi66OOGuUYSsTQHbYHExIdjspSFHdacrC30C_k,7903
129
129
  prefect/deprecated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
130
  prefect/deprecated/data_documents.py,sha256=mGxhPHy7nm8xqLnnoo5oUxcm2MjcZxwEE6boD2EwJgg,9642
131
131
  prefect/events/__init__.py,sha256=2tQCrDogstn-w65lKyf9ahu_wbWhPaaDK_oxH2v1558,173
132
132
  prefect/events/actions.py,sha256=6ybRk3Weyeby250ME0qKlFRMvOD7iE6iCAU5tnblT14,966
133
- prefect/events/clients.py,sha256=KVezI6hvpwwsidIRQdNqxA69Zoy8k4HS2a9IVQuYx6Y,6751
133
+ prefect/events/clients.py,sha256=AfJeV-FCObvydutrSFD8JLrMVwtDJsL3WN0nbopzA3s,13688
134
+ prefect/events/filters.py,sha256=vSWHGDCCsi_znQs3gZomCxh-Q498ukn_QHJ7H8q16do,6922
134
135
  prefect/events/instrument.py,sha256=uNiD7AnkfuiwTsCMgNyJURmY9H2tXNfLCb3EC5FL0Qw,3805
135
136
  prefect/events/related.py,sha256=N0o19kTlos1V4L4AgO79Z_k06ZW9bfjSH8Xa9h7lugg,6746
136
137
  prefect/events/schemas.py,sha256=kNDcN62-G_jz2u9zrzGI5yV6CvAM-_IzpQjAAbFIdSU,11641
137
138
  prefect/events/utilities.py,sha256=JApOECe-09SU8QabSnyykdl8fzsXE28RVSCBcFDseH4,2374
138
139
  prefect/events/worker.py,sha256=4Uw-_fiLa449gD2QsEOhubQwxpEyQn8PUo9N_zsJY1M,2684
139
140
  prefect/infrastructure/__init__.py,sha256=Fm1Rhc4I7ZfJePpUAl1F4iNEtcDugoT650WXXt6xoCM,770
140
- prefect/infrastructure/base.py,sha256=K_lhvDDOsMEZ6HSAX6bjmR2njt0fZI3mlfEmQI7noR8,6220
141
- prefect/infrastructure/container.py,sha256=FQ9eDyhNa_0eeNGDNobI4NVVPBkfNioI_79LKiRbx-g,28751
141
+ prefect/infrastructure/base.py,sha256=BvgY2HY1u_JEeb6u2HhnN7k86aicfOTheD-urU7bcTI,10196
142
+ prefect/infrastructure/container.py,sha256=_CbrVW2ZYmkrc-jLNNuZyblmmX8uNVYUKHeTZWH0jcg,30914
142
143
  prefect/infrastructure/kubernetes.py,sha256=0i1ZNmnkTzqDcpaHWrfyUqbAeeGo3j39i5t273Oai1Q,34078
143
- prefect/infrastructure/process.py,sha256=9c_mDD-bqvTTisuX_j-dSHFezYNcw9oAAsdq26DkA0Q,9853
144
- prefect/infrastructure/provisioners/__init__.py,sha256=RHJb0RVZgSWIN-O1uVVFfoVE500xlQ511FnMHohSuLs,1241
145
- prefect/infrastructure/provisioners/cloud_run.py,sha256=uYbQIyekzqymaYstWwZr-r3eyU_wMoGX2_KkUoWy6_A,10477
144
+ prefect/infrastructure/process.py,sha256=xkWEMxUWnyaAD37eqdbcgL7tzmum_ctFz802RHhGfag,11283
145
+ prefect/infrastructure/provisioners/__init__.py,sha256=omykbyfYUsPQRdPGEbF3H0zSer4C4GyrGogg3spHdJM,1501
146
+ prefect/infrastructure/provisioners/cloud_run.py,sha256=GhhSiLPVLJ1Ozghdd0YtxKEdgdFV_0Lunvhw-VxB8fE,10597
147
+ prefect/infrastructure/provisioners/container_instance.py,sha256=bH9Hm4H66MMbxo5iqUc8CBhP8Rw5mWRrehqDZ3LxY0w,30693
148
+ prefect/infrastructure/provisioners/ecs.py,sha256=yUazQ9zxa7ryWyzGS5bqESl4k1KHvxV5AS94L1pMac4,31897
146
149
  prefect/logging/__init__.py,sha256=EnbHzgJE_-e4VM3jG5s7MCABYvZ7UGjntC6NfSdTqLg,112
147
150
  prefect/logging/configuration.py,sha256=Qy0r7_j7b8_klsBEn2_f-eSrTQ_EzaBrFwGnwdtgcK8,3436
148
151
  prefect/logging/formatters.py,sha256=pJKHSo_D_DXXor8R7dnPBCOSwQMhRKfP-35UHdIcOyE,4081
@@ -157,9 +160,9 @@ prefect/packaging/file.py,sha256=LdYUpAJfBzaYABCwVs4jMKVyo2DC6psEFGpwJ-iKUd4,227
157
160
  prefect/packaging/orion.py,sha256=ctWh8s3UztYfOTsZ0sfumebI0dbNDOTriDNXohtEC-k,1935
158
161
  prefect/packaging/serializers.py,sha256=1x5GjcBSYrE-YMmrpYYZi2ObTs7MM6YEM3LS0e6mHAk,6321
159
162
  prefect/runner/__init__.py,sha256=RxkH2lejFchDZu9fp9oFmy6fs-I96u1vq5-EVz0uDfA,34
160
- prefect/runner/runner.py,sha256=vvZkrljmoathlG41H3IdSM6oPTRmXJdS1HvwBVuq-pM,44357
163
+ prefect/runner/runner.py,sha256=KlENRaVEL_WfVKmy4O20WcvSeDoN6gHF39-10EsmK7M,44981
161
164
  prefect/runner/server.py,sha256=cGNgpMG72fJ9GcRQHZB1Y3WkZtK8lczR0hX0tBOE9Ro,2313
162
- prefect/runner/storage.py,sha256=CgSA_nnfme8eaeXDU3EBILG_LKxnrLQrZlg0wqmDjWI,21805
165
+ prefect/runner/storage.py,sha256=hILSisK4CVRt4ywOfAa89c1pjRZIK-_Ea-LN_VIoGD4,22038
163
166
  prefect/runtime/__init__.py,sha256=iYmfK1HmXiXXCQK77wDloOqZmY7SFF5iyr37jRzuf-c,406
164
167
  prefect/runtime/deployment.py,sha256=UWNXH-3-NNVxLCl5XnDKiofo4a5j8w_42ns1OSQMixg,4751
165
168
  prefect/runtime/flow_run.py,sha256=OYXykn0CZKbIj8ni_Ut-KbAmZhEj85QwQ3xyk_T9GtM,7894
@@ -187,18 +190,19 @@ prefect/utilities/names.py,sha256=x-stHcF7_tebJPvB1dz-5FvdXJXNBTg2kFZXSnIBBmk,16
187
190
  prefect/utilities/processutils.py,sha256=hGMqWne0jKUN0-PtU3f9xOpIfIFm65VwdXLNzbWkO9U,14327
188
191
  prefect/utilities/pydantic.py,sha256=rgkzzUgiCMVjr8DMyHNmfYzy_6eGS8Z0OuNW1ssZ22g,9226
189
192
  prefect/utilities/render_swagger.py,sha256=h2UrORVN3f7gM4zurtMnySjQXZIOWbji3uMinpbkl8U,3717
190
- prefect/utilities/services.py,sha256=kEPQ8jjJfCcYANr4WKXr9A9PAP1pCfhdkavZiXuT7I0,6015
193
+ prefect/utilities/services.py,sha256=TCjBJX6huz1nUzmiXI0IZNNfBuxM5-xV9PLbPZNosOw,6438
191
194
  prefect/utilities/slugify.py,sha256=57Vb14t13F3zm1P65KAu8nVeAz0iJCd1Qc5eMG-R5y8,169
192
195
  prefect/utilities/templating.py,sha256=cTDT0IkeXdZC-NJZ7z5PJKEWXQfKg5_a471_99i4fho,11262
193
196
  prefect/utilities/text.py,sha256=eXGIsCcZ7h_6hy8T5GDQjL8GiKyktoOqavYub0QjgO4,445
194
197
  prefect/utilities/visualization.py,sha256=iGkYtroroYY9Rsiw1ok1bLv9FwsNyjtiK-0vBPL-ZWI,6491
195
- prefect/workers/__init__.py,sha256=8dP8SLZbWYyC_l9DRTQSE3dEbDgns5DZDhxkp_NfsbQ,35
198
+ prefect/workers/__init__.py,sha256=6el2Q856CuRPa5Hdrbm9QyAWB_ovcT2bImSFsoWI46k,66
196
199
  prefect/workers/base.py,sha256=YmWJXJiiXH1fQKL9KX873jn9h1XEQJWTAEimNNnsSE4,44488
200
+ prefect/workers/block.py,sha256=lvKlaWdA-DCCXDX23HHK9M5urEq4x2wmpKtU9ft3a7k,7767
197
201
  prefect/workers/process.py,sha256=MLmS3qtuY14QJulL40sLBSSN2ZMHwh5LMcFXZNvrsdc,10368
198
202
  prefect/workers/server.py,sha256=WVZJxR8nTMzK0ov0BD0xw5OyQpT26AxlXbsGQ1OrxeQ,1551
199
- prefect/workers/utilities.py,sha256=GenL5J8bBdTg8EdeDbu85042uXWTeb2AF3WA9KCmUH4,2448
200
- prefect_client-2.14.8.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
201
- prefect_client-2.14.8.dist-info/METADATA,sha256=zYp-TuFqw09_UhK0xmSHm5ubzTQ0kZ-rzWdZTmgVAZw,7143
202
- prefect_client-2.14.8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
203
- prefect_client-2.14.8.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
204
- prefect_client-2.14.8.dist-info/RECORD,,
203
+ prefect/workers/utilities.py,sha256=OXMqMINSgYzW8r8Cyurs5Lp_tJwLTF8ojWfv7BHTEOI,2484
204
+ prefect_client-2.14.10.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
205
+ prefect_client-2.14.10.dist-info/METADATA,sha256=WxIZUHId-ZfcBl0eKGymVCVzbooxsUT4X9zrBTS_v8E,7181
206
+ prefect_client-2.14.10.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
207
+ prefect_client-2.14.10.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
208
+ prefect_client-2.14.10.dist-info/RECORD,,