prefect-client 3.0.0rc14__py3-none-any.whl → 3.0.0rc16__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/_internal/compatibility/deprecated.py +0 -53
- prefect/_internal/schemas/validators.py +3 -91
- prefect/client/orchestration.py +4 -47
- prefect/client/schemas/actions.py +7 -10
- prefect/client/schemas/filters.py +0 -12
- prefect/client/schemas/objects.py +0 -6
- prefect/client/schemas/responses.py +0 -7
- prefect/context.py +2 -1
- prefect/deployments/base.py +0 -9
- prefect/deployments/runner.py +1 -36
- prefect/events/clients.py +39 -56
- prefect/events/utilities.py +0 -2
- prefect/flows.py +10 -48
- prefect/futures.py +0 -5
- prefect/profiles.toml +3 -0
- prefect/runner/runner.py +0 -10
- prefect/runner/storage.py +4 -0
- prefect/runtime/flow_run.py +19 -1
- prefect/settings.py +78 -13
- prefect/task_engine.py +60 -58
- prefect/task_worker.py +4 -1
- prefect/tasks.py +9 -5
- prefect/transactions.py +30 -3
- prefect/utilities/asyncutils.py +0 -6
- prefect/utilities/engine.py +3 -0
- {prefect_client-3.0.0rc14.dist-info → prefect_client-3.0.0rc16.dist-info}/METADATA +39 -40
- {prefect_client-3.0.0rc14.dist-info → prefect_client-3.0.0rc16.dist-info}/RECORD +30 -30
- {prefect_client-3.0.0rc14.dist-info → prefect_client-3.0.0rc16.dist-info}/WHEEL +1 -1
- {prefect_client-3.0.0rc14.dist-info → prefect_client-3.0.0rc16.dist-info}/LICENSE +0 -0
- {prefect_client-3.0.0rc14.dist-info → prefect_client-3.0.0rc16.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,6 @@ import warnings
|
|
16
16
|
from typing import Any, Callable, List, Optional, Type, TypeVar
|
17
17
|
|
18
18
|
import pendulum
|
19
|
-
import wrapt
|
20
19
|
from pydantic import BaseModel
|
21
20
|
|
22
21
|
from prefect.utilities.callables import get_call_parameters
|
@@ -273,55 +272,3 @@ def register_renamed_module(old_name: str, new_name: str, start_date: str):
|
|
273
272
|
DEPRECATED_MODULE_ALIASES.append(
|
274
273
|
AliasedModuleDefinition(old_name, new_name, callback)
|
275
274
|
)
|
276
|
-
|
277
|
-
|
278
|
-
class AsyncCompatProxy(wrapt.ObjectProxy):
|
279
|
-
"""
|
280
|
-
A proxy object that allows for awaiting a method that is no longer async.
|
281
|
-
|
282
|
-
See https://wrapt.readthedocs.io/en/master/wrappers.html#object-proxy for more
|
283
|
-
"""
|
284
|
-
|
285
|
-
def __init__(self, wrapped, class_name: str, method_name: str):
|
286
|
-
super().__init__(wrapped)
|
287
|
-
self._self_class_name = class_name
|
288
|
-
self._self_method_name = method_name
|
289
|
-
self._self_already_awaited = False
|
290
|
-
|
291
|
-
def __await__(self):
|
292
|
-
if not self._self_already_awaited:
|
293
|
-
warnings.warn(
|
294
|
-
(
|
295
|
-
f"The {self._self_method_name!r} method on {self._self_class_name!r}"
|
296
|
-
" is no longer async and awaiting it will raise an error after Dec 2024"
|
297
|
-
" - please remove the `await` keyword."
|
298
|
-
),
|
299
|
-
DeprecationWarning,
|
300
|
-
stacklevel=2,
|
301
|
-
)
|
302
|
-
self._self_already_awaited = True
|
303
|
-
yield
|
304
|
-
return self.__wrapped__
|
305
|
-
|
306
|
-
def __repr__(self):
|
307
|
-
return repr(self.__wrapped__)
|
308
|
-
|
309
|
-
def __reduce_ex__(self, protocol):
|
310
|
-
return (
|
311
|
-
type(self),
|
312
|
-
(self.__wrapped__,),
|
313
|
-
{"_self_already_awaited": self._self_already_awaited},
|
314
|
-
)
|
315
|
-
|
316
|
-
|
317
|
-
def deprecated_async_method(wrapped):
|
318
|
-
"""Decorator that wraps a sync method to allow awaiting it even though it is no longer async."""
|
319
|
-
|
320
|
-
@wrapt.decorator
|
321
|
-
def wrapper(wrapped, instance, args, kwargs):
|
322
|
-
result = wrapped(*args, **kwargs)
|
323
|
-
return AsyncCompatProxy(
|
324
|
-
result, class_name=instance.__class__.__name__, method_name=wrapped.__name__
|
325
|
-
)
|
326
|
-
|
327
|
-
return wrapper(wrapped)
|
@@ -7,7 +7,6 @@ This will be subject to consolidation and refactoring over the next few months.
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
import json
|
10
|
-
import logging
|
11
10
|
import re
|
12
11
|
import urllib.parse
|
13
12
|
import warnings
|
@@ -21,7 +20,6 @@ import yaml
|
|
21
20
|
from pydantic_extra_types.pendulum_dt import DateTime
|
22
21
|
|
23
22
|
from prefect.exceptions import InvalidRepositoryURLError
|
24
|
-
from prefect.utilities.annotations import NotSet
|
25
23
|
from prefect.utilities.collections import isiterable
|
26
24
|
from prefect.utilities.dockerutils import get_prefect_image_name
|
27
25
|
from prefect.utilities.filesystem import relative_path_to_current_platform
|
@@ -219,96 +217,18 @@ def convert_to_strings(value: Union[Any, List[Any]]) -> Union[str, List[str]]:
|
|
219
217
|
### SCHEDULE SCHEMA VALIDATORS ###
|
220
218
|
|
221
219
|
|
222
|
-
def validate_deprecated_schedule_fields(values: dict, logger: logging.Logger) -> dict:
|
223
|
-
"""
|
224
|
-
Validate and log deprecation warnings for deprecated schedule fields.
|
225
|
-
"""
|
226
|
-
if values.get("schedule") and not values.get("schedules"):
|
227
|
-
logger.warning(
|
228
|
-
"The field 'schedule' in 'Deployment' has been deprecated. It will not be "
|
229
|
-
"available after Sep 2024. Define schedules in the `schedules` list instead."
|
230
|
-
)
|
231
|
-
elif values.get("is_schedule_active") and not values.get("schedules"):
|
232
|
-
logger.warning(
|
233
|
-
"The field 'is_schedule_active' in 'Deployment' has been deprecated. It will "
|
234
|
-
"not be available after Sep 2024. Use the `active` flag within a schedule in "
|
235
|
-
"the `schedules` list instead and the `pause` flag in 'Deployment' to pause "
|
236
|
-
"all schedules."
|
237
|
-
)
|
238
|
-
return values
|
239
|
-
|
240
|
-
|
241
|
-
def reconcile_schedules(cls, values: dict) -> dict:
|
242
|
-
"""
|
243
|
-
Reconcile the `schedule` and `schedules` fields in a deployment.
|
244
|
-
"""
|
245
|
-
|
246
|
-
from prefect.deployments.schedules import (
|
247
|
-
create_deployment_schedule_create,
|
248
|
-
normalize_to_deployment_schedule_create,
|
249
|
-
)
|
250
|
-
|
251
|
-
schedule = values.get("schedule", NotSet)
|
252
|
-
schedules = values.get("schedules", NotSet)
|
253
|
-
|
254
|
-
if schedules is not NotSet:
|
255
|
-
values["schedules"] = normalize_to_deployment_schedule_create(schedules)
|
256
|
-
elif schedule is not NotSet:
|
257
|
-
values["schedule"] = None
|
258
|
-
|
259
|
-
if schedule is None:
|
260
|
-
values["schedules"] = []
|
261
|
-
else:
|
262
|
-
values["schedules"] = [
|
263
|
-
create_deployment_schedule_create(
|
264
|
-
schedule=schedule, active=values.get("is_schedule_active")
|
265
|
-
)
|
266
|
-
]
|
267
|
-
|
268
|
-
for schedule in values.get("schedules", []):
|
269
|
-
cls._validate_schedule(schedule.schedule)
|
270
|
-
|
271
|
-
return values
|
272
|
-
|
273
|
-
|
274
|
-
# TODO: consolidate with above if possible
|
275
220
|
def reconcile_schedules_runner(values: dict) -> dict:
|
276
|
-
"""
|
277
|
-
Similar to above, we reconcile the `schedule` and `schedules` fields in a deployment.
|
278
|
-
"""
|
279
221
|
from prefect.deployments.schedules import (
|
280
|
-
create_deployment_schedule_create,
|
281
222
|
normalize_to_deployment_schedule_create,
|
282
223
|
)
|
283
224
|
|
284
|
-
schedule = values.get("schedule")
|
285
225
|
schedules = values.get("schedules")
|
286
|
-
|
287
|
-
if schedules is None and schedule is not None:
|
288
|
-
values["schedules"] = [create_deployment_schedule_create(schedule)]
|
289
|
-
elif schedules is not None and len(schedules) > 0:
|
226
|
+
if schedules is not None and len(schedules) > 0:
|
290
227
|
values["schedules"] = normalize_to_deployment_schedule_create(schedules)
|
291
228
|
|
292
229
|
return values
|
293
230
|
|
294
231
|
|
295
|
-
def set_deployment_schedules(values: dict) -> dict:
|
296
|
-
from prefect.server.schemas.actions import DeploymentScheduleCreate
|
297
|
-
|
298
|
-
if not values.get("schedules") and values.get("schedule"):
|
299
|
-
kwargs = {
|
300
|
-
key: values[key]
|
301
|
-
for key in ["schedule", "is_schedule_active"]
|
302
|
-
if key in values
|
303
|
-
}
|
304
|
-
if "is_schedule_active" in kwargs:
|
305
|
-
kwargs["active"] = kwargs.pop("is_schedule_active")
|
306
|
-
|
307
|
-
values["schedules"] = [DeploymentScheduleCreate(**kwargs)]
|
308
|
-
|
309
|
-
return values
|
310
|
-
|
311
|
-
|
312
232
|
def validate_schedule_max_scheduled_runs(v: Optional[int], limit: int) -> Optional[int]:
|
313
233
|
if v is not None and v > limit:
|
314
234
|
raise ValueError(f"`max_scheduled_runs` must be less than or equal to {limit}.")
|
@@ -350,17 +270,9 @@ def remove_old_deployment_fields(values: dict) -> dict:
|
|
350
270
|
|
351
271
|
def reconcile_paused_deployment(values):
|
352
272
|
paused = values.get("paused")
|
353
|
-
|
354
|
-
|
355
|
-
if paused is not None:
|
356
|
-
values["paused"] = paused
|
357
|
-
values["is_schedule_active"] = not paused
|
358
|
-
elif is_schedule_active is not None:
|
359
|
-
values["paused"] = not is_schedule_active
|
360
|
-
values["is_schedule_active"] = is_schedule_active
|
361
|
-
else:
|
273
|
+
|
274
|
+
if paused is None:
|
362
275
|
values["paused"] = False
|
363
|
-
values["is_schedule_active"] = True
|
364
276
|
|
365
277
|
return values
|
366
278
|
|
prefect/client/orchestration.py
CHANGED
@@ -86,7 +86,6 @@ from prefect.client.schemas.objects import (
|
|
86
86
|
BlockType,
|
87
87
|
ConcurrencyLimit,
|
88
88
|
Constant,
|
89
|
-
Deployment,
|
90
89
|
DeploymentSchedule,
|
91
90
|
Flow,
|
92
91
|
FlowRunInput,
|
@@ -1599,7 +1598,6 @@ class PrefectClient:
|
|
1599
1598
|
flow_id: UUID,
|
1600
1599
|
name: str,
|
1601
1600
|
version: Optional[str] = None,
|
1602
|
-
schedule: Optional[SCHEDULE_TYPES] = None,
|
1603
1601
|
schedules: Optional[List[DeploymentScheduleCreate]] = None,
|
1604
1602
|
parameters: Optional[Dict[str, Any]] = None,
|
1605
1603
|
description: Optional[str] = None,
|
@@ -1611,7 +1609,6 @@ class PrefectClient:
|
|
1611
1609
|
entrypoint: Optional[str] = None,
|
1612
1610
|
infrastructure_document_id: Optional[UUID] = None,
|
1613
1611
|
parameter_openapi_schema: Optional[Dict[str, Any]] = None,
|
1614
|
-
is_schedule_active: Optional[bool] = None,
|
1615
1612
|
paused: Optional[bool] = None,
|
1616
1613
|
pull_steps: Optional[List[dict]] = None,
|
1617
1614
|
enforce_parameter_schema: Optional[bool] = None,
|
@@ -1624,7 +1621,6 @@ class PrefectClient:
|
|
1624
1621
|
flow_id: the flow ID to create a deployment for
|
1625
1622
|
name: the name of the deployment
|
1626
1623
|
version: an optional version string for the deployment
|
1627
|
-
schedule: an optional schedule to apply to the deployment
|
1628
1624
|
tags: an optional list of tags to apply to the deployment
|
1629
1625
|
storage_document_id: an reference to the storage block document
|
1630
1626
|
used for the deployed flow
|
@@ -1658,9 +1654,7 @@ class PrefectClient:
|
|
1658
1654
|
infrastructure_document_id=infrastructure_document_id,
|
1659
1655
|
job_variables=dict(job_variables or {}),
|
1660
1656
|
parameter_openapi_schema=parameter_openapi_schema,
|
1661
|
-
is_schedule_active=is_schedule_active,
|
1662
1657
|
paused=paused,
|
1663
|
-
schedule=schedule,
|
1664
1658
|
schedules=schedules or [],
|
1665
1659
|
pull_steps=pull_steps,
|
1666
1660
|
enforce_parameter_schema=enforce_parameter_schema,
|
@@ -1676,9 +1670,6 @@ class PrefectClient:
|
|
1676
1670
|
if field not in deployment_create.model_fields_set
|
1677
1671
|
}
|
1678
1672
|
|
1679
|
-
if deployment_create.is_schedule_active is None:
|
1680
|
-
exclude.add("is_schedule_active")
|
1681
|
-
|
1682
1673
|
if deployment_create.paused is None:
|
1683
1674
|
exclude.add("paused")
|
1684
1675
|
|
@@ -1699,12 +1690,6 @@ class PrefectClient:
|
|
1699
1690
|
|
1700
1691
|
return UUID(deployment_id)
|
1701
1692
|
|
1702
|
-
async def update_schedule(self, deployment_id: UUID, active: bool = True):
|
1703
|
-
path = "set_schedule_active" if active else "set_schedule_inactive"
|
1704
|
-
await self._client.post(
|
1705
|
-
f"/deployments/{deployment_id}/{path}",
|
1706
|
-
)
|
1707
|
-
|
1708
1693
|
async def set_deployment_paused_state(self, deployment_id: UUID, paused: bool):
|
1709
1694
|
await self._client.patch(
|
1710
1695
|
f"/deployments/{deployment_id}", json={"paused": paused}
|
@@ -1712,40 +1697,12 @@ class PrefectClient:
|
|
1712
1697
|
|
1713
1698
|
async def update_deployment(
|
1714
1699
|
self,
|
1715
|
-
|
1716
|
-
|
1717
|
-
is_schedule_active: Optional[bool] = None,
|
1700
|
+
deployment_id: UUID,
|
1701
|
+
deployment: DeploymentUpdate,
|
1718
1702
|
):
|
1719
|
-
deployment_update = DeploymentUpdate(
|
1720
|
-
version=deployment.version,
|
1721
|
-
schedule=schedule if schedule is not None else deployment.schedule,
|
1722
|
-
is_schedule_active=(
|
1723
|
-
is_schedule_active
|
1724
|
-
if is_schedule_active is not None
|
1725
|
-
else deployment.is_schedule_active
|
1726
|
-
),
|
1727
|
-
description=deployment.description,
|
1728
|
-
work_queue_name=deployment.work_queue_name,
|
1729
|
-
tags=deployment.tags,
|
1730
|
-
path=deployment.path,
|
1731
|
-
entrypoint=deployment.entrypoint,
|
1732
|
-
parameters=deployment.parameters,
|
1733
|
-
storage_document_id=deployment.storage_document_id,
|
1734
|
-
infrastructure_document_id=deployment.infrastructure_document_id,
|
1735
|
-
job_variables=deployment.job_variables,
|
1736
|
-
enforce_parameter_schema=deployment.enforce_parameter_schema,
|
1737
|
-
)
|
1738
|
-
|
1739
|
-
if getattr(deployment, "work_pool_name", None) is not None:
|
1740
|
-
deployment_update.work_pool_name = deployment.work_pool_name
|
1741
|
-
|
1742
|
-
exclude = set()
|
1743
|
-
if deployment.enforce_parameter_schema is None:
|
1744
|
-
exclude.add("enforce_parameter_schema")
|
1745
|
-
|
1746
1703
|
await self._client.patch(
|
1747
|
-
f"/deployments/{
|
1748
|
-
json=
|
1704
|
+
f"/deployments/{deployment_id}",
|
1705
|
+
json=deployment.model_dump(mode="json", exclude_unset=True),
|
1749
1706
|
)
|
1750
1707
|
|
1751
1708
|
async def _create_deployment_from_schema(self, schema: DeploymentCreate) -> UUID:
|
@@ -11,7 +11,6 @@ from prefect._internal.schemas.bases import ActionBaseModel
|
|
11
11
|
from prefect._internal.schemas.validators import (
|
12
12
|
convert_to_strings,
|
13
13
|
remove_old_deployment_fields,
|
14
|
-
return_none_schedule,
|
15
14
|
validate_artifact_key,
|
16
15
|
validate_block_document_name,
|
17
16
|
validate_block_type_slug,
|
@@ -153,7 +152,6 @@ class DeploymentCreate(ActionBaseModel):
|
|
153
152
|
|
154
153
|
name: str = Field(..., description="The name of the deployment.")
|
155
154
|
flow_id: UUID = Field(..., description="The ID of the flow to deploy.")
|
156
|
-
is_schedule_active: Optional[bool] = Field(None)
|
157
155
|
paused: Optional[bool] = Field(None)
|
158
156
|
schedules: List[DeploymentScheduleCreate] = Field(
|
159
157
|
default_factory=list,
|
@@ -181,7 +179,6 @@ class DeploymentCreate(ActionBaseModel):
|
|
181
179
|
)
|
182
180
|
storage_document_id: Optional[UUID] = Field(None)
|
183
181
|
infrastructure_document_id: Optional[UUID] = Field(None)
|
184
|
-
schedule: Optional[SCHEDULE_TYPES] = Field(None)
|
185
182
|
description: Optional[str] = Field(None)
|
186
183
|
path: Optional[str] = Field(None)
|
187
184
|
version: Optional[str] = Field(None)
|
@@ -219,19 +216,19 @@ class DeploymentUpdate(ActionBaseModel):
|
|
219
216
|
def remove_old_fields(cls, values):
|
220
217
|
return remove_old_deployment_fields(values)
|
221
218
|
|
222
|
-
@field_validator("schedule")
|
223
|
-
@classmethod
|
224
|
-
def validate_none_schedule(cls, v):
|
225
|
-
return return_none_schedule(v)
|
226
|
-
|
227
219
|
version: Optional[str] = Field(None)
|
228
|
-
schedule: Optional[SCHEDULE_TYPES] = Field(None)
|
229
220
|
description: Optional[str] = Field(None)
|
230
|
-
is_schedule_active: bool = Field(None)
|
231
221
|
parameters: Optional[Dict[str, Any]] = Field(
|
232
222
|
default=None,
|
233
223
|
description="Parameters for flow runs scheduled by the deployment.",
|
234
224
|
)
|
225
|
+
paused: Optional[bool] = Field(
|
226
|
+
default=None, description="Whether or not the deployment is paused."
|
227
|
+
)
|
228
|
+
schedules: Optional[List[DeploymentScheduleCreate]] = Field(
|
229
|
+
default=None,
|
230
|
+
description="A list of schedules for the deployment.",
|
231
|
+
)
|
235
232
|
tags: List[str] = Field(default_factory=list)
|
236
233
|
work_queue_name: Optional[str] = Field(None)
|
237
234
|
work_pool_name: Optional[str] = Field(
|
@@ -489,15 +489,6 @@ class DeploymentFilterWorkQueueName(PrefectBaseModel):
|
|
489
489
|
)
|
490
490
|
|
491
491
|
|
492
|
-
class DeploymentFilterIsScheduleActive(PrefectBaseModel):
|
493
|
-
"""Filter by `Deployment.is_schedule_active`."""
|
494
|
-
|
495
|
-
eq_: Optional[bool] = Field(
|
496
|
-
default=None,
|
497
|
-
description="Only returns where deployment schedule is/is not active",
|
498
|
-
)
|
499
|
-
|
500
|
-
|
501
492
|
class DeploymentFilterTags(PrefectBaseModel, OperatorMixin):
|
502
493
|
"""Filter by `Deployment.tags`."""
|
503
494
|
|
@@ -523,9 +514,6 @@ class DeploymentFilter(PrefectBaseModel, OperatorMixin):
|
|
523
514
|
name: Optional[DeploymentFilterName] = Field(
|
524
515
|
default=None, description="Filter criteria for `Deployment.name`"
|
525
516
|
)
|
526
|
-
is_schedule_active: Optional[DeploymentFilterIsScheduleActive] = Field(
|
527
|
-
default=None, description="Filter criteria for `Deployment.is_schedule_active`"
|
528
|
-
)
|
529
517
|
tags: Optional[DeploymentFilterTags] = Field(
|
530
518
|
default=None, description="Filter criteria for `Deployment.tags`"
|
531
519
|
)
|
@@ -993,12 +993,6 @@ class Deployment(ObjectBaseModel):
|
|
993
993
|
flow_id: UUID = Field(
|
994
994
|
default=..., description="The flow id associated with the deployment."
|
995
995
|
)
|
996
|
-
schedule: Optional[SCHEDULE_TYPES] = Field(
|
997
|
-
default=None, description="A schedule for the deployment."
|
998
|
-
)
|
999
|
-
is_schedule_active: bool = Field(
|
1000
|
-
default=True, description="Whether or not the deployment schedule is active."
|
1001
|
-
)
|
1002
996
|
paused: bool = Field(
|
1003
997
|
default=False, description="Whether or not the deployment is paused."
|
1004
998
|
)
|
@@ -9,7 +9,6 @@ from typing_extensions import Literal
|
|
9
9
|
import prefect.client.schemas.objects as objects
|
10
10
|
from prefect._internal.schemas.bases import ObjectBaseModel, PrefectBaseModel
|
11
11
|
from prefect._internal.schemas.fields import CreatedBy, UpdatedBy
|
12
|
-
from prefect.client.schemas.schedules import SCHEDULE_TYPES
|
13
12
|
from prefect.utilities.collections import AutoEnum
|
14
13
|
from prefect.utilities.names import generate_slug
|
15
14
|
|
@@ -314,12 +313,6 @@ class DeploymentResponse(ObjectBaseModel):
|
|
314
313
|
flow_id: UUID = Field(
|
315
314
|
default=..., description="The flow id associated with the deployment."
|
316
315
|
)
|
317
|
-
schedule: Optional[SCHEDULE_TYPES] = Field(
|
318
|
-
default=None, description="A schedule for the deployment."
|
319
|
-
)
|
320
|
-
is_schedule_active: bool = Field(
|
321
|
-
default=True, description="Whether or not the deployment schedule is active."
|
322
|
-
)
|
323
316
|
paused: bool = Field(
|
324
317
|
default=False, description="Whether or not the deployment is paused."
|
325
318
|
)
|
prefect/context.py
CHANGED
@@ -91,11 +91,12 @@ def hydrated_context(
|
|
91
91
|
client = client or get_client(sync_client=True)
|
92
92
|
if flow_run_context := serialized_context.get("flow_run_context"):
|
93
93
|
flow = flow_run_context["flow"]
|
94
|
+
task_runner = stack.enter_context(flow.task_runner.duplicate())
|
94
95
|
flow_run_context = FlowRunContext(
|
95
96
|
**flow_run_context,
|
96
97
|
client=client,
|
97
98
|
result_factory=run_coro_as_sync(ResultFactory.from_flow(flow)),
|
98
|
-
task_runner=
|
99
|
+
task_runner=task_runner,
|
99
100
|
detached=True,
|
100
101
|
)
|
101
102
|
stack.enter_context(flow_run_context)
|
prefect/deployments/base.py
CHANGED
@@ -258,15 +258,6 @@ def _format_deployment_for_saving_to_prefect_file(
|
|
258
258
|
# Only want entrypoint to avoid errors
|
259
259
|
deployment.pop("flow_name", None)
|
260
260
|
|
261
|
-
if deployment.get("schedule"):
|
262
|
-
if isinstance(deployment["schedule"], IntervalSchedule):
|
263
|
-
deployment["schedule"] = _interval_schedule_to_dict(deployment["schedule"])
|
264
|
-
else: # all valid SCHEDULE_TYPES are subclasses of BaseModel
|
265
|
-
deployment["schedule"] = deployment["schedule"].model_dump()
|
266
|
-
|
267
|
-
if "is_schedule_active" in deployment:
|
268
|
-
deployment["schedule"]["active"] = deployment.pop("is_schedule_active")
|
269
|
-
|
270
261
|
if deployment.get("schedules"):
|
271
262
|
schedules = []
|
272
263
|
for deployment_schedule in cast(
|
prefect/deployments/runner.py
CHANGED
@@ -106,7 +106,6 @@ class RunnerDeployment(BaseModel):
|
|
106
106
|
are used only for organizational purposes. For delegating work to agents,
|
107
107
|
see `work_queue_name`.
|
108
108
|
schedule: A schedule to run this deployment on, once registered
|
109
|
-
is_schedule_active: Whether or not the schedule is active
|
110
109
|
parameters: A dictionary of parameter values to pass to runs created from this
|
111
110
|
deployment
|
112
111
|
path: The path to the working directory for the workflow, relative to remote
|
@@ -144,13 +143,9 @@ class RunnerDeployment(BaseModel):
|
|
144
143
|
default=None,
|
145
144
|
description="The schedules that should cause this deployment to run.",
|
146
145
|
)
|
147
|
-
schedule: Optional[SCHEDULE_TYPES] = None
|
148
146
|
paused: Optional[bool] = Field(
|
149
147
|
default=None, description="Whether or not the deployment is paused."
|
150
148
|
)
|
151
|
-
is_schedule_active: Optional[bool] = Field(
|
152
|
-
default=None, description="DEPRECATED: Whether or not the schedule is active."
|
153
|
-
)
|
154
149
|
parameters: Dict[str, Any] = Field(default_factory=dict)
|
155
150
|
entrypoint: Optional[str] = Field(
|
156
151
|
default=None,
|
@@ -383,7 +378,7 @@ class RunnerDeployment(BaseModel):
|
|
383
378
|
)
|
384
379
|
if num_schedules > 1:
|
385
380
|
raise ValueError(
|
386
|
-
"Only one of interval, cron, rrule,
|
381
|
+
"Only one of interval, cron, rrule, or schedules can be provided."
|
387
382
|
)
|
388
383
|
elif num_schedules == 0:
|
389
384
|
return []
|
@@ -437,8 +432,6 @@ class RunnerDeployment(BaseModel):
|
|
437
432
|
rrule: Optional[Union[Iterable[str], str]] = None,
|
438
433
|
paused: Optional[bool] = None,
|
439
434
|
schedules: Optional["FlexibleScheduleList"] = None,
|
440
|
-
schedule: Optional[SCHEDULE_TYPES] = None,
|
441
|
-
is_schedule_active: Optional[bool] = None,
|
442
435
|
parameters: Optional[dict] = None,
|
443
436
|
triggers: Optional[List[Union[DeploymentTriggerTypes, TriggerTypes]]] = None,
|
444
437
|
description: Optional[str] = None,
|
@@ -463,11 +456,6 @@ class RunnerDeployment(BaseModel):
|
|
463
456
|
paused: Whether or not to set this deployment as paused.
|
464
457
|
schedules: A list of schedule objects defining when to execute runs of this deployment.
|
465
458
|
Used to define multiple schedules or additional scheduling options like `timezone`.
|
466
|
-
schedule: A schedule object of when to execute runs of this flow. Used for
|
467
|
-
advanced scheduling options like timezone.
|
468
|
-
is_schedule_active: Whether or not to set the schedule for this deployment as active. If
|
469
|
-
not provided when creating a deployment, the schedule will be set as active. If not
|
470
|
-
provided when updating a deployment, the schedule's activation will not be changed.
|
471
459
|
triggers: A list of triggers that should kick of a run of this flow.
|
472
460
|
parameters: A dictionary of default parameter values to pass to runs of this flow.
|
473
461
|
description: A description for the created deployment. Defaults to the flow's
|
@@ -488,7 +476,6 @@ class RunnerDeployment(BaseModel):
|
|
488
476
|
interval=interval,
|
489
477
|
cron=cron,
|
490
478
|
rrule=rrule,
|
491
|
-
schedule=schedule,
|
492
479
|
schedules=schedules,
|
493
480
|
)
|
494
481
|
|
@@ -497,9 +484,7 @@ class RunnerDeployment(BaseModel):
|
|
497
484
|
deployment = cls(
|
498
485
|
name=Path(name).stem,
|
499
486
|
flow_name=flow.name,
|
500
|
-
schedule=schedule,
|
501
487
|
schedules=constructed_schedules,
|
502
|
-
is_schedule_active=is_schedule_active,
|
503
488
|
paused=paused,
|
504
489
|
tags=tags or [],
|
505
490
|
triggers=triggers or [],
|
@@ -573,8 +558,6 @@ class RunnerDeployment(BaseModel):
|
|
573
558
|
rrule: Optional[Union[Iterable[str], str]] = None,
|
574
559
|
paused: Optional[bool] = None,
|
575
560
|
schedules: Optional["FlexibleScheduleList"] = None,
|
576
|
-
schedule: Optional[SCHEDULE_TYPES] = None,
|
577
|
-
is_schedule_active: Optional[bool] = None,
|
578
561
|
parameters: Optional[dict] = None,
|
579
562
|
triggers: Optional[List[Union[DeploymentTriggerTypes, TriggerTypes]]] = None,
|
580
563
|
description: Optional[str] = None,
|
@@ -599,11 +582,6 @@ class RunnerDeployment(BaseModel):
|
|
599
582
|
paused: Whether or not to set this deployment as paused.
|
600
583
|
schedules: A list of schedule objects defining when to execute runs of this deployment.
|
601
584
|
Used to define multiple schedules or additional scheduling options like `timezone`.
|
602
|
-
schedule: A schedule object of when to execute runs of this flow. Used for
|
603
|
-
advanced scheduling options like timezone.
|
604
|
-
is_schedule_active: Whether or not to set the schedule for this deployment as active. If
|
605
|
-
not provided when creating a deployment, the schedule will be set as active. If not
|
606
|
-
provided when updating a deployment, the schedule's activation will not be changed.
|
607
585
|
triggers: A list of triggers that should kick of a run of this flow.
|
608
586
|
parameters: A dictionary of default parameter values to pass to runs of this flow.
|
609
587
|
description: A description for the created deployment. Defaults to the flow's
|
@@ -629,17 +607,14 @@ class RunnerDeployment(BaseModel):
|
|
629
607
|
interval=interval,
|
630
608
|
cron=cron,
|
631
609
|
rrule=rrule,
|
632
|
-
schedule=schedule,
|
633
610
|
schedules=schedules,
|
634
611
|
)
|
635
612
|
|
636
613
|
deployment = cls(
|
637
614
|
name=Path(name).stem,
|
638
615
|
flow_name=flow.name,
|
639
|
-
schedule=schedule,
|
640
616
|
schedules=constructed_schedules,
|
641
617
|
paused=paused,
|
642
|
-
is_schedule_active=is_schedule_active,
|
643
618
|
tags=tags or [],
|
644
619
|
triggers=triggers or [],
|
645
620
|
parameters=parameters or {},
|
@@ -671,8 +646,6 @@ class RunnerDeployment(BaseModel):
|
|
671
646
|
rrule: Optional[Union[Iterable[str], str]] = None,
|
672
647
|
paused: Optional[bool] = None,
|
673
648
|
schedules: Optional["FlexibleScheduleList"] = None,
|
674
|
-
schedule: Optional[SCHEDULE_TYPES] = None,
|
675
|
-
is_schedule_active: Optional[bool] = None,
|
676
649
|
parameters: Optional[dict] = None,
|
677
650
|
triggers: Optional[List[Union[DeploymentTriggerTypes, TriggerTypes]]] = None,
|
678
651
|
description: Optional[str] = None,
|
@@ -697,11 +670,6 @@ class RunnerDeployment(BaseModel):
|
|
697
670
|
or a timedelta object. If a number is given, it will be interpreted as seconds.
|
698
671
|
cron: A cron schedule of when to execute runs of this flow.
|
699
672
|
rrule: An rrule schedule of when to execute runs of this flow.
|
700
|
-
schedule: A schedule object of when to execute runs of this flow. Used for
|
701
|
-
advanced scheduling options like timezone.
|
702
|
-
is_schedule_active: Whether or not to set the schedule for this deployment as active. If
|
703
|
-
not provided when creating a deployment, the schedule will be set as active. If not
|
704
|
-
provided when updating a deployment, the schedule's activation will not be changed.
|
705
673
|
triggers: A list of triggers that should kick of a run of this flow.
|
706
674
|
parameters: A dictionary of default parameter values to pass to runs of this flow.
|
707
675
|
description: A description for the created deployment. Defaults to the flow's
|
@@ -724,7 +692,6 @@ class RunnerDeployment(BaseModel):
|
|
724
692
|
interval=interval,
|
725
693
|
cron=cron,
|
726
694
|
rrule=rrule,
|
727
|
-
schedule=schedule,
|
728
695
|
schedules=schedules,
|
729
696
|
)
|
730
697
|
|
@@ -742,10 +709,8 @@ class RunnerDeployment(BaseModel):
|
|
742
709
|
deployment = cls(
|
743
710
|
name=Path(name).stem,
|
744
711
|
flow_name=flow.name,
|
745
|
-
schedule=schedule,
|
746
712
|
schedules=constructed_schedules,
|
747
713
|
paused=paused,
|
748
|
-
is_schedule_active=is_schedule_active,
|
749
714
|
tags=tags or [],
|
750
715
|
triggers=triggers or [],
|
751
716
|
parameters=parameters or {},
|