prefect-client 2.20.1__py3-none-any.whl → 2.20.4__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.
File without changes
File without changes
prefect/blocks/core.py CHANGED
@@ -18,9 +18,7 @@ from typing import (
18
18
  )
19
19
  from uuid import UUID, uuid4
20
20
 
21
- from griffe.dataclasses import Docstring
22
- from griffe.docstrings.dataclasses import DocstringSection, DocstringSectionKind
23
- from griffe.docstrings.parsers import Parser, parse
21
+ from griffe import Docstring, DocstringSection, DocstringSectionKind, Parser, parse
24
22
  from packaging.version import InvalidVersion, Version
25
23
 
26
24
  from prefect._internal.pydantic import HAS_PYDANTIC_V2
@@ -120,18 +118,20 @@ def _is_subclass(cls, parent_cls) -> bool:
120
118
  Checks if a given class is a subclass of another class. Unlike issubclass,
121
119
  this will not throw an exception if cls is an instance instead of a type.
122
120
  """
123
- return inspect.isclass(cls) and issubclass(cls, parent_cls)
121
+ # For python<=3.11 inspect.isclass() will return True for parametrized types (e.g. list[str])
122
+ # so we need to check for get_origin() to avoid TypeError for issubclass.
123
+ return inspect.isclass(cls) and not get_origin(cls) and issubclass(cls, parent_cls)
124
124
 
125
125
 
126
126
  def _collect_secret_fields(name: str, type_: Type, secrets: List[str]) -> None:
127
127
  """
128
128
  Recursively collects all secret fields from a given type and adds them to the
129
- secrets list, supporting nested Union / BaseModel fields. Also, note, this function
130
- mutates the input secrets list, thus does not return anything.
129
+ secrets list, supporting nested Union / Dict / Tuple / List / BaseModel fields.
130
+ Also, note, this function mutates the input secrets list, thus does not return anything.
131
131
  """
132
- if get_origin(type_) is Union:
133
- for union_type in get_args(type_):
134
- _collect_secret_fields(name, union_type, secrets)
132
+ if get_origin(type_) in (Union, dict, list, tuple):
133
+ for nested_type in get_args(type_):
134
+ _collect_secret_fields(name, nested_type, secrets)
135
135
  return
136
136
  elif _is_subclass(type_, BaseModel):
137
137
  for field in type_.__fields__.values():
@@ -241,25 +241,29 @@ class Block(BaseModel, ABC):
241
241
 
242
242
  # create block schema references
243
243
  refs = schema["block_schema_references"] = {}
244
+
245
+ def collect_block_schema_references(
246
+ field_name: str, annotation: type
247
+ ) -> None:
248
+ """Walk through the annotation and collect block schemas for any nested blocks."""
249
+ if Block.is_block_class(annotation):
250
+ if isinstance(refs.get(field_name), list):
251
+ refs[field_name].append(
252
+ annotation._to_block_schema_reference_dict()
253
+ )
254
+ elif isinstance(refs.get(field_name), dict):
255
+ refs[field_name] = [
256
+ refs[field_name],
257
+ annotation._to_block_schema_reference_dict(),
258
+ ]
259
+ else:
260
+ refs[field_name] = annotation._to_block_schema_reference_dict()
261
+ if get_origin(annotation) in (Union, list, tuple, dict):
262
+ for type_ in get_args(annotation):
263
+ collect_block_schema_references(field_name, type_)
264
+
244
265
  for field in model.__fields__.values():
245
- if Block.is_block_class(field.type_):
246
- refs[field.name] = field.type_._to_block_schema_reference_dict()
247
- if get_origin(field.type_) is Union:
248
- for type_ in get_args(field.type_):
249
- if Block.is_block_class(type_):
250
- if isinstance(refs.get(field.name), list):
251
- refs[field.name].append(
252
- type_._to_block_schema_reference_dict()
253
- )
254
- elif isinstance(refs.get(field.name), dict):
255
- refs[field.name] = [
256
- refs[field.name],
257
- type_._to_block_schema_reference_dict(),
258
- ]
259
- else:
260
- refs[
261
- field.name
262
- ] = type_._to_block_schema_reference_dict()
266
+ collect_block_schema_references(field.name, field.type_)
263
267
 
264
268
  def __init__(self, *args, **kwargs):
265
269
  super().__init__(*args, **kwargs)
@@ -888,13 +892,16 @@ class Block(BaseModel, ABC):
888
892
  "subclass and not on a Block interface class directly."
889
893
  )
890
894
 
895
+ async def register_blocks_in_annotation(annotation: type) -> None:
896
+ """Walk through the annotation and register any nested blocks."""
897
+ if Block.is_block_class(annotation):
898
+ await annotation.register_type_and_schema(client=client)
899
+ elif get_origin(annotation) in (Union, tuple, list, dict):
900
+ for inner_annotation in get_args(annotation):
901
+ await register_blocks_in_annotation(inner_annotation)
902
+
891
903
  for field in cls.__fields__.values():
892
- if Block.is_block_class(field.type_):
893
- await field.type_.register_type_and_schema(client=client)
894
- if get_origin(field.type_) is Union:
895
- for type_ in get_args(field.type_):
896
- if Block.is_block_class(type_):
897
- await type_.register_type_and_schema(client=client)
904
+ await register_blocks_in_annotation(field.annotation)
898
905
 
899
906
  try:
900
907
  block_type = await client.read_block_type_by_slug(
@@ -2665,12 +2665,14 @@ class PrefectClient:
2665
2665
  async def create_work_pool(
2666
2666
  self,
2667
2667
  work_pool: WorkPoolCreate,
2668
+ overwrite: bool = False,
2668
2669
  ) -> WorkPool:
2669
2670
  """
2670
2671
  Creates a work pool with the provided configuration.
2671
2672
 
2672
2673
  Args:
2673
2674
  work_pool: Desired configuration for the new work pool.
2675
+ overwrite: Whether to overwrite an existing work pool with the same name.
2674
2676
 
2675
2677
  Returns:
2676
2678
  Information about the newly created work pool.
@@ -2682,7 +2684,24 @@ class PrefectClient:
2682
2684
  )
2683
2685
  except httpx.HTTPStatusError as e:
2684
2686
  if e.response.status_code == status.HTTP_409_CONFLICT:
2685
- raise prefect.exceptions.ObjectAlreadyExists(http_exc=e) from e
2687
+ if overwrite:
2688
+ existing_work_pool = await self.read_work_pool(
2689
+ work_pool_name=work_pool.name
2690
+ )
2691
+ if existing_work_pool.type != work_pool.type:
2692
+ warnings.warn(
2693
+ "Overwriting work pool type is not supported. Ignoring provided type.",
2694
+ category=UserWarning,
2695
+ )
2696
+ await self.update_work_pool(
2697
+ work_pool_name=work_pool.name,
2698
+ work_pool=WorkPoolUpdate.parse_obj(
2699
+ work_pool.dict(exclude={"name", "type"})
2700
+ ),
2701
+ )
2702
+ response = await self._client.get(f"/work_pools/{work_pool.name}")
2703
+ else:
2704
+ raise prefect.exceptions.ObjectAlreadyExists(http_exc=e) from e
2686
2705
  else:
2687
2706
  raise
2688
2707
 
prefect/engine.py CHANGED
@@ -332,6 +332,18 @@ def enter_flow_run_engine_from_subprocess(flow_run_id: UUID) -> State:
332
332
  return state
333
333
 
334
334
 
335
+ async def _make_flow_run(
336
+ flow: Flow, parameters: Dict[str, Any], state: State, client: PrefectClient
337
+ ) -> FlowRun:
338
+ return await client.create_flow_run(
339
+ flow,
340
+ # Send serialized parameters to the backend
341
+ parameters=flow.serialize_parameters(parameters),
342
+ state=state,
343
+ tags=TagsContext.get().current_tags,
344
+ )
345
+
346
+
335
347
  @inject_client
336
348
  async def create_then_begin_flow_run(
337
349
  flow: Flow,
@@ -351,6 +363,7 @@ async def create_then_begin_flow_run(
351
363
 
352
364
  await check_api_reachable(client, "Cannot create flow run")
353
365
 
366
+ flow_run = None
354
367
  state = Pending()
355
368
  if flow.should_validate_parameters:
356
369
  try:
@@ -359,14 +372,10 @@ async def create_then_begin_flow_run(
359
372
  state = await exception_to_failed_state(
360
373
  message="Validation of flow parameters failed with error:"
361
374
  )
375
+ flow_run = await _make_flow_run(flow, parameters, state, client)
376
+ await _run_flow_hooks(flow, flow_run, state)
362
377
 
363
- flow_run = await client.create_flow_run(
364
- flow,
365
- # Send serialized parameters to the backend
366
- parameters=flow.serialize_parameters(parameters),
367
- state=state,
368
- tags=TagsContext.get().current_tags,
369
- )
378
+ flow_run = flow_run or await _make_flow_run(flow, parameters, state, client)
370
379
 
371
380
  engine_logger.info(f"Created flow run {flow_run.name!r} for flow {flow.name!r}")
372
381
 
@@ -586,7 +586,7 @@ class KubernetesJob(Infrastructure):
586
586
  "prefect-job-"
587
587
  # We generate a name using a hash of the primary job settings
588
588
  + stable_hash(
589
- *self.command,
589
+ *self.command if self.command else "",
590
590
  *self.env.keys(),
591
591
  *[v for v in self.env.values() if v is not None],
592
592
  )
prefect/runner/runner.py CHANGED
@@ -35,7 +35,6 @@ import datetime
35
35
  import inspect
36
36
  import logging
37
37
  import os
38
- import shlex
39
38
  import shutil
40
39
  import signal
41
40
  import subprocess
@@ -97,7 +96,11 @@ from prefect.utilities.asyncutils import (
97
96
  sync_compatible,
98
97
  )
99
98
  from prefect.utilities.engine import propose_state
100
- from prefect.utilities.processutils import _register_signal, run_process
99
+ from prefect.utilities.processutils import (
100
+ _register_signal,
101
+ get_sys_executable,
102
+ run_process,
103
+ )
101
104
  from prefect.utilities.services import critical_service_loop
102
105
 
103
106
  __all__ = ["Runner"]
@@ -533,7 +536,7 @@ class Runner:
533
536
  task_status: anyio task status used to send a message to the caller
534
537
  than the flow run process has started.
535
538
  """
536
- command = f"{shlex.quote(sys.executable)} -m prefect.engine"
539
+ command = [get_sys_executable(), "-m", "prefect.engine"]
537
540
 
538
541
  flow_run_logger = self._get_flow_run_logger(flow_run)
539
542
 
@@ -580,7 +583,7 @@ class Runner:
580
583
  setattr(storage, "last_adhoc_pull", datetime.datetime.now())
581
584
 
582
585
  process = await run_process(
583
- shlex.split(command),
586
+ command=command,
584
587
  stream_output=True,
585
588
  task_status=task_status,
586
589
  env=env,
@@ -12,12 +12,14 @@ Available attributes:
12
12
  - `scheduled_start_time`: the flow run's expected scheduled start time; defaults to now if not present
13
13
  - `name`: the name of the flow run
14
14
  - `flow_name`: the name of the flow
15
+ - `flow_version`: the version of the flow
15
16
  - `parameters`: the parameters that were passed to this run; note that these do not necessarily
16
17
  include default values set on the flow function, only the parameter values explicitly passed for the run
17
18
  - `parent_flow_run_id`: the ID of the flow run that triggered this run, if any
18
19
  - `parent_deployment_id`: the ID of the deployment that triggered this run, if any
19
20
  - `run_count`: the number of times this flow run has been run
20
21
  """
22
+
21
23
  import os
22
24
  from typing import Any, Dict, List, Optional
23
25
 
@@ -34,6 +36,7 @@ __all__ = [
34
36
  "scheduled_start_time",
35
37
  "name",
36
38
  "flow_name",
39
+ "flow_version",
37
40
  "parameters",
38
41
  "parent_flow_run_id",
39
42
  "parent_deployment_id",
@@ -188,6 +191,21 @@ def get_flow_name() -> Optional[str]:
188
191
  return flow_run_ctx.flow.name
189
192
 
190
193
 
194
+ def get_flow_version() -> Optional[str]:
195
+ flow_run_ctx = FlowRunContext.get()
196
+ run_id = get_id()
197
+ if flow_run_ctx is None and run_id is None:
198
+ return None
199
+ elif flow_run_ctx is None:
200
+ flow = from_sync.call_soon_in_loop_thread(
201
+ create_call(_get_flow_from_run, run_id)
202
+ ).result()
203
+
204
+ return flow.version
205
+ else:
206
+ return flow_run_ctx.flow.version
207
+
208
+
191
209
  def get_scheduled_start_time() -> pendulum.DateTime:
192
210
  flow_run_ctx = FlowRunContext.get()
193
211
  run_id = get_id()
@@ -271,6 +289,7 @@ FIELDS = {
271
289
  "scheduled_start_time": get_scheduled_start_time,
272
290
  "name": get_name,
273
291
  "flow_name": get_flow_name,
292
+ "flow_version": get_flow_version,
274
293
  "parameters": get_parameters,
275
294
  "parent_flow_run_id": get_parent_flow_run_id,
276
295
  "parent_deployment_id": get_parent_deployment_id,
prefect/settings.py CHANGED
@@ -345,7 +345,11 @@ def template_with_settings(*upstream_settings: Setting) -> Callable[["Settings",
345
345
  setting.name: setting.value_from(settings) for setting in upstream_settings
346
346
  }
347
347
  template = string.Template(str(value))
348
- return original_type(template.substitute(template_values))
348
+ # Note the use of `safe_substitute` to avoid raising an exception if a
349
+ # template value is missing. In this case, template values will be left
350
+ # as-is in the string. Using `safe_substitute` prevents us raising when
351
+ # the DB password contains a `$` character.
352
+ return original_type(template.safe_substitute(template_values))
349
353
 
350
354
  return templater
351
355
 
@@ -24,9 +24,7 @@ if HAS_PYDANTIC_V2:
24
24
  else:
25
25
  import pydantic
26
26
 
27
- from griffe.dataclasses import Docstring
28
- from griffe.docstrings.dataclasses import DocstringSectionKind
29
- from griffe.docstrings.parsers import Parser, parse
27
+ from griffe import Docstring, DocstringSectionKind, Parser, parse
30
28
  from typing_extensions import Literal
31
29
 
32
30
  from prefect.exceptions import (
prefect/workers/base.py CHANGED
@@ -981,7 +981,12 @@ class BaseWorker(abc.ABC):
981
981
 
982
982
  deployment_vars = deployment.job_variables or {}
983
983
  flow_run_vars = flow_run.job_variables or {}
984
- job_variables = {**deployment_vars, **flow_run_vars}
984
+ job_variables = {**deployment_vars}
985
+
986
+ # merge environment variables carefully, otherwise full override
987
+ if isinstance(job_variables.get("env"), dict):
988
+ job_variables["env"].update(flow_run_vars.pop("env", {}))
989
+ job_variables.update(flow_run_vars)
985
990
 
986
991
  configuration = await self.job_configuration.from_template_and_values(
987
992
  base_job_template=self._work_pool.base_job_template,
@@ -1,16 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 2.20.1
3
+ Version: 2.20.4
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
7
7
  Author-email: help@prefect.io
8
- License: UNKNOWN
9
8
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/blob/main/RELEASE-NOTES.md
10
9
  Project-URL: Documentation, https://docs.prefect.io
11
10
  Project-URL: Source, https://github.com/PrefectHQ/prefect
12
11
  Project-URL: Tracker, https://github.com/PrefectHQ/prefect/issues
13
- Platform: UNKNOWN
14
12
  Classifier: Natural Language :: English
15
13
  Classifier: Intended Audience :: Developers
16
14
  Classifier: Intended Audience :: System Administrators
@@ -23,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.11
23
21
  Classifier: Topic :: Software Development :: Libraries
24
22
  Requires-Python: >=3.8
25
23
  Description-Content-Type: text/markdown
24
+ License-File: LICENSE
26
25
  Requires-Dist: anyio<5.0.0,>=4.4.0
27
26
  Requires-Dist: asgi-lifespan<3.0,>=1.0
28
27
  Requires-Dist: cachetools<6.0,>=5.3
@@ -32,10 +31,10 @@ Requires-Dist: croniter<3.0.0,>=1.0.12
32
31
  Requires-Dist: fsspec>=2022.5.0
33
32
  Requires-Dist: exceptiongroup>=1.2.1
34
33
  Requires-Dist: graphviz>=0.20.1
35
- Requires-Dist: griffe<0.48.0,>=0.20.0
34
+ Requires-Dist: griffe<2.0.0,>=0.49.0
36
35
  Requires-Dist: httpcore<2.0.0,>=1.0.5
37
36
  Requires-Dist: httpx[http2]!=0.23.2,>=0.23
38
- Requires-Dist: importlib-resources<6.2.0,>=6.1.3
37
+ Requires-Dist: importlib-resources<6.5.0,>=6.1.3
39
38
  Requires-Dist: jsonpatch<2.0,>=1.32
40
39
  Requires-Dist: jsonschema<5.0.0,>=4.0.0
41
40
  Requires-Dist: orjson<4.0,>=3.7
@@ -54,7 +53,7 @@ Requires-Dist: toml>=0.10.0
54
53
  Requires-Dist: typing-extensions<5.0.0,>=4.5.0
55
54
  Requires-Dist: ujson<6.0.0,>=5.8.0
56
55
  Requires-Dist: uvicorn!=0.29.0,>=0.14.0
57
- Requires-Dist: websockets<13.0,>=10.4
56
+ Requires-Dist: websockets<14.0,>=10.4
58
57
  Requires-Dist: itsdangerous
59
58
  Requires-Dist: python-multipart>=0.0.7
60
59
  Requires-Dist: importlib-metadata>=4.4; python_version < "3.10"
@@ -172,5 +171,3 @@ Prefect is made possible by the fastest growing community of thousands of friend
172
171
  See our [documentation on contributing to Prefect](https://docs.prefect.io/contributing/overview/).
173
172
 
174
173
  Thanks for being part of the mission to build a new kind of workflow system and, of course, **happy engineering!**
175
-
176
-
@@ -5,7 +5,7 @@ prefect/agent.py,sha256=HaGT0yh3fciluYpO99dVHo_LHq7N2cYLuWNrEV_kPV8,27789
5
5
  prefect/artifacts.py,sha256=mreaBE4qMoXkjc9YI-5cAxoye7ixraHB_zr8GTK9xPU,8694
6
6
  prefect/automations.py,sha256=rjVtQblBlKhD_q24bG6zbxJeb_XQJnodMlhr565aZJY,4853
7
7
  prefect/context.py,sha256=Hgn3rIjCbqfCmGnZzV_eZ2FwxGjEhaZjUw_nppqNQSA,18189
8
- prefect/engine.py,sha256=czyTcLPIaj_LOpPuWNheK0FfdOwX42VKLtonm7vZqH0,91938
8
+ prefect/engine.py,sha256=yw6LVoaEUCTR-NkSJXRau2gB9jNCspMw83ELaxmwpnE,92291
9
9
  prefect/exceptions.py,sha256=ElqC81_w6XbTaxLYANLMIPK8Fz46NmJZCRKL4NZ-JIg,10907
10
10
  prefect/filesystems.py,sha256=XniPSdBAqywj43X7GyfuWJQIbz07QJ5Y3cVNLhIF3lQ,35260
11
11
  prefect/flow_runs.py,sha256=mFHLavZk1yZ62H3UazuNDBZWAF7AqKttA4rMcHgsVSw,3119
@@ -19,7 +19,7 @@ prefect/profiles.toml,sha256=Fs8hD_BdWHZgAijgk8pK_Zx-Pm-YFixqDIfEP6fM-qU,38
19
19
  prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  prefect/results.py,sha256=JXuySIfJb9weg49A2YsI3ZxoPoAAYcXn7ajui_8vMbE,25502
21
21
  prefect/serializers.py,sha256=MsMTPgo6APq-pN1pcLD9COdVFnBS9E3WaMuaKgpeJdQ,8821
22
- prefect/settings.py,sha256=gFVXmGLapnkIV7hQvRJMJ6472UZJr6gqZYk1xwcqgnQ,74931
22
+ prefect/settings.py,sha256=U4nySdke3t_TyQRJtcgkv5x4LLzwUwWPFrYMFh-QJB8,75227
23
23
  prefect/states.py,sha256=B38zIXnqc8cmw3GPxmMQ4thX6pXb6UtG4PoTZ5thGQs,21036
24
24
  prefect/task_engine.py,sha256=_2I7XLwoT_nNhpzTMa_52aQKjsDoaW6WpzwIHYEWZS0,2598
25
25
  prefect/task_runners.py,sha256=HXUg5UqhZRN2QNBqMdGE1lKhwFhT8TaRN75ScgLbnw8,11012
@@ -85,6 +85,7 @@ prefect/_vendor/fastapi/exceptions.py,sha256=131GbKBhoKJNvkE3k2-IvKye6xH-fvNaJ20
85
85
  prefect/_vendor/fastapi/logger.py,sha256=I9NNi3ov8AcqbsbC9wl1X-hdItKgYt2XTrx1f99Zpl4,54
86
86
  prefect/_vendor/fastapi/param_functions.py,sha256=BLvSfhJqiViP-_zYQ7BL_t9IARf4EJbKZSikDNsOkfw,9130
87
87
  prefect/_vendor/fastapi/params.py,sha256=UBEVQ_EK9iIbF3DOJXfH2zcO27uvf5NeRdslMOEtIEA,13350
88
+ prefect/_vendor/fastapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
89
  prefect/_vendor/fastapi/requests.py,sha256=KsGwp86w95S-0wgx4pL-T4i9M_z-_KlMzX43rdUg9YU,183
89
90
  prefect/_vendor/fastapi/responses.py,sha256=M67RzoU0K91ojgHjvDIDK3iyBAvA9YKPsUJIP4FtxtY,1381
90
91
  prefect/_vendor/fastapi/routing.py,sha256=Kz1WttDcSqHkt1fW9_UmkZG-G0noRY3FAStkfw_VUNE,57083
@@ -130,6 +131,7 @@ prefect/_vendor/starlette/datastructures.py,sha256=AyApp3jfD9muXBn8EVbuAVk6ZhCDY
130
131
  prefect/_vendor/starlette/endpoints.py,sha256=00KnI8grT2xxv1jERCvAgqwVxRDOo8hrqpFHnKow9xs,5319
131
132
  prefect/_vendor/starlette/exceptions.py,sha256=ODmYfjgNKWAZwfV8TDVepoEwhv1Kl92KvvwMvEJ04AA,1840
132
133
  prefect/_vendor/starlette/formparsers.py,sha256=aNoQl0CPI7pYnvae2k0KB2jNnv6mQJL-N2FuhRhPLW4,10450
134
+ prefect/_vendor/starlette/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
135
  prefect/_vendor/starlette/requests.py,sha256=dytpLA1l9oVb-u98i4caDI1z4-XtPCe1jzjFajlQWa8,10899
134
136
  prefect/_vendor/starlette/responses.py,sha256=1l36hyZeTXWYCQ8dYCo-eM_I6KyGuq_qUdtM9GBT3EA,12565
135
137
  prefect/_vendor/starlette/routing.py,sha256=Y0uiRXBQ0uRWs1O63qFD6doqKeh-KhqhuiHU5ovodQs,35696
@@ -153,7 +155,7 @@ prefect/_vendor/starlette/middleware/trustedhost.py,sha256=fDi67anj2a7MGviC0RAWh
153
155
  prefect/_vendor/starlette/middleware/wsgi.py,sha256=Ewk1cVDkcoXLVI2ZF0FEZLZCwCDjc0H7PnvWLlxurVY,5266
154
156
  prefect/blocks/__init__.py,sha256=BUfh6gIwA6HEjRyVCAiv0he3M1zfM-oY-JrlBfeWeY8,182
155
157
  prefect/blocks/abstract.py,sha256=AiAs0MC5JKCf0Xg0yofC5Qu2TZ52AjDMP1ntMGuP2dY,16311
156
- prefect/blocks/core.py,sha256=66pGFVPxtCCGWELqPXYqN8L0GoUXuUqv6jWw3Kk-tyY,43496
158
+ prefect/blocks/core.py,sha256=PWStXo61GsTmdVgyh1ubEkVatNzCacRyNXyG9caFMM4,43952
157
159
  prefect/blocks/fields.py,sha256=ANOzbNyDCBIvm6ktgbLTMs7JW2Sf6CruyATjAW61ks0,1607
158
160
  prefect/blocks/kubernetes.py,sha256=IN-hZkzIRvqjd_dzPZby3q8p7m2oUWqArBq24BU9cDg,4071
159
161
  prefect/blocks/notifications.py,sha256=LJd2mgV29URqItJyxtWUpdo4wswtm7KyIseuAjV3joI,28132
@@ -164,7 +166,7 @@ prefect/client/base.py,sha256=YSPeE7hV0NCuD6WzoAACDYGFK4Yq35d26pITZ3elNyY,24669
164
166
  prefect/client/cloud.py,sha256=E54OAFr7bY5IXhhMBdjGwLQiR0eU-WWFoEEiOq2l53I,4104
165
167
  prefect/client/collections.py,sha256=I9EgbTg4Fn57gn8vwP_WdDmgnATbx9gfkm2jjhCORjw,1037
166
168
  prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
167
- prefect/client/orchestration.py,sha256=O8DEbL7CP271MTVNlID8aRAl1xybfb6MwCUbYyjZejU,139211
169
+ prefect/client/orchestration.py,sha256=k_0W9QP0uCamt2FXW3JwZcAEDGS_ArwZx69lKsb02Gg,140180
168
170
  prefect/client/subscriptions.py,sha256=3kqPH3F-CwyrR5wygCpJMjRjM_gcQjd54Qjih6FcLlA,3372
169
171
  prefect/client/utilities.py,sha256=7V4IkfC8x_OZuPXGvtIMmwZCOW63hSY8iVQkuRYTR6g,3079
170
172
  prefect/client/schemas/__init__.py,sha256=KlyqFV-hMulMkNstBn_0ijoHoIwJZaBj6B1r07UmgvE,607
@@ -214,7 +216,7 @@ prefect/events/schemas/labelling.py,sha256=and3kx2SgnwD2MlMiRxNyFCV_CDZvAVvW1X9G
214
216
  prefect/infrastructure/__init__.py,sha256=Fm1Rhc4I7ZfJePpUAl1F4iNEtcDugoT650WXXt6xoCM,770
215
217
  prefect/infrastructure/base.py,sha256=s2nNbwXnqHV-sBy7LeZzV1IVjqAO0zv795HM4RHOvQI,10880
216
218
  prefect/infrastructure/container.py,sha256=gl38tFrym_wHQb0pCtcitMmHlL6eckHKAL3-EAM2Gec,32140
217
- prefect/infrastructure/kubernetes.py,sha256=28DLYNomVj2edmtM1c0ksbGUkBd1GwOlIIMDdSaLPbw,35703
219
+ prefect/infrastructure/kubernetes.py,sha256=_hU3W4S7ka-KeDONgQvFKdEA6vno4-eAdIhJEq2vb74,35727
218
220
  prefect/infrastructure/process.py,sha256=ZclTVl55ygEItkfB-ARFEIIZW4bk9ImuQzMTFfQNrnE,11324
219
221
  prefect/infrastructure/provisioners/__init__.py,sha256=e9rfFnLqqwjexvYoiRZIY-CEwK-7ZhCQm745Z-Uxon8,1666
220
222
  prefect/infrastructure/provisioners/cloud_run.py,sha256=kqk8yRZ4gfGJLgCEJL8vNYvRyONe2Mc4e_0DHeEb0iM,17658
@@ -235,14 +237,14 @@ prefect/logging/logging.yml,sha256=UkEewf0c3_dURI2uCU4RrxkhI5Devoa1s93fl7hilcg,3
235
237
  prefect/pydantic/__init__.py,sha256=BsW32X7fvl44J1JQer1tkEpfleMtL2kL5Uy1KmwWvso,2714
236
238
  prefect/pydantic/main.py,sha256=ups_UULBhCPhB-E7X7-Qgbpor1oJdqChRzpD0ZYQH8A,839
237
239
  prefect/runner/__init__.py,sha256=7U-vAOXFkzMfRz1q8Uv6Otsvc0OrPYLLP44srwkJ_8s,89
238
- prefect/runner/runner.py,sha256=45sZR2kDvhTODyGmeiRe-bgVWq5JHsmZvFPBsiiyKxA,45147
240
+ prefect/runner/runner.py,sha256=OUbLIFHtDYKso5sp6m799qAnu5dpkIQbA3rGutwoCAg,45162
239
241
  prefect/runner/server.py,sha256=kXbKSRG21f44BGqOlWR3dcfKs92begC74aM6GdZ_z4E,10674
240
242
  prefect/runner/storage.py,sha256=QkIDKB5NQzy_hoNgl74JKuo_BtiOR74r_-lhccdJEvI,24850
241
243
  prefect/runner/submit.py,sha256=w53VdsqfwjW-M3e8hUAAoVlNrXsvGuuyGpEN0wi3vX0,8537
242
244
  prefect/runner/utils.py,sha256=G8qv6AwAa43HcgLOo5vDhoXna1xP0HlaMVYEbAv0Pck,3318
243
245
  prefect/runtime/__init__.py,sha256=iYmfK1HmXiXXCQK77wDloOqZmY7SFF5iyr37jRzuf-c,406
244
246
  prefect/runtime/deployment.py,sha256=UWNXH-3-NNVxLCl5XnDKiofo4a5j8w_42ns1OSQMixg,4751
245
- prefect/runtime/flow_run.py,sha256=aFM3e9xqpeZQ4WkvZQXD0lmXu2fNVVVA1etSN3ZI9aE,8444
247
+ prefect/runtime/flow_run.py,sha256=J9VzMiVtgkHIhu5_liusi3efRuCB4TRCKflxWOmieg8,8955
246
248
  prefect/runtime/task_run.py,sha256=_np3pjBHWkvEtSe-QElEAGwUct629vVx_sahPr-H8gM,3402
247
249
  prefect/server/api/collections_data/views/aggregate-worker-metadata.json,sha256=hcS7IWry73QATmzD7qv-uXBmCOrqeKtfIFU46bv-CRs,80259
248
250
  prefect/server/api/static/prefect-logo-mark-gradient.png,sha256=ylRjJkI_JHCw8VbQasNnXQHwZW-sH-IQiUGSD3aWP1E,73430
@@ -255,7 +257,7 @@ prefect/types/__init__.py,sha256=aZvlQ2uXl949sJ_khmxSVkRH3o6edo-eJ_GBGMBN5Yg,313
255
257
  prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
258
  prefect/utilities/annotations.py,sha256=bXB43j5Zsq5gaBcJe9qnszBlnNwCTwqSTgcu2OkkRLo,2776
257
259
  prefect/utilities/asyncutils.py,sha256=ftu6MaV9qOZ3oCIErrneW07km2BydCezOMzvPUuCMUo,17246
258
- prefect/utilities/callables.py,sha256=YWilWp6oyL3D-hsyUuSE-h2KZ0aO_nbjhW75KsrLVmQ,21224
260
+ prefect/utilities/callables.py,sha256=0hzn4-51a2q1_aQ_QCymnl5NV-P9Zx5Nt0GUJahSAVg,21134
259
261
  prefect/utilities/collections.py,sha256=0v-NNXxYYzkUTCCNDMNB44AnDv9yj35UYouNraCqlo8,15449
260
262
  prefect/utilities/compat.py,sha256=mNQZDnzyKaOqy-OV-DnmH_dc7CNF5nQgW_EsA4xMr7g,906
261
263
  prefect/utilities/context.py,sha256=BThuUW94-IYgFYTeMIM9KMo8ShT3oiI7w5ajZHzU1j0,1377
@@ -280,13 +282,13 @@ prefect/utilities/schema_tools/__init__.py,sha256=KsFsTEHQqgp89TkDpjggkgBBywoHQP
280
282
  prefect/utilities/schema_tools/hydration.py,sha256=RNuJK4Vd__V69gdQbaWSVhSkV0AUISfGzH_xd0p6Zh0,8291
281
283
  prefect/utilities/schema_tools/validation.py,sha256=zZHL_UFxAlgaUzi-qsEOrhWtZ7EkFQvPkX_YN1EJNTo,8414
282
284
  prefect/workers/__init__.py,sha256=6el2Q856CuRPa5Hdrbm9QyAWB_ovcT2bImSFsoWI46k,66
283
- prefect/workers/base.py,sha256=LKIMS2DaQSQRV4rjbrMYeQnY-9rzgj_KWBRIq-8c5rg,45125
285
+ prefect/workers/base.py,sha256=wCCxTUuU5fIyLOkfjCIFIKi7T60B3-UQsyrq0kJuHjg,45351
284
286
  prefect/workers/block.py,sha256=aYY__uq3v1eq1kkbVukxyhQNbkknaKYo6-_3tcrfKKA,8067
285
287
  prefect/workers/process.py,sha256=pPtCdA7fKQ4OsvoitT-cayZeh5HgLX4xBUYlb2Zad-Q,9475
286
288
  prefect/workers/server.py,sha256=WVZJxR8nTMzK0ov0BD0xw5OyQpT26AxlXbsGQ1OrxeQ,1551
287
289
  prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
288
- prefect_client-2.20.1.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
289
- prefect_client-2.20.1.dist-info/METADATA,sha256=LRLUAgUEkAvRJjlJhMTYJWFPiAdSRA-kuaOYA5z9FCc,7407
290
- prefect_client-2.20.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
291
- prefect_client-2.20.1.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
292
- prefect_client-2.20.1.dist-info/RECORD,,
290
+ prefect_client-2.20.4.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
291
+ prefect_client-2.20.4.dist-info/METADATA,sha256=Xv8N3s6Crb2OcuHHdOlG87aBeW9LQ-CEyOBgiA9Q4O4,7391
292
+ prefect_client-2.20.4.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
293
+ prefect_client-2.20.4.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
294
+ prefect_client-2.20.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.44.0)
2
+ Generator: setuptools (74.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5