prefect-client 3.1.12__py3-none-any.whl → 3.1.14__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.
Files changed (111) hide show
  1. prefect/_experimental/lineage.py +63 -0
  2. prefect/_experimental/sla/client.py +53 -27
  3. prefect/_experimental/sla/objects.py +10 -2
  4. prefect/_internal/concurrency/services.py +2 -2
  5. prefect/_internal/concurrency/threads.py +6 -0
  6. prefect/_internal/retries.py +6 -3
  7. prefect/_internal/schemas/validators.py +6 -4
  8. prefect/_version.py +3 -3
  9. prefect/artifacts.py +4 -1
  10. prefect/automations.py +1 -1
  11. prefect/blocks/abstract.py +5 -2
  12. prefect/blocks/notifications.py +1 -0
  13. prefect/cache_policies.py +70 -22
  14. prefect/client/orchestration/_automations/client.py +4 -0
  15. prefect/client/orchestration/_deployments/client.py +3 -3
  16. prefect/client/utilities.py +3 -3
  17. prefect/context.py +16 -6
  18. prefect/deployments/base.py +7 -4
  19. prefect/deployments/flow_runs.py +5 -1
  20. prefect/deployments/runner.py +6 -11
  21. prefect/deployments/steps/core.py +1 -1
  22. prefect/deployments/steps/pull.py +8 -3
  23. prefect/deployments/steps/utility.py +2 -2
  24. prefect/docker/docker_image.py +13 -9
  25. prefect/engine.py +19 -10
  26. prefect/events/cli/automations.py +4 -4
  27. prefect/events/clients.py +17 -14
  28. prefect/events/filters.py +34 -34
  29. prefect/events/schemas/automations.py +12 -8
  30. prefect/events/schemas/events.py +5 -1
  31. prefect/events/worker.py +1 -1
  32. prefect/filesystems.py +1 -1
  33. prefect/flow_engine.py +172 -123
  34. prefect/flows.py +119 -74
  35. prefect/futures.py +14 -7
  36. prefect/infrastructure/provisioners/__init__.py +2 -0
  37. prefect/infrastructure/provisioners/cloud_run.py +4 -4
  38. prefect/infrastructure/provisioners/coiled.py +249 -0
  39. prefect/infrastructure/provisioners/container_instance.py +4 -3
  40. prefect/infrastructure/provisioners/ecs.py +55 -43
  41. prefect/infrastructure/provisioners/modal.py +5 -4
  42. prefect/input/actions.py +5 -1
  43. prefect/input/run_input.py +157 -43
  44. prefect/logging/configuration.py +5 -8
  45. prefect/logging/filters.py +2 -2
  46. prefect/logging/formatters.py +15 -11
  47. prefect/logging/handlers.py +24 -14
  48. prefect/logging/highlighters.py +5 -5
  49. prefect/logging/loggers.py +29 -20
  50. prefect/main.py +3 -1
  51. prefect/results.py +166 -86
  52. prefect/runner/runner.py +112 -84
  53. prefect/runner/server.py +3 -1
  54. prefect/runner/storage.py +18 -18
  55. prefect/runner/submit.py +19 -12
  56. prefect/runtime/deployment.py +15 -8
  57. prefect/runtime/flow_run.py +19 -6
  58. prefect/runtime/task_run.py +7 -3
  59. prefect/settings/base.py +17 -7
  60. prefect/settings/legacy.py +4 -4
  61. prefect/settings/models/api.py +4 -3
  62. prefect/settings/models/cli.py +4 -3
  63. prefect/settings/models/client.py +7 -4
  64. prefect/settings/models/cloud.py +4 -3
  65. prefect/settings/models/deployments.py +4 -3
  66. prefect/settings/models/experiments.py +4 -3
  67. prefect/settings/models/flows.py +4 -3
  68. prefect/settings/models/internal.py +4 -3
  69. prefect/settings/models/logging.py +8 -6
  70. prefect/settings/models/results.py +4 -3
  71. prefect/settings/models/root.py +11 -16
  72. prefect/settings/models/runner.py +8 -5
  73. prefect/settings/models/server/api.py +6 -3
  74. prefect/settings/models/server/database.py +120 -25
  75. prefect/settings/models/server/deployments.py +4 -3
  76. prefect/settings/models/server/ephemeral.py +7 -4
  77. prefect/settings/models/server/events.py +6 -3
  78. prefect/settings/models/server/flow_run_graph.py +4 -3
  79. prefect/settings/models/server/root.py +4 -3
  80. prefect/settings/models/server/services.py +15 -12
  81. prefect/settings/models/server/tasks.py +7 -4
  82. prefect/settings/models/server/ui.py +4 -3
  83. prefect/settings/models/tasks.py +10 -5
  84. prefect/settings/models/testing.py +4 -3
  85. prefect/settings/models/worker.py +7 -4
  86. prefect/settings/profiles.py +13 -12
  87. prefect/settings/sources.py +20 -19
  88. prefect/states.py +17 -13
  89. prefect/task_engine.py +43 -33
  90. prefect/task_runners.py +35 -23
  91. prefect/task_runs.py +20 -11
  92. prefect/task_worker.py +12 -7
  93. prefect/tasks.py +67 -25
  94. prefect/telemetry/bootstrap.py +4 -1
  95. prefect/telemetry/run_telemetry.py +15 -13
  96. prefect/transactions.py +3 -3
  97. prefect/types/__init__.py +9 -6
  98. prefect/types/_datetime.py +19 -0
  99. prefect/utilities/_deprecated.py +38 -0
  100. prefect/utilities/engine.py +11 -4
  101. prefect/utilities/filesystem.py +2 -2
  102. prefect/utilities/generics.py +1 -1
  103. prefect/utilities/pydantic.py +21 -36
  104. prefect/workers/base.py +52 -30
  105. prefect/workers/process.py +20 -15
  106. prefect/workers/server.py +4 -5
  107. {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/METADATA +2 -2
  108. {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/RECORD +111 -108
  109. {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/LICENSE +0 -0
  110. {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/WHEEL +0 -0
  111. {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import io
2
4
  import logging
3
5
  import sys
@@ -5,7 +7,7 @@ from builtins import print
5
7
  from contextlib import contextmanager
6
8
  from functools import lru_cache
7
9
  from logging import LogRecord
8
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
10
+ from typing import TYPE_CHECKING, Any, List, Mapping, MutableMapping, Optional, Union
9
11
 
10
12
  from typing_extensions import Self
11
13
 
@@ -13,19 +15,21 @@ from prefect.exceptions import MissingContextError
13
15
  from prefect.logging.filters import ObfuscateApiKeyFilter
14
16
  from prefect.telemetry.logging import add_telemetry_log_handler
15
17
 
18
+ if sys.version_info >= (3, 12):
19
+ LoggingAdapter = logging.LoggerAdapter[logging.Logger]
20
+ else:
21
+ if TYPE_CHECKING:
22
+ LoggingAdapter = logging.LoggerAdapter[logging.Logger]
23
+ else:
24
+ LoggingAdapter = logging.LoggerAdapter
25
+
16
26
  if TYPE_CHECKING:
17
- from prefect.client.schemas import FlowRun as ClientFlowRun
18
27
  from prefect.client.schemas.objects import FlowRun, TaskRun
19
28
  from prefect.context import RunContext
20
29
  from prefect.flows import Flow
21
30
  from prefect.tasks import Task
22
31
  from prefect.workers.base import BaseWorker
23
32
 
24
- if sys.version_info >= (3, 12):
25
- LoggingAdapter = logging.LoggerAdapter[logging.Logger]
26
- else:
27
- LoggingAdapter = logging.LoggerAdapter
28
-
29
33
 
30
34
  class PrefectLogAdapter(LoggingAdapter):
31
35
  """
@@ -37,27 +41,28 @@ class PrefectLogAdapter(LoggingAdapter):
37
41
  not a bug in the LoggingAdapter and subclassing is the intended workaround.
38
42
  """
39
43
 
40
- def process(self, msg, kwargs):
44
+ def process(
45
+ self, msg: str, kwargs: MutableMapping[str, Any]
46
+ ) -> tuple[str, MutableMapping[str, Any]]:
41
47
  kwargs["extra"] = {**(self.extra or {}), **(kwargs.get("extra") or {})}
42
48
  return (msg, kwargs)
43
49
 
44
50
  def getChild(
45
- self, suffix: str, extra: Optional[Dict[str, str]] = None
51
+ self, suffix: str, extra: dict[str, Any] | None = None
46
52
  ) -> "PrefectLogAdapter":
47
- if extra is None:
48
- extra = {}
53
+ _extra: Mapping[str, object] = extra or {}
49
54
 
50
55
  return PrefectLogAdapter(
51
56
  self.logger.getChild(suffix),
52
57
  extra={
53
- **self.extra,
54
- **extra,
58
+ **(self.extra or {}),
59
+ **_extra,
55
60
  },
56
61
  )
57
62
 
58
63
 
59
64
  @lru_cache()
60
- def get_logger(name: Optional[str] = None) -> logging.Logger:
65
+ def get_logger(name: str | None = None) -> logging.Logger:
61
66
  """
62
67
  Get a `prefect` logger. These loggers are intended for internal use within the
63
68
  `prefect` package.
@@ -158,10 +163,10 @@ def get_run_logger(
158
163
 
159
164
 
160
165
  def flow_run_logger(
161
- flow_run: Union["FlowRun", "ClientFlowRun"],
166
+ flow_run: "FlowRun",
162
167
  flow: Optional["Flow[Any, Any]"] = None,
163
168
  **kwargs: str,
164
- ) -> LoggingAdapter:
169
+ ) -> PrefectLogAdapter:
165
170
  """
166
171
  Create a flow run logger with the run's metadata attached.
167
172
 
@@ -189,7 +194,7 @@ def task_run_logger(
189
194
  flow_run: Optional["FlowRun"] = None,
190
195
  flow: Optional["Flow[Any, Any]"] = None,
191
196
  **kwargs: Any,
192
- ):
197
+ ) -> LoggingAdapter:
193
198
  """
194
199
  Create a task run logger with the run's metadata attached.
195
200
 
@@ -225,7 +230,9 @@ def task_run_logger(
225
230
  )
226
231
 
227
232
 
228
- def get_worker_logger(worker: "BaseWorker", name: Optional[str] = None):
233
+ def get_worker_logger(
234
+ worker: "BaseWorker[Any, Any, Any]", name: Optional[str] = None
235
+ ) -> logging.Logger | LoggingAdapter:
229
236
  """
230
237
  Create a worker logger with the worker's metadata attached.
231
238
 
@@ -361,7 +368,9 @@ class LogEavesdropper(logging.Handler):
361
368
  # It's important that we use a very minimalistic formatter for use cases where
362
369
  # we may present these logs back to the user. We shouldn't leak filenames,
363
370
  # versions, or other environmental information.
364
- self.formatter = logging.Formatter("[%(levelname)s]: %(message)s")
371
+ self.formatter: logging.Formatter | None = logging.Formatter(
372
+ "[%(levelname)s]: %(message)s"
373
+ )
365
374
 
366
375
  def __enter__(self) -> Self:
367
376
  self._target_logger = logging.getLogger(self.eavesdrop_on)
@@ -371,7 +380,7 @@ class LogEavesdropper(logging.Handler):
371
380
  self._lines = []
372
381
  return self
373
382
 
374
- def __exit__(self, *_):
383
+ def __exit__(self, *_: Any) -> None:
375
384
  if self._target_logger:
376
385
  self._target_logger.removeHandler(self)
377
386
  self._target_logger.level = self._original_level
prefect/main.py CHANGED
@@ -3,7 +3,7 @@ from typing import Any
3
3
  from prefect.deployments import deploy
4
4
  from prefect.states import State
5
5
  from prefect.logging import get_run_logger
6
- from prefect.flows import flow, Flow, serve, aserve
6
+ from prefect.flows import FlowDecorator, flow, Flow, serve, aserve
7
7
  from prefect.transactions import Transaction
8
8
  from prefect.tasks import task, Task
9
9
  from prefect.context import tags
@@ -58,6 +58,8 @@ from prefect._internal.compatibility.deprecated import (
58
58
 
59
59
  inject_renamed_module_alias_finder()
60
60
 
61
+ flow: FlowDecorator
62
+
61
63
 
62
64
  # Declare API for type-checkers
63
65
  __all__ = [