prefect-client 3.0.11__py3-none-any.whl → 3.1.0__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/_version.py +3 -3
- prefect/cache_policies.py +4 -4
- prefect/client/orchestration.py +25 -3
- prefect/client/schemas/actions.py +11 -18
- prefect/client/schemas/objects.py +17 -27
- prefect/context.py +6 -2
- prefect/deployments/base.py +0 -2
- prefect/deployments/schedules.py +0 -4
- prefect/logging/logging.yml +4 -0
- prefect/results.py +27 -17
- prefect/settings/base.py +65 -3
- prefect/settings/legacy.py +1 -1
- prefect/settings/models/api.py +5 -5
- prefect/settings/models/cli.py +5 -5
- prefect/settings/models/client.py +6 -8
- prefect/settings/models/cloud.py +5 -5
- prefect/settings/models/deployments.py +2 -5
- prefect/settings/models/experiments.py +24 -0
- prefect/settings/models/flows.py +2 -5
- prefect/settings/models/internal.py +2 -5
- prefect/settings/models/logging.py +3 -8
- prefect/settings/models/results.py +2 -5
- prefect/settings/models/root.py +34 -34
- prefect/settings/models/runner.py +3 -8
- prefect/settings/models/server/api.py +2 -5
- prefect/settings/models/server/database.py +2 -7
- prefect/settings/models/server/deployments.py +2 -5
- prefect/settings/models/server/ephemeral.py +2 -5
- prefect/settings/models/server/events.py +2 -5
- prefect/settings/models/server/flow_run_graph.py +2 -5
- prefect/settings/models/server/root.py +2 -5
- prefect/settings/models/server/services.py +13 -44
- prefect/settings/models/server/tasks.py +3 -12
- prefect/settings/models/server/ui.py +2 -5
- prefect/settings/models/tasks.py +10 -11
- prefect/settings/models/testing.py +2 -5
- prefect/settings/models/worker.py +3 -8
- prefect/settings/sources.py +74 -1
- prefect/states.py +22 -21
- prefect/task_engine.py +30 -11
- prefect/utilities/hashing.py +7 -3
- prefect/workers/base.py +36 -5
- {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/METADATA +2 -2
- {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/RECORD +47 -47
- prefect/settings/models/ui.py +0 -0
- {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/LICENSE +0 -0
- {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/WHEEL +0 -0
- {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,12 @@
|
|
1
1
|
from typing import Any, Optional
|
2
2
|
|
3
3
|
from pydantic import AliasChoices, AliasPath, Field
|
4
|
-
from pydantic_settings import SettingsConfigDict
|
5
4
|
|
6
|
-
from prefect.settings.base import PrefectBaseSettings
|
5
|
+
from prefect.settings.base import PrefectBaseSettings, _build_settings_config
|
7
6
|
|
8
7
|
|
9
8
|
class TestingSettings(PrefectBaseSettings):
|
10
|
-
model_config =
|
11
|
-
env_prefix="PREFECT_TESTING_", env_file=".env", extra="ignore"
|
12
|
-
)
|
9
|
+
model_config = _build_settings_config(("testing",))
|
13
10
|
|
14
11
|
test_mode: bool = Field(
|
15
12
|
default=False,
|
@@ -1,13 +1,10 @@
|
|
1
1
|
from pydantic import Field
|
2
|
-
from pydantic_settings import SettingsConfigDict
|
3
2
|
|
4
|
-
from prefect.settings.base import PrefectBaseSettings
|
3
|
+
from prefect.settings.base import PrefectBaseSettings, _build_settings_config
|
5
4
|
|
6
5
|
|
7
6
|
class WorkerWebserverSettings(PrefectBaseSettings):
|
8
|
-
model_config =
|
9
|
-
env_prefix="PREFECT_WORKER_WEBSERVER_", env_file=".env", extra="ignore"
|
10
|
-
)
|
7
|
+
model_config = _build_settings_config(("worker", "webserver"))
|
11
8
|
|
12
9
|
host: str = Field(
|
13
10
|
default="0.0.0.0",
|
@@ -21,9 +18,7 @@ class WorkerWebserverSettings(PrefectBaseSettings):
|
|
21
18
|
|
22
19
|
|
23
20
|
class WorkerSettings(PrefectBaseSettings):
|
24
|
-
model_config =
|
25
|
-
env_prefix="PREFECT_WORKER_", env_file=".env", extra="ignore"
|
26
|
-
)
|
21
|
+
model_config = _build_settings_config(("worker",))
|
27
22
|
|
28
23
|
heartbeat_seconds: float = Field(
|
29
24
|
default=30,
|
prefect/settings/sources.py
CHANGED
@@ -12,6 +12,7 @@ from pydantic_settings import (
|
|
12
12
|
EnvSettingsSource,
|
13
13
|
PydanticBaseSettingsSource,
|
14
14
|
)
|
15
|
+
from pydantic_settings.sources import ConfigFileSourceMixin
|
15
16
|
|
16
17
|
from prefect.settings.constants import DEFAULT_PREFECT_HOME, DEFAULT_PROFILES_PATH
|
17
18
|
|
@@ -53,7 +54,7 @@ class EnvFilterSettingsSource(EnvSettingsSource):
|
|
53
54
|
else:
|
54
55
|
self.env_vars = {
|
55
56
|
key: value
|
56
|
-
for key, value in self.env_vars.items()
|
57
|
+
for key, value in self.env_vars.items() # type: ignore
|
57
58
|
if key.lower() not in env_filter
|
58
59
|
}
|
59
60
|
|
@@ -140,6 +141,78 @@ class ProfileSettingsTomlLoader(PydanticBaseSettingsSource):
|
|
140
141
|
return profile_settings
|
141
142
|
|
142
143
|
|
144
|
+
DEFAULT_PREFECT_TOML_PATH = Path("prefect.toml")
|
145
|
+
|
146
|
+
|
147
|
+
class TomlConfigSettingsSourceBase(PydanticBaseSettingsSource, ConfigFileSourceMixin):
|
148
|
+
def __init__(self, settings_cls: Type[BaseSettings]):
|
149
|
+
super().__init__(settings_cls)
|
150
|
+
self.settings_cls = settings_cls
|
151
|
+
self.toml_data = {}
|
152
|
+
|
153
|
+
def _read_file(self, path: Path) -> Dict[str, Any]:
|
154
|
+
return toml.load(path)
|
155
|
+
|
156
|
+
def get_field_value(
|
157
|
+
self, field: FieldInfo, field_name: str
|
158
|
+
) -> Tuple[Any, str, bool]:
|
159
|
+
"""Concrete implementation to get the field value from toml data"""
|
160
|
+
value = self.toml_data.get(field_name)
|
161
|
+
if isinstance(value, dict):
|
162
|
+
# if the value is a dict, it is likely a nested settings object and a nested
|
163
|
+
# source will handle it
|
164
|
+
value = None
|
165
|
+
return value, field_name, self.field_is_complex(field)
|
166
|
+
|
167
|
+
def __call__(self) -> Dict[str, Any]:
|
168
|
+
"""Called by pydantic to get the settings from our custom source"""
|
169
|
+
toml_setings: Dict[str, Any] = {}
|
170
|
+
for field_name, field in self.settings_cls.model_fields.items():
|
171
|
+
value, key, is_complex = self.get_field_value(field, field_name)
|
172
|
+
if value is not None:
|
173
|
+
prepared_value = self.prepare_field_value(
|
174
|
+
field_name, field, value, is_complex
|
175
|
+
)
|
176
|
+
toml_setings[key] = prepared_value
|
177
|
+
return toml_setings
|
178
|
+
|
179
|
+
|
180
|
+
class PrefectTomlConfigSettingsSource(TomlConfigSettingsSourceBase):
|
181
|
+
"""Custom pydantic settings source to load settings from a prefect.toml file"""
|
182
|
+
|
183
|
+
def __init__(
|
184
|
+
self,
|
185
|
+
settings_cls: Type[BaseSettings],
|
186
|
+
):
|
187
|
+
super().__init__(settings_cls)
|
188
|
+
self.toml_file_path = settings_cls.model_config.get(
|
189
|
+
"toml_file", DEFAULT_PREFECT_TOML_PATH
|
190
|
+
)
|
191
|
+
self.toml_data = self._read_files(self.toml_file_path)
|
192
|
+
self.toml_table_header = settings_cls.model_config.get(
|
193
|
+
"prefect_toml_table_header", tuple()
|
194
|
+
)
|
195
|
+
for key in self.toml_table_header:
|
196
|
+
self.toml_data = self.toml_data.get(key, {})
|
197
|
+
|
198
|
+
|
199
|
+
class PyprojectTomlConfigSettingsSource(TomlConfigSettingsSourceBase):
|
200
|
+
"""Custom pydantic settings source to load settings from a pyproject.toml file"""
|
201
|
+
|
202
|
+
def __init__(
|
203
|
+
self,
|
204
|
+
settings_cls: Type[BaseSettings],
|
205
|
+
):
|
206
|
+
super().__init__(settings_cls)
|
207
|
+
self.toml_file_path = Path("pyproject.toml")
|
208
|
+
self.toml_data = self._read_files(self.toml_file_path)
|
209
|
+
self.toml_table_header = settings_cls.model_config.get(
|
210
|
+
"pyproject_toml_table_header", ("tool", "prefect")
|
211
|
+
)
|
212
|
+
for key in self.toml_table_header:
|
213
|
+
self.toml_data = self.toml_data.get(key, {})
|
214
|
+
|
215
|
+
|
143
216
|
def _is_test_mode() -> bool:
|
144
217
|
"""Check if the current process is in test mode."""
|
145
218
|
return bool(
|
prefect/states.py
CHANGED
@@ -12,6 +12,7 @@ import httpx
|
|
12
12
|
import pendulum
|
13
13
|
from typing_extensions import TypeGuard
|
14
14
|
|
15
|
+
from prefect._internal.compatibility import deprecated
|
15
16
|
from prefect.client.schemas import State as State
|
16
17
|
from prefect.client.schemas import StateDetails, StateType
|
17
18
|
from prefect.exceptions import (
|
@@ -32,7 +33,6 @@ from prefect.results import (
|
|
32
33
|
ResultRecordMetadata,
|
33
34
|
ResultStore,
|
34
35
|
)
|
35
|
-
from prefect.settings import PREFECT_ASYNC_FETCH_STATE_RESULT
|
36
36
|
from prefect.utilities.annotations import BaseAnnotation
|
37
37
|
from prefect.utilities.asyncutils import in_async_main_thread, sync_compatible
|
38
38
|
from prefect.utilities.collections import ensure_iterable
|
@@ -40,10 +40,17 @@ from prefect.utilities.collections import ensure_iterable
|
|
40
40
|
logger = get_logger("states")
|
41
41
|
|
42
42
|
|
43
|
+
@deprecated.deprecated_parameter(
|
44
|
+
"fetch",
|
45
|
+
when=lambda fetch: fetch is not True,
|
46
|
+
start_date="Oct 2024",
|
47
|
+
end_date="Jan 2025",
|
48
|
+
help="Please ensure you are awaiting the call to `result()` when calling in an async context.",
|
49
|
+
)
|
43
50
|
def get_state_result(
|
44
51
|
state: State[R],
|
45
52
|
raise_on_failure: bool = True,
|
46
|
-
fetch:
|
53
|
+
fetch: bool = True,
|
47
54
|
retry_result_failure: bool = True,
|
48
55
|
) -> R:
|
49
56
|
"""
|
@@ -52,23 +59,17 @@ def get_state_result(
|
|
52
59
|
See `State.result()`
|
53
60
|
"""
|
54
61
|
|
55
|
-
if fetch
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
"the future. Pass `fetch=True` and `await` the call to get rid of "
|
67
|
-
"this warning."
|
68
|
-
),
|
69
|
-
DeprecationWarning,
|
70
|
-
stacklevel=2,
|
71
|
-
)
|
62
|
+
if not fetch and in_async_main_thread():
|
63
|
+
warnings.warn(
|
64
|
+
(
|
65
|
+
"State.result() was called from an async context but not awaited. "
|
66
|
+
"This method will be updated to return a coroutine by default in "
|
67
|
+
"the future. Pass `fetch=True` and `await` the call to get rid of "
|
68
|
+
"this warning."
|
69
|
+
),
|
70
|
+
DeprecationWarning,
|
71
|
+
stacklevel=2,
|
72
|
+
)
|
72
73
|
|
73
74
|
return state.data
|
74
75
|
else:
|
@@ -256,10 +257,10 @@ async def exception_to_failed_state(
|
|
256
257
|
if write_result:
|
257
258
|
try:
|
258
259
|
await result_store.apersist_result_record(data)
|
259
|
-
except Exception as
|
260
|
+
except Exception as nested_exc:
|
260
261
|
local_logger.warning(
|
261
262
|
"Failed to write result: %s Execution will continue, but the result has not been written",
|
262
|
-
|
263
|
+
nested_exc,
|
263
264
|
)
|
264
265
|
else:
|
265
266
|
# Attach the exception for local usage, will not be available when retrieved
|
prefect/task_engine.py
CHANGED
@@ -67,6 +67,7 @@ from prefect.settings import (
|
|
67
67
|
PREFECT_DEBUG_MODE,
|
68
68
|
PREFECT_TASKS_REFRESH_CACHE,
|
69
69
|
)
|
70
|
+
from prefect.settings.context import get_current_settings
|
70
71
|
from prefect.states import (
|
71
72
|
AwaitingRetry,
|
72
73
|
Completed,
|
@@ -150,11 +151,17 @@ class BaseTaskRunEngine(Generic[P, R]):
|
|
150
151
|
else:
|
151
152
|
parameters = None
|
152
153
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
154
|
+
try:
|
155
|
+
key = self.task.cache_policy.compute_key(
|
156
|
+
task_ctx=task_run_context,
|
157
|
+
inputs=self.parameters,
|
158
|
+
flow_parameters=parameters,
|
159
|
+
)
|
160
|
+
except Exception:
|
161
|
+
self.logger.exception(
|
162
|
+
"Error encountered when computing cache key - result will not be persisted.",
|
163
|
+
)
|
164
|
+
key = None
|
158
165
|
elif self.task.result_storage_key is not None:
|
159
166
|
key = _format_user_supplied_storage_key(self.task.result_storage_key)
|
160
167
|
return key
|
@@ -598,6 +605,8 @@ class SyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
598
605
|
should_log_prints,
|
599
606
|
)
|
600
607
|
|
608
|
+
settings = get_current_settings()
|
609
|
+
|
601
610
|
if client is None:
|
602
611
|
client = self.client
|
603
612
|
if not self.task_run:
|
@@ -606,6 +615,12 @@ class SyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
606
615
|
with ExitStack() as stack:
|
607
616
|
if log_prints := should_log_prints(self.task):
|
608
617
|
stack.enter_context(patch_print())
|
618
|
+
if self.task.persist_result is not None:
|
619
|
+
persist_result = self.task.persist_result
|
620
|
+
elif settings.tasks.default_persist_result is not None:
|
621
|
+
persist_result = settings.tasks.default_persist_result
|
622
|
+
else:
|
623
|
+
persist_result = should_persist_result()
|
609
624
|
stack.enter_context(
|
610
625
|
TaskRunContext(
|
611
626
|
task=self.task,
|
@@ -616,9 +631,7 @@ class SyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
616
631
|
self.task, _sync=True
|
617
632
|
),
|
618
633
|
client=client,
|
619
|
-
persist_result=
|
620
|
-
if self.task.persist_result is not None
|
621
|
-
else should_persist_result(),
|
634
|
+
persist_result=persist_result,
|
622
635
|
)
|
623
636
|
)
|
624
637
|
stack.enter_context(ConcurrencyContextV1())
|
@@ -1100,6 +1113,8 @@ class AsyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
1100
1113
|
should_log_prints,
|
1101
1114
|
)
|
1102
1115
|
|
1116
|
+
settings = get_current_settings()
|
1117
|
+
|
1103
1118
|
if client is None:
|
1104
1119
|
client = self.client
|
1105
1120
|
if not self.task_run:
|
@@ -1108,6 +1123,12 @@ class AsyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
1108
1123
|
with ExitStack() as stack:
|
1109
1124
|
if log_prints := should_log_prints(self.task):
|
1110
1125
|
stack.enter_context(patch_print())
|
1126
|
+
if self.task.persist_result is not None:
|
1127
|
+
persist_result = self.task.persist_result
|
1128
|
+
elif settings.tasks.default_persist_result is not None:
|
1129
|
+
persist_result = settings.tasks.default_persist_result
|
1130
|
+
else:
|
1131
|
+
persist_result = should_persist_result()
|
1111
1132
|
stack.enter_context(
|
1112
1133
|
TaskRunContext(
|
1113
1134
|
task=self.task,
|
@@ -1118,9 +1139,7 @@ class AsyncTaskRunEngine(BaseTaskRunEngine[P, R]):
|
|
1118
1139
|
self.task, _sync=False
|
1119
1140
|
),
|
1120
1141
|
client=client,
|
1121
|
-
persist_result=
|
1122
|
-
if self.task.persist_result is not None
|
1123
|
-
else should_persist_result(),
|
1142
|
+
persist_result=persist_result,
|
1124
1143
|
)
|
1125
1144
|
)
|
1126
1145
|
stack.enter_context(ConcurrencyContext())
|
prefect/utilities/hashing.py
CHANGED
@@ -48,10 +48,13 @@ def file_hash(path: str, hash_algo=_md5) -> str:
|
|
48
48
|
return stable_hash(contents, hash_algo=hash_algo)
|
49
49
|
|
50
50
|
|
51
|
-
def hash_objects(
|
51
|
+
def hash_objects(
|
52
|
+
*args, hash_algo=_md5, raise_on_failure: bool = False, **kwargs
|
53
|
+
) -> Optional[str]:
|
52
54
|
"""
|
53
55
|
Attempt to hash objects by dumping to JSON or serializing with cloudpickle.
|
54
|
-
On failure of both, `None` will be returned
|
56
|
+
On failure of both, `None` will be returned; to raise on failure, set
|
57
|
+
`raise_on_failure=True`.
|
55
58
|
"""
|
56
59
|
try:
|
57
60
|
serializer = JSONSerializer(dumps_kwargs={"sort_keys": True})
|
@@ -62,6 +65,7 @@ def hash_objects(*args, hash_algo=_md5, **kwargs) -> Optional[str]:
|
|
62
65
|
try:
|
63
66
|
return stable_hash(cloudpickle.dumps((args, kwargs)), hash_algo=hash_algo)
|
64
67
|
except Exception:
|
65
|
-
|
68
|
+
if raise_on_failure:
|
69
|
+
raise
|
66
70
|
|
67
71
|
return None
|
prefect/workers/base.py
CHANGED
@@ -4,7 +4,7 @@ import threading
|
|
4
4
|
from contextlib import AsyncExitStack
|
5
5
|
from functools import partial
|
6
6
|
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Type, Union
|
7
|
-
from uuid import uuid4
|
7
|
+
from uuid import UUID, uuid4
|
8
8
|
|
9
9
|
import anyio
|
10
10
|
import anyio.abc
|
@@ -15,6 +15,7 @@ from typing_extensions import Literal
|
|
15
15
|
|
16
16
|
import prefect
|
17
17
|
from prefect._internal.schemas.validators import return_v_or_none
|
18
|
+
from prefect.client.base import ServerType
|
18
19
|
from prefect.client.orchestration import PrefectClient, get_client
|
19
20
|
from prefect.client.schemas.actions import WorkPoolCreate, WorkPoolUpdate
|
20
21
|
from prefect.client.schemas.objects import StateType, WorkPool
|
@@ -421,6 +422,7 @@ class BaseWorker(abc.ABC):
|
|
421
422
|
heartbeat_interval_seconds or PREFECT_WORKER_HEARTBEAT_SECONDS.value()
|
422
423
|
)
|
423
424
|
|
425
|
+
self.backend_id: Optional[UUID] = None
|
424
426
|
self._work_pool: Optional[WorkPool] = None
|
425
427
|
self._exit_stack: AsyncExitStack = AsyncExitStack()
|
426
428
|
self._runs_task_group: Optional[anyio.abc.TaskGroup] = None
|
@@ -710,12 +712,20 @@ class BaseWorker(abc.ABC):
|
|
710
712
|
|
711
713
|
self._work_pool = work_pool
|
712
714
|
|
713
|
-
async def _send_worker_heartbeat(
|
715
|
+
async def _send_worker_heartbeat(
|
716
|
+
self, get_worker_id: bool = False
|
717
|
+
) -> Optional[UUID]:
|
718
|
+
"""
|
719
|
+
Sends a heartbeat to the API.
|
720
|
+
|
721
|
+
If `get_worker_id` is True, the worker ID will be retrieved from the API.
|
722
|
+
"""
|
714
723
|
if self._work_pool:
|
715
|
-
await self._client.send_worker_heartbeat(
|
724
|
+
return await self._client.send_worker_heartbeat(
|
716
725
|
work_pool_name=self._work_pool_name,
|
717
726
|
worker_name=self.name,
|
718
727
|
heartbeat_interval_seconds=self.heartbeat_interval_seconds,
|
728
|
+
get_worker_id=get_worker_id,
|
719
729
|
)
|
720
730
|
|
721
731
|
async def sync_with_backend(self):
|
@@ -724,10 +734,31 @@ class BaseWorker(abc.ABC):
|
|
724
734
|
queues. Sends a worker heartbeat to the API.
|
725
735
|
"""
|
726
736
|
await self._update_local_work_pool_info()
|
737
|
+
# Only do this logic if we've enabled the experiment, are connected to cloud and we don't have an ID.
|
738
|
+
if (
|
739
|
+
get_current_settings().experiments.worker_logging_to_api_enabled
|
740
|
+
and (
|
741
|
+
self._client.server_type == ServerType.CLOUD
|
742
|
+
or get_current_settings().testing.test_mode
|
743
|
+
)
|
744
|
+
and self.backend_id is None
|
745
|
+
):
|
746
|
+
get_worker_id = True
|
747
|
+
else:
|
748
|
+
get_worker_id = False
|
727
749
|
|
728
|
-
await self._send_worker_heartbeat()
|
750
|
+
remote_id = await self._send_worker_heartbeat(get_worker_id=get_worker_id)
|
729
751
|
|
730
|
-
|
752
|
+
if get_worker_id and remote_id is None:
|
753
|
+
self._logger.warning(
|
754
|
+
"Failed to retrieve worker ID from the Prefect API server."
|
755
|
+
)
|
756
|
+
else:
|
757
|
+
self.backend_id = remote_id
|
758
|
+
|
759
|
+
self._logger.debug(
|
760
|
+
f"Worker synchronized with the Prefect API server. Remote ID: {self.backend_id}"
|
761
|
+
)
|
731
762
|
|
732
763
|
async def _get_scheduled_flow_runs(
|
733
764
|
self,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: prefect-client
|
3
|
-
Version: 3.0
|
3
|
+
Version: 3.1.0
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Home-page: https://www.prefect.io
|
6
6
|
Author: Prefect Technologies, Inc.
|
@@ -29,7 +29,7 @@ Requires-Dist: asgi-lifespan<3.0,>=1.0
|
|
29
29
|
Requires-Dist: cachetools<6.0,>=5.3
|
30
30
|
Requires-Dist: cloudpickle<4.0,>=2.0
|
31
31
|
Requires-Dist: coolname<3.0.0,>=1.0.4
|
32
|
-
Requires-Dist: croniter<
|
32
|
+
Requires-Dist: croniter<5.0.0,>=1.0.12
|
33
33
|
Requires-Dist: exceptiongroup>=1.0.0
|
34
34
|
Requires-Dist: fastapi<1.0.0,>=0.111.0
|
35
35
|
Requires-Dist: fsspec>=2022.5.0
|
@@ -1,11 +1,11 @@
|
|
1
1
|
prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
|
2
2
|
prefect/__init__.py,sha256=UZPTpdap8ECK1zLoggfeOtZGkKcf6um1-lMb-nn4o5I,3450
|
3
|
-
prefect/_version.py,sha256=
|
3
|
+
prefect/_version.py,sha256=Hzj0kOJRJpRTvV4Al2Mi2t5EvQK_0Q2ixDr6TVvMbNM,496
|
4
4
|
prefect/agent.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
|
5
5
|
prefect/artifacts.py,sha256=dsxFWmdg2r9zbHM3KgKOR5YbJ29_dXUYF9kipJpbxkE,13009
|
6
6
|
prefect/automations.py,sha256=NlQ62GPJzy-gnWQqX7c6CQJKw7p60WLGDAFcy82vtg4,5613
|
7
|
-
prefect/cache_policies.py,sha256=
|
8
|
-
prefect/context.py,sha256=
|
7
|
+
prefect/cache_policies.py,sha256=T4RTII0qkzGq-VRoE1wGezhkdiuDtf6k7qUA46J_wbA,9196
|
8
|
+
prefect/context.py,sha256=sNZwFecVO4-OmatU_OTNb9HoxG5rtwNIzP_NNGsmbYo,21496
|
9
9
|
prefect/engine.py,sha256=BpmDbe6miZcTl1vRkxfCPYcWSXADLigGPCagFwucMz0,1976
|
10
10
|
prefect/exceptions.py,sha256=V_nRpS2Z93PvJMoQdXbx8zepVaFb-pWanCqVi7T1ngI,11803
|
11
11
|
prefect/filesystems.py,sha256=CxwMmKY8LBUed_9IqE2jUqxVCWhXa1r2fjKgLbIC2Vg,17893
|
@@ -16,10 +16,10 @@ prefect/futures.py,sha256=DlZvdccKtwQKuDUFrZ4zcINeO9C1chLiNOwjE5gTgCk,16356
|
|
16
16
|
prefect/main.py,sha256=IdtnJR5-IwP8EZsfhMFKj92ylMhNyau9X_eMcTP2ZjM,2336
|
17
17
|
prefect/plugins.py,sha256=HY7Z7OJlltqzsUiPMEL1Y_hQbHw0CeZKayWiK-k8DP4,2435
|
18
18
|
prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
prefect/results.py,sha256
|
19
|
+
prefect/results.py,sha256=D8pjiiK0btWuTSQ4txw4glB4VFxvdrqef6z51-JgU5c,47670
|
20
20
|
prefect/serializers.py,sha256=Lo41EM0_qGzcfB_63390Izeo3DdK6cY6VZfxa9hpSGQ,8712
|
21
|
-
prefect/states.py,sha256=
|
22
|
-
prefect/task_engine.py,sha256=
|
21
|
+
prefect/states.py,sha256=Aq4eZgsTTnCxxcBOMm9mlW-iIBldygD0KC_nW_aBriY,24871
|
22
|
+
prefect/task_engine.py,sha256=U9ukpUFYMEQffZ_5_TD4GEpqnxP4EIdw9Ye1W5GrrXA,58339
|
23
23
|
prefect/task_runners.py,sha256=xg2oYPLC8XgpprMtC4xKAd1tRTcpjuxDQeq6oZtxujU,15199
|
24
24
|
prefect/task_runs.py,sha256=jkaQOkRKOHS8fgHUijteriFpjMSKv4zldn1D8tZHkUI,8777
|
25
25
|
prefect/task_worker.py,sha256=VfLF0W_RAahAZM-M75vC0zxDFwcHY0V20qsQX4cDKuw,17007
|
@@ -69,13 +69,13 @@ prefect/client/base.py,sha256=2K8UiWzorZNNM4c8c-OiGeZ5i5ViUfZ_Q31oPobbOO0,24956
|
|
69
69
|
prefect/client/cloud.py,sha256=P8GctOSRqrukU_j9iXDuOW9lIiscRFP6WLxASDcmn_o,6207
|
70
70
|
prefect/client/collections.py,sha256=u-96saqu0RALAazRI0YaZCJahnuafMppY21KN6ggx80,1059
|
71
71
|
prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
|
72
|
-
prefect/client/orchestration.py,sha256=
|
72
|
+
prefect/client/orchestration.py,sha256=iyZRzoqwQSzxjT4uvP9O9O-mH4o1cmtTvgG4MCFCH2g,151297
|
73
73
|
prefect/client/subscriptions.py,sha256=oqF2MJsgN3psJg-MePfvwMtEWjromfP9StWF00xc1eg,3403
|
74
74
|
prefect/client/utilities.py,sha256=89fmza0cRMOayxgXRdO51TKb11TczJ0ByOZmcZVrt44,3286
|
75
75
|
prefect/client/schemas/__init__.py,sha256=KlyqFV-hMulMkNstBn_0ijoHoIwJZaBj6B1r07UmgvE,607
|
76
|
-
prefect/client/schemas/actions.py,sha256=
|
76
|
+
prefect/client/schemas/actions.py,sha256=m2HJr9oAoK9vqigCHSwMGwvKPTjGNEtP0xdXgforIT0,28629
|
77
77
|
prefect/client/schemas/filters.py,sha256=ynzD3mdvHHkI51pJ_NWgeDv8Awr7-2QtpUq7fTInEYM,36316
|
78
|
-
prefect/client/schemas/objects.py,sha256=
|
78
|
+
prefect/client/schemas/objects.py,sha256=A57O9l8KlcwIY1iEAqVM-G-SA00eHB5DqKdpibijz5w,55995
|
79
79
|
prefect/client/schemas/responses.py,sha256=tV06W8npA8oCjV9d0ZNvjro4QcbHxayb8PC4LmanXjo,15467
|
80
80
|
prefect/client/schemas/schedules.py,sha256=8rpqjOYtknu2-1n5_WD4cOplgu93P3mCyX86B22LfL4,13070
|
81
81
|
prefect/client/schemas/sorting.py,sha256=L-2Mx-igZPtsUoRUguTcG3nIEstMEMPD97NwPM2Ox5s,2579
|
@@ -94,11 +94,11 @@ prefect/concurrency/v1/events.py,sha256=PhW3iV5z-ez97LBHnte4joHMVPYaZJNRJkNXsZlb
|
|
94
94
|
prefect/concurrency/v1/services.py,sha256=5IwRepJ4IMC0y-PmqXiDr5rR4wl3BuHbP6Tg6C3rrQg,4426
|
95
95
|
prefect/concurrency/v1/sync.py,sha256=qKE0YzNbrmYooTwP7pz4m1BUz61THCUIF45_PE5IyYg,2375
|
96
96
|
prefect/deployments/__init__.py,sha256=_wb7NxDKhq11z9MjYsPckmT3o6MRhGLRgCV9TmvYtew,1002
|
97
|
-
prefect/deployments/base.py,sha256=
|
97
|
+
prefect/deployments/base.py,sha256=bwlkSN6pWC2fLj4-48AtPY1jTmVB0GADdyK9ToFLAiE,16534
|
98
98
|
prefect/deployments/deployments.py,sha256=EvC9qBdvJRc8CHJqRjFTqtzx75SE8bpZOl5C-2eULyA,109
|
99
99
|
prefect/deployments/flow_runs.py,sha256=Pz6KYDKNPkgOnh4M2VhkiPhNtDQfuKBmqSjmYGaucbs,6812
|
100
100
|
prefect/deployments/runner.py,sha256=lyUL3996OF1pHLsxaIWlguNN2SUI5BFjqP_P2TGYol0,42125
|
101
|
-
prefect/deployments/schedules.py,sha256=
|
101
|
+
prefect/deployments/schedules.py,sha256=qFzYxPUYz8mYRPxG4dOXZC-6tdVprbK5Zw1fwBf42xI,1910
|
102
102
|
prefect/deployments/steps/__init__.py,sha256=Dlz9VqMRyG1Gal8dj8vfGpPr0LyQhZdvcciozkK8WoY,206
|
103
103
|
prefect/deployments/steps/core.py,sha256=5vFf6BSpu992kkaYsvcPpsz-nZxFmayMIDmY9h0Hb8M,6846
|
104
104
|
prefect/deployments/steps/pull.py,sha256=N98fU9S6Og204oKsqJf53eP1PdwwyRojtVg8GT2sVhE,7294
|
@@ -140,7 +140,7 @@ prefect/logging/formatters.py,sha256=3nBWgawvD48slT0zgkKeus1gIyf0OjmDKdLwMEe5mPU
|
|
140
140
|
prefect/logging/handlers.py,sha256=EvXFVM9AnSZSk0QA75KnQ0Pso95QQvs3x9rMC5PA46U,10417
|
141
141
|
prefect/logging/highlighters.py,sha256=pH6TZmMaMdAkMLJB-U9NPWZIj3GUfczYCSFzCbBCq2s,1776
|
142
142
|
prefect/logging/loggers.py,sha256=9fN5iTXQwBAHwKfE9iBo-90f2SyGs9Z3OKmkLPG91VY,10995
|
143
|
-
prefect/logging/logging.yml,sha256
|
143
|
+
prefect/logging/logging.yml,sha256=IRxiQ_D0aWHfRBpVfSxKgbPCq9Sw4bfJJZExl8ZyssM,3023
|
144
144
|
prefect/records/__init__.py,sha256=rJJhaJBa0AWu63fJhtB-yHBi64qL6p4svo7F0qvm2sc,30
|
145
145
|
prefect/records/base.py,sha256=Ne-7pRGNfmk0a_Vm3t5zRrj26KgGr_L2_XfLID0XzIY,8035
|
146
146
|
prefect/records/filesystem.py,sha256=X-h7r5deiHH5IaaDk4ugOCmR5ZKnJeU2cLgp0AkMt0E,7316
|
@@ -159,40 +159,40 @@ prefect/runtime/task_run.py,sha256=B6v_nZiHy9nKZfnKFQF7izZjAjaiZOT0j80m-VcLxmY,3
|
|
159
159
|
prefect/server/api/collections_data/views/aggregate-worker-metadata.json,sha256=gqrwGyylzBEzlFSPOJcMuUwdoK_zojpU0SZaBDgK5FE,79748
|
160
160
|
prefect/server/api/static/prefect-logo-mark-gradient.png,sha256=ylRjJkI_JHCw8VbQasNnXQHwZW-sH-IQiUGSD3aWP1E,73430
|
161
161
|
prefect/settings/__init__.py,sha256=NU9Qyq0DJDIS6bZcgDe_Z2xZkhNEDwdxwbL8bo6V9z8,2023
|
162
|
-
prefect/settings/base.py,sha256=
|
162
|
+
prefect/settings/base.py,sha256=W50z9U9t29Zp_p_SCEypCQSqJR9cLdH0zEnLKMFg-rY,7441
|
163
163
|
prefect/settings/constants.py,sha256=P9wjosqu5K9SERrpTFf9o8Y2O5g091F6goB4vLwz-FA,271
|
164
164
|
prefect/settings/context.py,sha256=yKxnaDJHX8e2jmAVtw1RF9o7X4V3AOcz61sVeQyPX2c,2195
|
165
|
-
prefect/settings/legacy.py,sha256=
|
165
|
+
prefect/settings/legacy.py,sha256=GcaB1mkahc4HbjnUvr4_3qNNxleke08dYnOXCUt8w3k,5617
|
166
166
|
prefect/settings/profiles.py,sha256=VZdzOV-KSuAkCxtdhBmSG9i84-K2QLSx6g2-vIUkfig,12169
|
167
167
|
prefect/settings/profiles.toml,sha256=kTvqDNMzjH3fsm5OEI-NKY4dMmipor5EvQXRB6rPEjY,522
|
168
|
-
prefect/settings/sources.py,sha256=
|
168
|
+
prefect/settings/sources.py,sha256=CfgJlHStFSP0Kiq_bFPY0BmXqNzaivrId-3lYZ1wuJI,8604
|
169
169
|
prefect/settings/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
170
|
-
prefect/settings/models/api.py,sha256=
|
171
|
-
prefect/settings/models/cli.py,sha256=
|
172
|
-
prefect/settings/models/client.py,sha256=
|
173
|
-
prefect/settings/models/cloud.py,sha256=
|
174
|
-
prefect/settings/models/deployments.py,sha256=
|
175
|
-
prefect/settings/models/
|
176
|
-
prefect/settings/models/
|
177
|
-
prefect/settings/models/
|
178
|
-
prefect/settings/models/
|
179
|
-
prefect/settings/models/
|
180
|
-
prefect/settings/models/
|
181
|
-
prefect/settings/models/
|
182
|
-
prefect/settings/models/
|
183
|
-
prefect/settings/models/
|
184
|
-
prefect/settings/models/worker.py,sha256=
|
170
|
+
prefect/settings/models/api.py,sha256=1MQhokm0L64ZAjG3LbgArtY_uiJX_hK6SKb1dC9aCHU,1491
|
171
|
+
prefect/settings/models/cli.py,sha256=mHB-BHBVO9qfQcr9uHbBmU6MMDLlLUUDxjyaRz7v1ls,958
|
172
|
+
prefect/settings/models/client.py,sha256=Ua18wKXWrNi0Ktb6cd42kdSOQYhFnObwTHTc3QDYg2k,2985
|
173
|
+
prefect/settings/models/cloud.py,sha256=7-WtW0rGPMOuG1O9Lwv_H_keEldXPo9YGHmoGwCXpeg,1767
|
174
|
+
prefect/settings/models/deployments.py,sha256=ui4xqT7N-6B_gMnGnkJ8Ys0hzdfNTOtlcwzAQo2LlQI,1235
|
175
|
+
prefect/settings/models/experiments.py,sha256=AlSj4ItrVDGLvTTXJVtDmzlYEiCBjrGKNFs7VGqH1fo,728
|
176
|
+
prefect/settings/models/flows.py,sha256=IrW3cFQJnu-31cXvSihCl6naRhmZc2eFqSgqdnNLUzg,1056
|
177
|
+
prefect/settings/models/internal.py,sha256=mJ7h3d_WHw-0FBVhIbDHPjYI041YtuReD1bZO98G1OU,612
|
178
|
+
prefect/settings/models/logging.py,sha256=gzTjdiuh2tMdtorW86rZIp4n66jJLh3oYh5uRLi8DD4,4473
|
179
|
+
prefect/settings/models/results.py,sha256=lU-3oVlgxGradSB1EYU-VZogK-rzE5LDw_wOcKhJp4M,1397
|
180
|
+
prefect/settings/models/root.py,sha256=MkprdKVpWb0M2rR08nvUtfkSPGDIp_a3cz6cUKKmIWU,16381
|
181
|
+
prefect/settings/models/runner.py,sha256=TOYDnmYmv6Ec5Ma6Vii-rPUTeMGszDluecLwy65Gnm4,1644
|
182
|
+
prefect/settings/models/tasks.py,sha256=qXLWJIVZT4L1GQcaCD_NUJktpB5WYOxthOq_PDLdj20,3309
|
183
|
+
prefect/settings/models/testing.py,sha256=r6KCYi8nvflCEwRFqS2T5J9baMHtVJfW0Q8EWARu1PQ,1733
|
184
|
+
prefect/settings/models/worker.py,sha256=EvaKk4j37QJw8o9w78kU9EF3dxx3aeHD4iT9shY3djk,1229
|
185
185
|
prefect/settings/models/server/__init__.py,sha256=KJmffmlHb8GYnClaeYcerae-IaeNsNMucKKRRS_zG9Q,33
|
186
|
-
prefect/settings/models/server/api.py,sha256=
|
187
|
-
prefect/settings/models/server/database.py,sha256=
|
188
|
-
prefect/settings/models/server/deployments.py,sha256=
|
189
|
-
prefect/settings/models/server/ephemeral.py,sha256=
|
190
|
-
prefect/settings/models/server/events.py,sha256=
|
191
|
-
prefect/settings/models/server/flow_run_graph.py,sha256=
|
192
|
-
prefect/settings/models/server/root.py,sha256=
|
193
|
-
prefect/settings/models/server/services.py,sha256=
|
194
|
-
prefect/settings/models/server/tasks.py,sha256
|
195
|
-
prefect/settings/models/server/ui.py,sha256=
|
186
|
+
prefect/settings/models/server/api.py,sha256=EKpt31hlX9dwrrsW-QztuJCHfUXqeWSz5xAMre1r698,4719
|
187
|
+
prefect/settings/models/server/database.py,sha256=0eerMb05A9wD9_C4SefTzVvmba3rW18K2eteL2IcXLg,7201
|
188
|
+
prefect/settings/models/server/deployments.py,sha256=_GcxGOsMMrCzGEnOwC2i6JQW77h2tbyAdBJzAigHDas,778
|
189
|
+
prefect/settings/models/server/ephemeral.py,sha256=WxSpF-z9iDKAEjvcqrA5aggLEPRbl_ERocoLxPlu424,923
|
190
|
+
prefect/settings/models/server/events.py,sha256=RRpwduwrV4jysp-AfxKhLnM0JEYCG4gxT7ls15yfJJg,5148
|
191
|
+
prefect/settings/models/server/flow_run_graph.py,sha256=MCKKV91-I6AOAGJ9ieTvHIMqH5JEri7cfuDbadEFu4w,1026
|
192
|
+
prefect/settings/models/server/root.py,sha256=uhryCvrk6oGAu8S3GGZNc3IaxXyd_dFnsKfi1q8En_U,5128
|
193
|
+
prefect/settings/models/server/services.py,sha256=xDQyRUh18mU_cTgp1Q_BwKpdeZHKLSh2o_YNNXvzsoo,16748
|
194
|
+
prefect/settings/models/server/tasks.py,sha256=YzfRTcmiYnD_INezR_29rvO0M_YbAqT1by7kiK2KP60,2814
|
195
|
+
prefect/settings/models/server/ui.py,sha256=6cTSC2RQsS4c2HpB1Se6qRms4RMEKSsaI40T2CTkobg,1780
|
196
196
|
prefect/types/__init__.py,sha256=A714iHFE9makA5LiAKd0Y5wfdb7m13gBwvrpQzdLVgs,3647
|
197
197
|
prefect/types/entrypoint.py,sha256=2FF03-wLPgtnqR_bKJDB2BsXXINPdu8ptY9ZYEZnXg8,328
|
198
198
|
prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -206,7 +206,7 @@ prefect/utilities/dispatch.py,sha256=EthEmyRwv-4W8z2BJclrsOQHJ_pJoZYL0t2cyYPEa-E
|
|
206
206
|
prefect/utilities/dockerutils.py,sha256=zjqeyE4gK8r0n5l3b2XK2AKviQ2F-pOd1LE2O4qfJt0,20372
|
207
207
|
prefect/utilities/engine.py,sha256=pi-TQEpoJ98u2LNYh3ZpNoiN9VSlGRJV558Hjg2eFxY,32433
|
208
208
|
prefect/utilities/filesystem.py,sha256=frAyy6qOeYa7c-jVbEUGZQEe6J1yF8I_SvUepPd59gI,4415
|
209
|
-
prefect/utilities/hashing.py,sha256=
|
209
|
+
prefect/utilities/hashing.py,sha256=SK18PDwJQjn3_qwNwwnz6Wuz1o8rR6Bja-sEuSfszxE,1879
|
210
210
|
prefect/utilities/importtools.py,sha256=aO-xhf2h2KzsLGvSKwRAZLB4ITeW9rsV0Ys-gwq3i7o,19426
|
211
211
|
prefect/utilities/math.py,sha256=wLwcKVidpNeWQi1TUIWWLHGjlz9UgboX9FUGhx_CQzo,2821
|
212
212
|
prefect/utilities/names.py,sha256=x-stHcF7_tebJPvB1dz-5FvdXJXNBTg2kFZXSnIBBmk,1657
|
@@ -224,14 +224,14 @@ prefect/utilities/schema_tools/__init__.py,sha256=KsFsTEHQqgp89TkDpjggkgBBywoHQP
|
|
224
224
|
prefect/utilities/schema_tools/hydration.py,sha256=k12qVCdLLrK-mNo1hPCdhxM5f_N14Nj0vJdtiWYWffk,8858
|
225
225
|
prefect/utilities/schema_tools/validation.py,sha256=2GCjxwApTFwzey40ul9OkcAXrU3r-kWK__9ucMo0qbk,9744
|
226
226
|
prefect/workers/__init__.py,sha256=8dP8SLZbWYyC_l9DRTQSE3dEbDgns5DZDhxkp_NfsbQ,35
|
227
|
-
prefect/workers/base.py,sha256=
|
227
|
+
prefect/workers/base.py,sha256=jAea-LuUYjLJ9--Y4oD82lubIgAakK33Pa3bvcotASs,45381
|
228
228
|
prefect/workers/block.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
|
229
229
|
prefect/workers/cloud.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
|
230
230
|
prefect/workers/process.py,sha256=tcJ3fbiraLCfpVGpv8dOHwMSfVzeD_kyguUOvPuIz6I,19796
|
231
231
|
prefect/workers/server.py,sha256=lgh2FfSuaNU7b6HPxSFm8JtKvAvHsZGkiOo4y4tW1Cw,2022
|
232
232
|
prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
|
233
|
-
prefect_client-3.0.
|
234
|
-
prefect_client-3.0.
|
235
|
-
prefect_client-3.0.
|
236
|
-
prefect_client-3.0.
|
237
|
-
prefect_client-3.0.
|
233
|
+
prefect_client-3.1.0.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
|
234
|
+
prefect_client-3.1.0.dist-info/METADATA,sha256=c3Er1Cd_i5J7vmVAyc8IL9iE3Dwm34D5Y3q3kGNGcUI,7338
|
235
|
+
prefect_client-3.1.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
236
|
+
prefect_client-3.1.0.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
|
237
|
+
prefect_client-3.1.0.dist-info/RECORD,,
|
prefect/settings/models/ui.py
DELETED
File without changes
|
File without changes
|
File without changes
|
File without changes
|