prefect-client 2.14.9__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/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.9
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,7 +121,7 @@ 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
126
  prefect/deployments/steps/core.py,sha256=Mg2F5GBJyO-jBAAP7PGtIu1sZgNsvmw5Jn5Qj-bUlgk,6617
127
127
  prefect/deployments/steps/pull.py,sha256=VXyMXedH9JNPFQ0Cs54qlTgL1EJ8Y6IbvxPKjAduqpA,7602
@@ -130,19 +130,21 @@ prefect/deprecated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
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=NdUgMNMRwNZDTDi1uYHaLcaQkMwJAMtxPoICAtoX8rs,1365
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
146
148
  prefect/infrastructure/provisioners/ecs.py,sha256=yUazQ9zxa7ryWyzGS5bqESl4k1KHvxV5AS94L1pMac4,31897
147
149
  prefect/logging/__init__.py,sha256=EnbHzgJE_-e4VM3jG5s7MCABYvZ7UGjntC6NfSdTqLg,112
148
150
  prefect/logging/configuration.py,sha256=Qy0r7_j7b8_klsBEn2_f-eSrTQ_EzaBrFwGnwdtgcK8,3436
@@ -188,18 +190,19 @@ prefect/utilities/names.py,sha256=x-stHcF7_tebJPvB1dz-5FvdXJXNBTg2kFZXSnIBBmk,16
188
190
  prefect/utilities/processutils.py,sha256=hGMqWne0jKUN0-PtU3f9xOpIfIFm65VwdXLNzbWkO9U,14327
189
191
  prefect/utilities/pydantic.py,sha256=rgkzzUgiCMVjr8DMyHNmfYzy_6eGS8Z0OuNW1ssZ22g,9226
190
192
  prefect/utilities/render_swagger.py,sha256=h2UrORVN3f7gM4zurtMnySjQXZIOWbji3uMinpbkl8U,3717
191
- prefect/utilities/services.py,sha256=kEPQ8jjJfCcYANr4WKXr9A9PAP1pCfhdkavZiXuT7I0,6015
193
+ prefect/utilities/services.py,sha256=TCjBJX6huz1nUzmiXI0IZNNfBuxM5-xV9PLbPZNosOw,6438
192
194
  prefect/utilities/slugify.py,sha256=57Vb14t13F3zm1P65KAu8nVeAz0iJCd1Qc5eMG-R5y8,169
193
195
  prefect/utilities/templating.py,sha256=cTDT0IkeXdZC-NJZ7z5PJKEWXQfKg5_a471_99i4fho,11262
194
196
  prefect/utilities/text.py,sha256=eXGIsCcZ7h_6hy8T5GDQjL8GiKyktoOqavYub0QjgO4,445
195
197
  prefect/utilities/visualization.py,sha256=iGkYtroroYY9Rsiw1ok1bLv9FwsNyjtiK-0vBPL-ZWI,6491
196
- prefect/workers/__init__.py,sha256=8dP8SLZbWYyC_l9DRTQSE3dEbDgns5DZDhxkp_NfsbQ,35
198
+ prefect/workers/__init__.py,sha256=6el2Q856CuRPa5Hdrbm9QyAWB_ovcT2bImSFsoWI46k,66
197
199
  prefect/workers/base.py,sha256=YmWJXJiiXH1fQKL9KX873jn9h1XEQJWTAEimNNnsSE4,44488
200
+ prefect/workers/block.py,sha256=lvKlaWdA-DCCXDX23HHK9M5urEq4x2wmpKtU9ft3a7k,7767
198
201
  prefect/workers/process.py,sha256=MLmS3qtuY14QJulL40sLBSSN2ZMHwh5LMcFXZNvrsdc,10368
199
202
  prefect/workers/server.py,sha256=WVZJxR8nTMzK0ov0BD0xw5OyQpT26AxlXbsGQ1OrxeQ,1551
200
- prefect/workers/utilities.py,sha256=GenL5J8bBdTg8EdeDbu85042uXWTeb2AF3WA9KCmUH4,2448
201
- prefect_client-2.14.9.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
202
- prefect_client-2.14.9.dist-info/METADATA,sha256=JDuiu1WJeDzz7N57CJEHKupJDWJ7q4ogagQG1VgD5WI,7143
203
- prefect_client-2.14.9.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
204
- prefect_client-2.14.9.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
205
- prefect_client-2.14.9.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,,