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.
Files changed (48) hide show
  1. prefect/_version.py +3 -3
  2. prefect/cache_policies.py +4 -4
  3. prefect/client/orchestration.py +25 -3
  4. prefect/client/schemas/actions.py +11 -18
  5. prefect/client/schemas/objects.py +17 -27
  6. prefect/context.py +6 -2
  7. prefect/deployments/base.py +0 -2
  8. prefect/deployments/schedules.py +0 -4
  9. prefect/logging/logging.yml +4 -0
  10. prefect/results.py +27 -17
  11. prefect/settings/base.py +65 -3
  12. prefect/settings/legacy.py +1 -1
  13. prefect/settings/models/api.py +5 -5
  14. prefect/settings/models/cli.py +5 -5
  15. prefect/settings/models/client.py +6 -8
  16. prefect/settings/models/cloud.py +5 -5
  17. prefect/settings/models/deployments.py +2 -5
  18. prefect/settings/models/experiments.py +24 -0
  19. prefect/settings/models/flows.py +2 -5
  20. prefect/settings/models/internal.py +2 -5
  21. prefect/settings/models/logging.py +3 -8
  22. prefect/settings/models/results.py +2 -5
  23. prefect/settings/models/root.py +34 -34
  24. prefect/settings/models/runner.py +3 -8
  25. prefect/settings/models/server/api.py +2 -5
  26. prefect/settings/models/server/database.py +2 -7
  27. prefect/settings/models/server/deployments.py +2 -5
  28. prefect/settings/models/server/ephemeral.py +2 -5
  29. prefect/settings/models/server/events.py +2 -5
  30. prefect/settings/models/server/flow_run_graph.py +2 -5
  31. prefect/settings/models/server/root.py +2 -5
  32. prefect/settings/models/server/services.py +13 -44
  33. prefect/settings/models/server/tasks.py +3 -12
  34. prefect/settings/models/server/ui.py +2 -5
  35. prefect/settings/models/tasks.py +10 -11
  36. prefect/settings/models/testing.py +2 -5
  37. prefect/settings/models/worker.py +3 -8
  38. prefect/settings/sources.py +74 -1
  39. prefect/states.py +22 -21
  40. prefect/task_engine.py +30 -11
  41. prefect/utilities/hashing.py +7 -3
  42. prefect/workers/base.py +36 -5
  43. {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/METADATA +2 -2
  44. {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/RECORD +47 -47
  45. prefect/settings/models/ui.py +0 -0
  46. {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/LICENSE +0 -0
  47. {prefect_client-3.0.11.dist-info → prefect_client-3.1.0.dist-info}/WHEEL +0 -0
  48. {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 = SettingsConfigDict(
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 = SettingsConfigDict(
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 = SettingsConfigDict(
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,
@@ -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: Optional[bool] = None,
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 is None and (
56
- PREFECT_ASYNC_FETCH_STATE_RESULT or not in_async_main_thread()
57
- ):
58
- # Fetch defaults to `True` for sync users or async users who have opted in
59
- fetch = True
60
- if not fetch:
61
- if fetch is None and in_async_main_thread():
62
- warnings.warn(
63
- (
64
- "State.result() was called from an async context but not awaited. "
65
- "This method will be updated to return a coroutine by default in "
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 exc:
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
- exc,
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
- key = self.task.cache_policy.compute_key(
154
- task_ctx=task_run_context,
155
- inputs=self.parameters,
156
- flow_parameters=parameters,
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=self.task.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=self.task.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())
@@ -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(*args, hash_algo=_md5, **kwargs) -> Optional[str]:
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
- pass
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(self):
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
- self._logger.debug("Worker synchronized with the Prefect API server.")
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.11
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<4.0.0,>=1.0.12
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=uRXt3Fi1UIT7Ilpbu1SAVG35XmbdDlYai--JP3gIv9Q,497
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=PWUzyJue4h5XHVeIVolfPKhRGrx1hyWJt58AJyHbcqU,9104
8
- prefect/context.py,sha256=tPONywLhDGXXy-sbRs0kcQ37NQJJGYqy_KlEvDpagAA,21430
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=-V_JRaWeY2WXWhY2d_zL7KVIro660mIU6F3heNaih0o,47391
19
+ prefect/results.py,sha256=D8pjiiK0btWuTSQ4txw4glB4VFxvdrqef6z51-JgU5c,47670
20
20
  prefect/serializers.py,sha256=Lo41EM0_qGzcfB_63390Izeo3DdK6cY6VZfxa9hpSGQ,8712
21
- prefect/states.py,sha256=2lysq6X5AvqPfE3eD3D0HYt-KpFA2OUgA0c4ZQ22A_U,24906
22
- prefect/task_engine.py,sha256=j6Cs478xX9QDcIW50smNhXwJnMqUvmyLcdX7wJGjiZQ,57534
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=RJSupbNxThMbZ8EI8VOABdLurr6W_3qhNgQRdE8hovY,150573
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=GT1VlvwV5koV690H7ViGFH3tpW7_PvDf0QJoYTcOLDg,28862
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=hlFnM04FzH3HaKm_gcvu7AC1CZsTzVALCajIzosgQCg,56198
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=OyaKZ1Uk16XtvABh5byO6I3jp_1FYG301ryjDq00qJE,16688
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=KCYA6dOmLAoElHZuoWqdJn4Yno4TtOZtXfPOpTLb1cE,2046
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=-x_2qNZdRhk5MzsE8jZQaWec8gHjkfwUzqfslPo28T8,2933
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=Xmc7xOdSDn31T94UeojqlP5zDMAX985gjBx2y52vjno,5367
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=jENk75x3Y61CYoENeDt208x6Y3kMMjqePA4IHPdi6zM,5601
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=CWIothqRvjM24QhIR8Kv1Z7n7nEDT4pBXHVwh9iYwaM,5781
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=N9X8hChmpBtE5BSabkB6tqnsrZVaYcWpLS6DzoBELBE,1563
171
- prefect/settings/models/cli.py,sha256=Z0gNCkcB8aSjTOibXspzm8-wKBogvE7AyZWJ-HuwOeg,1030
172
- prefect/settings/models/client.py,sha256=G8QSXePr06_0zRsoGONPiok-nlvsIU_gVbEi2IkZllE,3115
173
- prefect/settings/models/cloud.py,sha256=cPo2dLU7dpd-K6Wt0pHyz9KF6lLysDnXiVEFPgLyg2c,1839
174
- prefect/settings/models/deployments.py,sha256=x0r8MMAmxYsU2Q3x8hTAITNQ8m-rFJfvVN8y_5R1vYk,1320
175
- prefect/settings/models/flows.py,sha256=eQ5ZHipz3euk2MGCbBtuaUWg9tDiUdL25bi1CxQyVRA,1141
176
- prefect/settings/models/internal.py,sha256=F-NscDNS-JH2KGBt4OTpPQBL0zNLeAKLDUJ8ooys5ms,697
177
- prefect/settings/models/logging.py,sha256=OW0WqgwxZELQ4EJ3Yi1bhVmEhyxvXp34r9ioUYkxYvs,4616
178
- prefect/settings/models/results.py,sha256=wBNvlSsGMcA1eJA9Q8uXEJx-QLGxOrGzu1tmCtFOP28,1482
179
- prefect/settings/models/root.py,sha256=KN95G5YwqSZtPo-OJ8ILO9gCVgMkKSHCOFUNltyH1qk,16264
180
- prefect/settings/models/runner.py,sha256=Rkupbl3GmfPqLwezaVAyYQEddtCQg9l0Kya6QUpUAxM,1787
181
- prefect/settings/models/tasks.py,sha256=thicLW2gvKtWGvEM028tqSBbrWwzCgIVMEgr1-jW3Z0,3196
182
- prefect/settings/models/testing.py,sha256=NjSEvpVy_5dfK6qk7N3OExMqMI7aXiHZqf7-bhixy-Y,1818
183
- prefect/settings/models/ui.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
- prefect/settings/models/worker.py,sha256=m50NNzdfp0WdXJ32fApp-1z_BqBAKauVAdti-0mhbBM,1372
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=gRsw4EcpBQccWzM--7U3uIFP6dg5sKxxrxUbeOOjVOM,4802
187
- prefect/settings/models/server/database.py,sha256=fUeuIwWAhnznGI7MfE0XVcYhrj066sGGDFeFt27rkyU,7301
188
- prefect/settings/models/server/deployments.py,sha256=_2tAcKXqp7-vCHXdkCOhAeOQaRqJqDlpDWqCHlx_oCA,861
189
- prefect/settings/models/server/ephemeral.py,sha256=L-CNWanukkquiJPo9pM-bKmyxhtv-jxmsXmUvlDbdr0,1006
190
- prefect/settings/models/server/events.py,sha256=GAYIG_6NCXElGiq9knCEbGFPcnVGua5ZmQCPDw0kGMs,5231
191
- prefect/settings/models/server/flow_run_graph.py,sha256=7eRwv2e4rU5N7sZAhb9pXxMjS4pvxYz_9er1rPO3hA4,1109
192
- prefect/settings/models/server/root.py,sha256=5Fi7xlTZPGqApymFFyEMvHc1UFYfUKCpP8hNIfTNA2I,5213
193
- prefect/settings/models/server/services.py,sha256=1B9ufsAvKmubtMQK6VdCxNlj0qHljD8AaHotOa3tiVk,17417
194
- prefect/settings/models/server/tasks.py,sha256=-KpJnJdDO0ab73k-i7TyTz1oa1GI7eozeYcwZVYptas,2986
195
- prefect/settings/models/server/ui.py,sha256=GIaoQXrp6de3U93d_fXlo41bnoBroGwKvzX9QTrj9WQ,1863
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=EOwZLmoIZImuSTxAvVqInabxJ-4RpEfYeg9e2EDQF8o,1752
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=b7TZKz_YstdQxRBr3Td4rPMlXCMst8z7M42Gxp-yvVY,44224
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.11.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
234
- prefect_client-3.0.11.dist-info/METADATA,sha256=-dXkW0I0j5cYBbz5PmxrnDi26ixr7gXKFr1ty_FG3T0,7339
235
- prefect_client-3.0.11.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
236
- prefect_client-3.0.11.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
237
- prefect_client-3.0.11.dist-info/RECORD,,
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,,
File without changes