prefect-client 3.4.7.dev7__py3-none-any.whl → 3.4.7.dev9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
prefect/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.4.7.dev7"
3
- __build_date__ = "2025-06-24 08:09:27.221869+00:00"
4
- __git_commit__ = "3614ff28a5600b1965c957a04e880aaf38442ad5"
2
+ __version__ = "3.4.7.dev9"
3
+ __build_date__ = "2025-06-26 08:09:22.695909+00:00"
4
+ __git_commit__ = "6128bf88e0089a6ef517493eafb157d523ed0afd"
5
5
  __dirty__ = False
@@ -74,9 +74,10 @@ class WebsocketProxyConnect(connect):
74
74
  "Unsupported scheme %s. Expected 'ws' or 'wss'. " % u.scheme
75
75
  )
76
76
 
77
- self._proxy = (
78
- Proxy.from_url(proxy_url) if proxy_url and not proxy_bypass(host) else None
79
- )
77
+ # Store proxy URL for deferred creation. Creating the proxy object here
78
+ # can bind asyncio futures to the wrong event loop when multiple WebSocket
79
+ # connections are initialized at different times (e.g., events + logs clients).
80
+ self._proxy_url = proxy_url if proxy_url and not proxy_bypass(host) else None
80
81
  self._host = host
81
82
  self._port = port
82
83
 
@@ -86,8 +87,10 @@ class WebsocketProxyConnect(connect):
86
87
  self._kwargs.setdefault("ssl", ssl_context)
87
88
 
88
89
  async def _proxy_connect(self: Self) -> ClientConnection:
89
- if self._proxy:
90
- sock = await self._proxy.connect(
90
+ if self._proxy_url:
91
+ # Create proxy in the current event loop context
92
+ proxy = Proxy.from_url(self._proxy_url)
93
+ sock = await proxy.connect(
91
94
  dest_host=self._host,
92
95
  dest_port=self._port,
93
96
  )
prefect/artifacts.py CHANGED
@@ -55,7 +55,7 @@ class Artifact(ArtifactRequest):
55
55
  client: The PrefectClient
56
56
 
57
57
  Returns:
58
- - The created artifact.
58
+ The created artifact.
59
59
  """
60
60
 
61
61
  local_client_context = asyncnullcontext(client) if client else get_client()
@@ -93,7 +93,7 @@ class Artifact(ArtifactRequest):
93
93
  client: The PrefectClient
94
94
 
95
95
  Returns:
96
- - The created artifact.
96
+ The created artifact.
97
97
  """
98
98
 
99
99
  # Create sync client since this is a sync method.
@@ -417,6 +417,23 @@ def create_link_artifact(
417
417
 
418
418
  Returns:
419
419
  The table artifact ID.
420
+
421
+ Example:
422
+ ```python
423
+ from prefect import flow
424
+ from prefect.artifacts import create_link_artifact
425
+
426
+ @flow
427
+ def my_flow():
428
+ create_link_artifact(
429
+ link="https://www.prefect.io",
430
+ link_text="Prefect",
431
+ key="prefect-link",
432
+ description="This is a link to the Prefect website",
433
+ )
434
+
435
+ my_flow()
436
+ ```
420
437
  """
421
438
  new_artifact = LinkArtifact(
422
439
  key=key,
@@ -475,6 +492,22 @@ def create_markdown_artifact(
475
492
 
476
493
  Returns:
477
494
  The table artifact ID.
495
+
496
+ Example:
497
+ ```python
498
+ from prefect import flow
499
+ from prefect.artifacts import create_markdown_artifact
500
+
501
+ @flow
502
+ def my_flow():
503
+ create_markdown_artifact(
504
+ markdown="## Prefect",
505
+ key="prefect-markdown",
506
+ description="This is a markdown artifact",
507
+ )
508
+
509
+ my_flow()
510
+ ```
478
511
  """
479
512
  new_artifact = MarkdownArtifact(
480
513
  key=key,
@@ -533,6 +566,22 @@ def create_table_artifact(
533
566
 
534
567
  Returns:
535
568
  The table artifact ID.
569
+
570
+ Example:
571
+ ```python
572
+ from prefect import flow
573
+ from prefect.artifacts import create_table_artifact
574
+
575
+ @flow
576
+ def my_flow():
577
+ create_table_artifact(
578
+ table=[{"name": "John", "age": 30}, {"name": "Jane", "age": 25}],
579
+ key="prefect-table",
580
+ description="This is a table artifact",
581
+ )
582
+
583
+ my_flow()
584
+ ```
536
585
  """
537
586
 
538
587
  new_artifact = TableArtifact(
prefect/blocks/core.py CHANGED
@@ -175,11 +175,29 @@ def _collect_secret_fields(
175
175
  )
176
176
  return
177
177
 
178
- if type_ in (SecretStr, SecretBytes) or (
178
+ # Check if this is a pydantic Secret type (including generic Secret[T])
179
+ is_pydantic_secret = False
180
+
181
+ # Direct check for SecretStr, SecretBytes
182
+ if type_ in (SecretStr, SecretBytes):
183
+ is_pydantic_secret = True
184
+ # Check for base Secret class
185
+ elif (
179
186
  isinstance(type_, type) # type: ignore[unnecessaryIsInstance]
180
187
  and getattr(type_, "__module__", None) == "pydantic.types"
181
188
  and getattr(type_, "__name__", None) == "Secret"
182
189
  ):
190
+ is_pydantic_secret = True
191
+ # Check for generic Secret[T] (e.g., Secret[str], Secret[int])
192
+ elif get_origin(type_) is not None:
193
+ origin = get_origin(type_)
194
+ if (
195
+ getattr(origin, "__module__", None) == "pydantic.types"
196
+ and getattr(origin, "__name__", None) == "Secret"
197
+ ):
198
+ is_pydantic_secret = True
199
+
200
+ if is_pydantic_secret:
183
201
  secrets.append(name)
184
202
  elif type_ == SecretDict:
185
203
  # Append .* to field name to signify that all values under a given key are secret and should be obfuscated.
@@ -370,16 +388,27 @@ class Block(BaseModel, ABC):
370
388
  ) -> Any:
371
389
  jsonable_self = handler(self)
372
390
  if (ctx := info.context) and ctx.get("include_secrets") is True:
373
- jsonable_self.update(
374
- {
375
- field_name: visit_collection(
376
- expr=getattr(self, field_name),
377
- visit_fn=partial(handle_secret_render, context=ctx),
378
- return_data=True,
379
- )
380
- for field_name in type(self).model_fields
381
- }
382
- )
391
+ # Add serialization mode to context so handle_secret_render knows how to process nested models
392
+ ctx["serialization_mode"] = info.mode
393
+
394
+ for field_name in type(self).model_fields:
395
+ field_value = getattr(self, field_name)
396
+
397
+ # In JSON mode, skip fields that don't contain secrets
398
+ # as they're already properly serialized by the handler
399
+ if (
400
+ info.mode == "json"
401
+ and field_name in jsonable_self
402
+ and not self._field_has_secrets(field_name)
403
+ ):
404
+ continue
405
+
406
+ # For all other fields, use visit_collection with handle_secret_render
407
+ jsonable_self[field_name] = visit_collection(
408
+ expr=field_value,
409
+ visit_fn=partial(handle_secret_render, context=ctx),
410
+ return_data=True,
411
+ )
383
412
  extra_fields = {
384
413
  "block_type_slug": self.get_block_type_slug(),
385
414
  "_block_document_id": self._block_document_id,
@@ -477,6 +506,25 @@ class Block(BaseModel, ABC):
477
506
  else:
478
507
  return f"sha256:{checksum}"
479
508
 
509
+ def _field_has_secrets(self, field_name: str) -> bool:
510
+ """Check if a field contains secrets based on the schema's secret_fields."""
511
+ secret_fields = self.model_json_schema().get("secret_fields", [])
512
+
513
+ # Check if field_name matches any secret field pattern
514
+ for secret_field in secret_fields:
515
+ if secret_field == field_name:
516
+ return True
517
+ elif secret_field.startswith(f"{field_name}."):
518
+ # This field contains nested secrets
519
+ return True
520
+ elif secret_field.endswith(".*"):
521
+ # Handle wildcard patterns like "field.*"
522
+ prefix = secret_field[:-2] # Remove .*
523
+ if field_name == prefix:
524
+ return True
525
+
526
+ return False
527
+
480
528
  def _to_block_document(
481
529
  self,
482
530
  name: Optional[str] = None,
@@ -530,6 +578,29 @@ class Block(BaseModel, ABC):
530
578
  context={"include_secrets": include_secrets},
531
579
  )
532
580
 
581
+ # Ensure non-secret fields are JSON-serializable to avoid issues with types
582
+ # like SemanticVersion when the BlockDocument is later serialized
583
+ try:
584
+ json_data = self.model_dump(
585
+ mode="json",
586
+ by_alias=True,
587
+ include=data_keys,
588
+ context={"include_secrets": include_secrets},
589
+ )
590
+ # Replace non-secret, non-Block fields with their JSON representation
591
+ # We need to check the original field to determine if it's a secret or Block
592
+ for key in data_keys:
593
+ if key in block_document_data and key in json_data:
594
+ field_value = getattr(self, key)
595
+ # Only replace if the field doesn't contain secrets and is not a Block
596
+ if not self._field_has_secrets(key) and not isinstance(
597
+ field_value, Block
598
+ ):
599
+ block_document_data[key] = json_data[key]
600
+ except Exception:
601
+ # If JSON serialization fails, we'll handle it later
602
+ pass
603
+
533
604
  # Iterate through and find blocks that already have saved block documents to
534
605
  # create references to those saved block documents.
535
606
  for key in data_keys:
@@ -8,6 +8,7 @@ class LabelDiver:
8
8
  presenting the labels as a graph of objects that may be accessed by attribute. For
9
9
  example:
10
10
 
11
+ ```python
11
12
  diver = LabelDiver({
12
13
  'hello.world': 'foo',
13
14
  'hello.world.again': 'bar'
@@ -15,6 +16,7 @@ class LabelDiver:
15
16
 
16
17
  assert str(diver.hello.world) == 'foo'
17
18
  assert str(diver.hello.world.again) == 'bar'
19
+ ```
18
20
 
19
21
  """
20
22
 
@@ -33,20 +33,23 @@ def temporary_settings(
33
33
  See `Settings.copy_with_update` for details on different argument behavior.
34
34
 
35
35
  Examples:
36
- >>> from prefect.settings import PREFECT_API_URL
37
- >>>
38
- >>> with temporary_settings(updates={PREFECT_API_URL: "foo"}):
39
- >>> assert PREFECT_API_URL.value() == "foo"
40
- >>>
41
- >>> with temporary_settings(set_defaults={PREFECT_API_URL: "bar"}):
42
- >>> assert PREFECT_API_URL.value() == "foo"
43
- >>>
44
- >>> with temporary_settings(restore_defaults={PREFECT_API_URL}):
45
- >>> assert PREFECT_API_URL.value() is None
46
- >>>
47
- >>> with temporary_settings(set_defaults={PREFECT_API_URL: "bar"})
48
- >>> assert PREFECT_API_URL.value() == "bar"
49
- >>> assert PREFECT_API_URL.value() is None
36
+
37
+ ```python
38
+ from prefect.settings import PREFECT_API_URL
39
+
40
+ with temporary_settings(updates={PREFECT_API_URL: "foo"}):
41
+ assert PREFECT_API_URL.value() == "foo"
42
+
43
+ with temporary_settings(set_defaults={PREFECT_API_URL: "bar"}):
44
+ assert PREFECT_API_URL.value() == "foo"
45
+
46
+ with temporary_settings(restore_defaults={PREFECT_API_URL}):
47
+ assert PREFECT_API_URL.value() is None
48
+
49
+ with temporary_settings(set_defaults={PREFECT_API_URL: "bar"})
50
+ assert PREFECT_API_URL.value() == "bar"
51
+ assert PREFECT_API_URL.value() is None
52
+ ```
50
53
  """
51
54
  import prefect.context
52
55
 
@@ -629,12 +629,12 @@ def get_from_dict(
629
629
  The fetched value if the key exists, or the default value if it does not.
630
630
 
631
631
  Examples:
632
- >>> get_from_dict({'a': {'b': {'c': [1, 2, 3, 4]}}}, 'a.b.c[1]')
633
- 2
634
- >>> get_from_dict({'a': {'b': [0, {'c': [1, 2]}]}}, ['a', 'b', 1, 'c', 1])
635
- 2
636
- >>> get_from_dict({'a': {'b': [0, {'c': [1, 2]}]}}, 'a.b.1.c.2', 'default')
637
- 'default'
632
+
633
+ ```python
634
+ get_from_dict({'a': {'b': {'c': [1, 2, 3, 4]}}}, 'a.b.c[1]') # 2
635
+ get_from_dict({'a': {'b': [0, {'c': [1, 2]}]}}, ['a', 'b', 1, 'c', 1]) # 2
636
+ get_from_dict({'a': {'b': [0, {'c': [1, 2]}]}}, 'a.b.1.c.2', 'default') # 'default'
637
+ ```
638
638
  """
639
639
  if isinstance(keys, str):
640
640
  keys = keys.replace("[", ".").replace("]", "").split(".")
@@ -72,9 +72,12 @@ async def collect_task_run_inputs(
72
72
  found.
73
73
 
74
74
  Examples:
75
- >>> task_inputs = {
76
- >>> k: await collect_task_run_inputs(v) for k, v in parameters.items()
77
- >>> }
75
+
76
+ ```python
77
+ task_inputs = {
78
+ k: await collect_task_run_inputs(v) for k, v in parameters.items()
79
+ }
80
+ ```
78
81
  """
79
82
  # TODO: This function needs to be updated to detect parameters and constants
80
83
 
@@ -120,9 +123,11 @@ def collect_task_run_inputs_sync(
120
123
  found.
121
124
 
122
125
  Examples:
123
- >>> task_inputs = {
124
- >>> k: collect_task_run_inputs_sync(v) for k, v in parameters.items()
125
- >>> }
126
+ ```python
127
+ task_inputs = {
128
+ k: collect_task_run_inputs_sync(v) for k, v in parameters.items()
129
+ }
130
+ ```
126
131
  """
127
132
  # TODO: This function needs to be updated to detect parameters and constants
128
133
 
@@ -1,4 +1,5 @@
1
1
  import warnings
2
+ from functools import partial
2
3
  from typing import (
3
4
  Any,
4
5
  Callable,
@@ -20,6 +21,7 @@ from pydantic import (
20
21
  from pydantic_core import to_jsonable_python
21
22
  from typing_extensions import Literal
22
23
 
24
+ from prefect.utilities.collections import visit_collection
23
25
  from prefect.utilities.dispatch import get_dispatch_key, lookup_type, register_base_type
24
26
  from prefect.utilities.importtools import from_qualified_name, to_qualified_name
25
27
  from prefect.utilities.names import obfuscate
@@ -344,7 +346,23 @@ def handle_secret_render(value: object, context: dict[str, Any]) -> object:
344
346
  else obfuscate(value)
345
347
  )
346
348
  elif isinstance(value, BaseModel):
347
- return value.model_dump(context=context)
349
+ # Pass the serialization mode if available in context
350
+ mode = context.get("serialization_mode", "python")
351
+ if mode == "json":
352
+ # For JSON mode with nested models, we need to recursively process fields
353
+ # because regular Pydantic models don't understand include_secrets
354
+
355
+ json_data = value.model_dump(mode="json")
356
+ for field_name in type(value).model_fields:
357
+ field_value = getattr(value, field_name)
358
+ json_data[field_name] = visit_collection(
359
+ expr=field_value,
360
+ visit_fn=partial(handle_secret_render, context=context),
361
+ return_data=True,
362
+ )
363
+ return json_data
364
+ else:
365
+ return value.model_dump(context=context)
348
366
  return value
349
367
 
350
368
 
prefect/workers/base.py CHANGED
@@ -208,10 +208,12 @@ class BaseJobConfiguration(BaseModel):
208
208
  Defaults to using the job configuration parameter name as the template variable name.
209
209
 
210
210
  e.g.
211
+ ```python
211
212
  {
212
213
  key1: '{{ key1 }}', # default variable template
213
214
  key2: '{{ template2 }}', # `template2` specifically provide as template
214
215
  }
216
+ ```
215
217
  """
216
218
  configuration: dict[str, Any] = {}
217
219
  properties = cls.model_json_schema()["properties"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.4.7.dev7
3
+ Version: 3.4.7.dev9
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
@@ -2,12 +2,12 @@ prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
2
2
  prefect/AGENTS.md,sha256=qmCZAuKIF9jQyp5TrW_T8bsM_97-QaiCoQp71A_b2Lg,1008
3
3
  prefect/__init__.py,sha256=iCdcC5ZmeewikCdnPEP6YBAjPNV5dvfxpYCTpw30Hkw,3685
4
4
  prefect/__main__.py,sha256=WFjw3kaYJY6pOTA7WDOgqjsz8zUEUZHCcj3P5wyVa-g,66
5
- prefect/_build_info.py,sha256=cJqOi7wQGRupy4Rsu7Su9cZXMkfbV29ES1HTg1M-8LQ,185
5
+ prefect/_build_info.py,sha256=yEuA5A5loMu-7rtiAcPg6Ueq-eaNuXnmZDWR0wamLl8,185
6
6
  prefect/_result_records.py,sha256=S6QmsODkehGVSzbMm6ig022PYbI6gNKz671p_8kBYx4,7789
7
7
  prefect/_versioning.py,sha256=YqR5cxXrY4P6LM1Pmhd8iMo7v_G2KJpGNdsf4EvDFQ0,14132
8
8
  prefect/_waiters.py,sha256=Ia2ITaXdHzevtyWIgJoOg95lrEXQqNEOquHvw3T33UQ,9026
9
9
  prefect/agent.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
10
- prefect/artifacts.py,sha256=dMBUOAWnUamzjb5HSqwB5-GR2Qb-Gxee26XG5NDCUuw,22720
10
+ prefect/artifacts.py,sha256=ZdMLJeJGK82hibtRzbsVa-g95dMa0D2UP1LiESoXmf4,23951
11
11
  prefect/automations.py,sha256=ZzPxn2tINdlXTQo805V4rIlbXuNWxd7cdb3gTJxZIeY,12567
12
12
  prefect/cache_policies.py,sha256=jH1aDW6vItTcsEytuTCrNYyjbq87IQPwdOgF0yxiUts,12749
13
13
  prefect/context.py,sha256=2yhyJmomB0S8n18vCYZIykqZFmUAiqTH06qigAsoGtk,32648
@@ -45,7 +45,7 @@ prefect/_internal/integrations.py,sha256=U4cZMDbnilzZSKaMxvzZcSL27a1tzRMjDoTfr2u
45
45
  prefect/_internal/pytz.py,sha256=Sy_cD-Hkmo_Yrhx2Jucy7DgTRhvO8ZD0whW1ywbSg_U,13765
46
46
  prefect/_internal/retries.py,sha256=pMHofrTQPDSxbVWclDwXbfhFKaDC6sxe1DkUOWugV6k,3040
47
47
  prefect/_internal/uuid7.py,sha256=yvndhibNDrqnYrG-qUncas4XQp8bKVbmM8XfF7JrjJI,4203
48
- prefect/_internal/websockets.py,sha256=CloIdusf2Bbefdit46pT91cVDudeYtztPI-MmqSnuLI,3466
48
+ prefect/_internal/websockets.py,sha256=G-93Wm8BQeKgXHrCdUtQQNBbVH6puS2G00M-g82Tllc,3792
49
49
  prefect/_internal/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  prefect/_internal/compatibility/async_dispatch.py,sha256=cUXOqSeseMUaje9oYUzasVPtNttyiHvrqfJl0zK66XI,2949
51
51
  prefect/_internal/compatibility/blocks.py,sha256=SSZXoWVuCMYu1EzjqmTa4lKjDCyxvOFK47XMj6s4hsk,984
@@ -78,7 +78,7 @@ prefect/assets/core.py,sha256=9iGsGqZ74UdCwZcLqUogPgVscBROIVeczv-TpB9fnYA,2179
78
78
  prefect/assets/materialize.py,sha256=GcHn1HEbCpExka0IOOz2b_2ZsJFROIo5y7DCP5GjpI8,1143
79
79
  prefect/blocks/__init__.py,sha256=D0hB72qMfgqnBB2EMZRxUxlX9yLfkab5zDChOwJZmkY,220
80
80
  prefect/blocks/abstract.py,sha256=mpOAWopSR_RrzdxeurBTXVSKisP8ne-k8LYos-tp7go,17021
81
- prefect/blocks/core.py,sha256=iP-g6guW9HFkt-sFpgH8WCyWhwnH5zIoUJuI2ykImG0,62894
81
+ prefect/blocks/core.py,sha256=BYcej5ktmiRjoTRLJUKcEOzYrX7DC-ielKCu8azcJJQ,65991
82
82
  prefect/blocks/fields.py,sha256=1m507VVmkpOnMF_7N-qboRjtw4_ceIuDneX3jZ3Jm54,63
83
83
  prefect/blocks/notifications.py,sha256=NEhdnV_Alt_dGSfq8T1q2l0frh8IVvLCfn0YjXBLJdU,34861
84
84
  prefect/blocks/redis.py,sha256=lt_f1SIcS5OVvthCY6KRWiy5DyUZNRlHqkKhKF25P8c,5770
@@ -166,7 +166,7 @@ prefect/events/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
166
166
  prefect/events/schemas/automations.py,sha256=GVAfgyNoTxr8NpEw_Ao-1Prfd_MSsrhrLsXv6SLKUdY,14775
167
167
  prefect/events/schemas/deployment_triggers.py,sha256=OX9g9eHe0nqJ3PtVEzqs9Ub2LaOHMA4afLZSvSukKGU,3191
168
168
  prefect/events/schemas/events.py,sha256=r8sSx2Q1A0KIofnZR_Bri7YT1wzXKV3YS-LnxpeIXHE,9270
169
- prefect/events/schemas/labelling.py,sha256=bU-XYaHXhI2MEBIHngth96R9D02m8HHb85KNcHZ_1Gc,3073
169
+ prefect/events/schemas/labelling.py,sha256=McGy7dq6Ry2GY3ejnMQnkuL_h77F5MnHXQkyCdePlLU,3103
170
170
  prefect/infrastructure/__init__.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
171
171
  prefect/infrastructure/base.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
172
172
  prefect/infrastructure/provisioners/__init__.py,sha256=NTDdbkBE37FiBcroja5huuyWr4xYljjQp3ZnD7oplrA,1801
@@ -245,7 +245,7 @@ prefect/server/api/ui/task_runs.py,sha256=6CMrHmY-ybJGHXz7YlVVP2ZTmvq7w-XA9GUHqC
245
245
  prefect/settings/__init__.py,sha256=3jDLzExmq9HsRWo1kTSE16BO_3B3JlVsk5pR0s4PWEQ,2136
246
246
  prefect/settings/base.py,sha256=VtBSwBLowLvtBVDq3ZY5oKAwosMqsDMt2gcXLAiFf5k,9682
247
247
  prefect/settings/constants.py,sha256=5NjVLG1Km9J9I-a6wrq-qmi_dTkPdwEk3IrY9bSxWvw,281
248
- prefect/settings/context.py,sha256=yKxnaDJHX8e2jmAVtw1RF9o7X4V3AOcz61sVeQyPX2c,2195
248
+ prefect/settings/context.py,sha256=VtMJsBtjwq_P3La9_SRYedBkyjmMNqV_4X_U4h_-6wM,2142
249
249
  prefect/settings/legacy.py,sha256=KG00GwaURl1zbwfCKAjwNRdJjB2UdTyo80gYF7U60jk,5693
250
250
  prefect/settings/profiles.py,sha256=Mk-fcfDUuJx5zIpp87Ar8d9jLFTgCOM83vEJWgmECBc,12795
251
251
  prefect/settings/profiles.toml,sha256=kTvqDNMzjH3fsm5OEI-NKY4dMmipor5EvQXRB6rPEjY,522
@@ -297,12 +297,12 @@ prefect/utilities/_git.py,sha256=bPYWQdr9xvH0BqxR1ll1RkaSb3x0vhwylhYD5EilkKU,863
297
297
  prefect/utilities/annotations.py,sha256=0Elqgq6LR7pQqezNqT5wb6U_0e2pDO_zx6VseVL6kL8,4396
298
298
  prefect/utilities/asyncutils.py,sha256=xcfeNym2j3WH4gKXznON2hI1PpUTcwr_BGc16IQS3C4,19789
299
299
  prefect/utilities/callables.py,sha256=57adLaN2QGJEE0YCdv1jS1L5R3vi4IuzPiNVZ7cCcEk,25930
300
- prefect/utilities/collections.py,sha256=c3nPLPWqIZQQdNuHs_nrbQJwuhQSX4ivUl-h9LtzXto,23243
300
+ prefect/utilities/collections.py,sha256=HP1s3B1d10woWzzRG8GU5Qwvq5yp4dKQ97u9Szz-d0k,23248
301
301
  prefect/utilities/compat.py,sha256=nnPA3lf2f4Y-l645tYFFNmj5NDPaYvjqa9pbGKZ3WKE,582
302
302
  prefect/utilities/context.py,sha256=23SDMgdt07SjmB1qShiykHfGgiv55NBzdbMXM3fE9CI,1447
303
303
  prefect/utilities/dispatch.py,sha256=u6GSGSO3_6vVoIqHVc849lsKkC-I1wUl6TX134GwRBo,6310
304
304
  prefect/utilities/dockerutils.py,sha256=6DLVyzE195IzeQSWERiK1t3bDMnYBLe0zXIpMQ4r0c0,21659
305
- prefect/utilities/engine.py,sha256=nMtKaTDOIbMbUmDR3PcA_BOjOFKuginmrOERwfzub04,28316
305
+ prefect/utilities/engine.py,sha256=4__SXJb_Rl9PrKFYALWTPzzpE_VUAlvWaA6xyQCucSo,28357
306
306
  prefect/utilities/filesystem.py,sha256=Pwesv71PGFhf3lPa1iFyMqZZprBjy9nEKCVxTkf_hXw,5710
307
307
  prefect/utilities/generics.py,sha256=o77e8a5iwmrisOf42wLp2WI9YvSw2xDW4vFdpdEwr3I,543
308
308
  prefect/utilities/hashing.py,sha256=7jRy26s46IJAFRmVnCnoK9ek9N4p_UfXxQQvu2tW6dM,2589
@@ -310,7 +310,7 @@ prefect/utilities/importtools.py,sha256=Bgis-5EFaX8XekwiXa2Cr4jE76yiFBmp0mQ9iGZs
310
310
  prefect/utilities/math.py,sha256=UPIdJMP13lCU3o0Yz98o4VDw3LTkkrsOAsvAdA3Xifc,2954
311
311
  prefect/utilities/names.py,sha256=PcNp3IbSoJY6P3UiJDYDjpYQw6BYWtn6OarFDCq1dUE,1744
312
312
  prefect/utilities/processutils.py,sha256=k_VD41Q0EBz-DP2lN7AcOkFGpYH3ekKGk4YV_OuvQc8,16255
313
- prefect/utilities/pydantic.py,sha256=3PADBIqHKzrc6r3mNupgJ-sFyDH4INaVB1lJpvLGj5Q,12295
313
+ prefect/utilities/pydantic.py,sha256=qF4brsWU6AYdJZFwglHv9AM9LjJ_rNKspWgbHYSo2Y0,13141
314
314
  prefect/utilities/render_swagger.py,sha256=y0GcR38qW083lUPrfHIbDVKPm_fyyodtBM8MTLNF8oI,4155
315
315
  prefect/utilities/services.py,sha256=WRT77LW2IX3TCYoGIBsG-V8K_2P3oQWgtW7XkBGnhcs,7714
316
316
  prefect/utilities/slugify.py,sha256=57Vb14t13F3zm1P65KAu8nVeAz0iJCd1Qc5eMG-R5y8,169
@@ -323,13 +323,13 @@ prefect/utilities/schema_tools/__init__.py,sha256=At3rMHd2g_Em2P3_dFQlFgqR_EpBwr
323
323
  prefect/utilities/schema_tools/hydration.py,sha256=NkRhWkNfxxFmVGhNDfmxdK_xeKaEhs3a42q83Sg9cT4,9436
324
324
  prefect/utilities/schema_tools/validation.py,sha256=Wix26IVR-ZJ32-6MX2pHhrwm3reB-Q4iB6_phn85OKE,10743
325
325
  prefect/workers/__init__.py,sha256=EaM1F0RZ-XIJaGeTKLsXDnfOPHzVWk5bk0_c4BVS44M,64
326
- prefect/workers/base.py,sha256=_Puzm_f2Q7YLI89G_u9oM3esvwUWIKZ3fpfPqi-KMQk,62358
326
+ prefect/workers/base.py,sha256=umyfDUcyn1Ao4FCrtDH52t1KXLLIy0k3LYNIjPNxbGw,62388
327
327
  prefect/workers/block.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
328
328
  prefect/workers/cloud.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
329
329
  prefect/workers/process.py,sha256=Yi5D0U5AQ51wHT86GdwtImXSefe0gJf3LGq4r4z9zwM,11090
330
330
  prefect/workers/server.py,sha256=2pmVeJZiVbEK02SO6BEZaBIvHMsn6G8LzjW8BXyiTtk,1952
331
331
  prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
332
- prefect_client-3.4.7.dev7.dist-info/METADATA,sha256=YJvQqTJ9Dj42ijE5NXHSfOkx0rZ7cSaNJyaRanfYQE8,7517
333
- prefect_client-3.4.7.dev7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
334
- prefect_client-3.4.7.dev7.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
335
- prefect_client-3.4.7.dev7.dist-info/RECORD,,
332
+ prefect_client-3.4.7.dev9.dist-info/METADATA,sha256=AzA76GgKo_GT40aBJr76COGca8HnWxy0O7W43ppQbAM,7517
333
+ prefect_client-3.4.7.dev9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
334
+ prefect_client-3.4.7.dev9.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
335
+ prefect_client-3.4.7.dev9.dist-info/RECORD,,