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.
- prefect/_experimental/lineage.py +63 -0
- prefect/_experimental/sla/client.py +53 -27
- prefect/_experimental/sla/objects.py +10 -2
- prefect/_internal/concurrency/services.py +2 -2
- prefect/_internal/concurrency/threads.py +6 -0
- prefect/_internal/retries.py +6 -3
- prefect/_internal/schemas/validators.py +6 -4
- prefect/_version.py +3 -3
- prefect/artifacts.py +4 -1
- prefect/automations.py +1 -1
- prefect/blocks/abstract.py +5 -2
- prefect/blocks/notifications.py +1 -0
- prefect/cache_policies.py +70 -22
- prefect/client/orchestration/_automations/client.py +4 -0
- prefect/client/orchestration/_deployments/client.py +3 -3
- prefect/client/utilities.py +3 -3
- prefect/context.py +16 -6
- prefect/deployments/base.py +7 -4
- prefect/deployments/flow_runs.py +5 -1
- prefect/deployments/runner.py +6 -11
- prefect/deployments/steps/core.py +1 -1
- prefect/deployments/steps/pull.py +8 -3
- prefect/deployments/steps/utility.py +2 -2
- prefect/docker/docker_image.py +13 -9
- prefect/engine.py +19 -10
- prefect/events/cli/automations.py +4 -4
- prefect/events/clients.py +17 -14
- prefect/events/filters.py +34 -34
- prefect/events/schemas/automations.py +12 -8
- prefect/events/schemas/events.py +5 -1
- prefect/events/worker.py +1 -1
- prefect/filesystems.py +1 -1
- prefect/flow_engine.py +172 -123
- prefect/flows.py +119 -74
- prefect/futures.py +14 -7
- prefect/infrastructure/provisioners/__init__.py +2 -0
- prefect/infrastructure/provisioners/cloud_run.py +4 -4
- prefect/infrastructure/provisioners/coiled.py +249 -0
- prefect/infrastructure/provisioners/container_instance.py +4 -3
- prefect/infrastructure/provisioners/ecs.py +55 -43
- prefect/infrastructure/provisioners/modal.py +5 -4
- prefect/input/actions.py +5 -1
- prefect/input/run_input.py +157 -43
- prefect/logging/configuration.py +5 -8
- prefect/logging/filters.py +2 -2
- prefect/logging/formatters.py +15 -11
- prefect/logging/handlers.py +24 -14
- prefect/logging/highlighters.py +5 -5
- prefect/logging/loggers.py +29 -20
- prefect/main.py +3 -1
- prefect/results.py +166 -86
- prefect/runner/runner.py +112 -84
- prefect/runner/server.py +3 -1
- prefect/runner/storage.py +18 -18
- prefect/runner/submit.py +19 -12
- prefect/runtime/deployment.py +15 -8
- prefect/runtime/flow_run.py +19 -6
- prefect/runtime/task_run.py +7 -3
- prefect/settings/base.py +17 -7
- prefect/settings/legacy.py +4 -4
- prefect/settings/models/api.py +4 -3
- prefect/settings/models/cli.py +4 -3
- prefect/settings/models/client.py +7 -4
- prefect/settings/models/cloud.py +4 -3
- prefect/settings/models/deployments.py +4 -3
- prefect/settings/models/experiments.py +4 -3
- prefect/settings/models/flows.py +4 -3
- prefect/settings/models/internal.py +4 -3
- prefect/settings/models/logging.py +8 -6
- prefect/settings/models/results.py +4 -3
- prefect/settings/models/root.py +11 -16
- prefect/settings/models/runner.py +8 -5
- prefect/settings/models/server/api.py +6 -3
- prefect/settings/models/server/database.py +120 -25
- prefect/settings/models/server/deployments.py +4 -3
- prefect/settings/models/server/ephemeral.py +7 -4
- prefect/settings/models/server/events.py +6 -3
- prefect/settings/models/server/flow_run_graph.py +4 -3
- prefect/settings/models/server/root.py +4 -3
- prefect/settings/models/server/services.py +15 -12
- prefect/settings/models/server/tasks.py +7 -4
- prefect/settings/models/server/ui.py +4 -3
- prefect/settings/models/tasks.py +10 -5
- prefect/settings/models/testing.py +4 -3
- prefect/settings/models/worker.py +7 -4
- prefect/settings/profiles.py +13 -12
- prefect/settings/sources.py +20 -19
- prefect/states.py +17 -13
- prefect/task_engine.py +43 -33
- prefect/task_runners.py +35 -23
- prefect/task_runs.py +20 -11
- prefect/task_worker.py +12 -7
- prefect/tasks.py +67 -25
- prefect/telemetry/bootstrap.py +4 -1
- prefect/telemetry/run_telemetry.py +15 -13
- prefect/transactions.py +3 -3
- prefect/types/__init__.py +9 -6
- prefect/types/_datetime.py +19 -0
- prefect/utilities/_deprecated.py +38 -0
- prefect/utilities/engine.py +11 -4
- prefect/utilities/filesystem.py +2 -2
- prefect/utilities/generics.py +1 -1
- prefect/utilities/pydantic.py +21 -36
- prefect/workers/base.py +52 -30
- prefect/workers/process.py +20 -15
- prefect/workers/server.py +4 -5
- {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/METADATA +2 -2
- {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/RECORD +111 -108
- {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/LICENSE +0 -0
- {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/WHEEL +0 -0
- {prefect_client-3.1.12.dist-info → prefect_client-3.1.14.dist-info}/top_level.txt +0 -0
prefect/logging/loggers.py
CHANGED
@@ -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,
|
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(
|
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:
|
51
|
+
self, suffix: str, extra: dict[str, Any] | None = None
|
46
52
|
) -> "PrefectLogAdapter":
|
47
|
-
|
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
|
-
**
|
58
|
+
**(self.extra or {}),
|
59
|
+
**_extra,
|
55
60
|
},
|
56
61
|
)
|
57
62
|
|
58
63
|
|
59
64
|
@lru_cache()
|
60
|
-
def get_logger(name:
|
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:
|
166
|
+
flow_run: "FlowRun",
|
162
167
|
flow: Optional["Flow[Any, Any]"] = None,
|
163
168
|
**kwargs: str,
|
164
|
-
) ->
|
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(
|
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(
|
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__ = [
|