prefect-client 3.0.0rc3__py3-none-any.whl → 3.0.0rc4__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/__init__.py +0 -1
- prefect/client/subscriptions.py +3 -3
- prefect/flow_engine.py +82 -2
- prefect/flows.py +12 -2
- prefect/futures.py +9 -1
- prefect/results.py +33 -31
- prefect/settings.py +1 -1
- prefect/task_engine.py +5 -6
- prefect/task_runs.py +23 -9
- prefect/task_worker.py +128 -19
- prefect/tasks.py +20 -14
- prefect/transactions.py +6 -8
- prefect/types/__init__.py +10 -3
- prefect/utilities/collections.py +120 -57
- prefect/utilities/urls.py +5 -5
- {prefect_client-3.0.0rc3.dist-info → prefect_client-3.0.0rc4.dist-info}/METADATA +2 -2
- {prefect_client-3.0.0rc3.dist-info → prefect_client-3.0.0rc4.dist-info}/RECORD +20 -21
- prefect/blocks/kubernetes.py +0 -115
- {prefect_client-3.0.0rc3.dist-info → prefect_client-3.0.0rc4.dist-info}/LICENSE +0 -0
- {prefect_client-3.0.0rc3.dist-info → prefect_client-3.0.0rc4.dist-info}/WHEEL +0 -0
- {prefect_client-3.0.0rc3.dist-info → prefect_client-3.0.0rc4.dist-info}/top_level.txt +0 -0
prefect/tasks.py
CHANGED
@@ -44,7 +44,7 @@ from prefect.context import (
|
|
44
44
|
)
|
45
45
|
from prefect.futures import PrefectDistributedFuture, PrefectFuture
|
46
46
|
from prefect.logging.loggers import get_logger
|
47
|
-
from prefect.records.cache_policies import DEFAULT, CachePolicy
|
47
|
+
from prefect.records.cache_policies import DEFAULT, NONE, CachePolicy
|
48
48
|
from prefect.results import ResultFactory, ResultSerializer, ResultStorage
|
49
49
|
from prefect.settings import (
|
50
50
|
PREFECT_TASK_DEFAULT_RETRIES,
|
@@ -218,10 +218,8 @@ class Task(Generic[P, R]):
|
|
218
218
|
cannot exceed 50.
|
219
219
|
retry_jitter_factor: An optional factor that defines the factor to which a retry
|
220
220
|
can be jittered in order to avoid a "thundering herd".
|
221
|
-
persist_result: An
|
222
|
-
should be persisted to result storage. Defaults to `
|
223
|
-
that Prefect should choose whether the result should be persisted depending on
|
224
|
-
the features being used.
|
221
|
+
persist_result: An toggle indicating whether the result of this task
|
222
|
+
should be persisted to result storage. Defaults to `True`.
|
225
223
|
result_storage: An optional block to use to persist the result of this task.
|
226
224
|
Defaults to the value set in the flow the task is called in.
|
227
225
|
result_storage_key: An optional key to store the result in storage at when persisted.
|
@@ -273,7 +271,7 @@ class Task(Generic[P, R]):
|
|
273
271
|
]
|
274
272
|
] = None,
|
275
273
|
retry_jitter_factor: Optional[float] = None,
|
276
|
-
persist_result:
|
274
|
+
persist_result: bool = True,
|
277
275
|
result_storage: Optional[ResultStorage] = None,
|
278
276
|
result_serializer: Optional[ResultSerializer] = None,
|
279
277
|
result_storage_key: Optional[str] = None,
|
@@ -368,7 +366,11 @@ class Task(Generic[P, R]):
|
|
368
366
|
|
369
367
|
self.task_key = f"{self.fn.__qualname__}-{task_origin_hash}"
|
370
368
|
|
371
|
-
|
369
|
+
if cache_policy is not NotSet and cache_key_fn is not None:
|
370
|
+
logger.warning(
|
371
|
+
f"Both `cache_policy` and `cache_key_fn` are set on task {self}. `cache_key_fn` will be used."
|
372
|
+
)
|
373
|
+
|
372
374
|
if cache_key_fn:
|
373
375
|
cache_policy = CachePolicy.from_cache_key_fn(cache_key_fn)
|
374
376
|
|
@@ -377,7 +379,13 @@ class Task(Generic[P, R]):
|
|
377
379
|
self.cache_expiration = cache_expiration
|
378
380
|
self.refresh_cache = refresh_cache
|
379
381
|
|
380
|
-
if
|
382
|
+
if not persist_result:
|
383
|
+
self.cache_policy = None if cache_policy is None else NONE
|
384
|
+
if cache_policy and cache_policy is not NotSet and cache_policy != NONE:
|
385
|
+
logger.warning(
|
386
|
+
"Ignoring `cache_policy` because `persist_result` is False"
|
387
|
+
)
|
388
|
+
elif cache_policy is NotSet and result_storage_key is None:
|
381
389
|
self.cache_policy = DEFAULT
|
382
390
|
elif result_storage_key:
|
383
391
|
# TODO: handle this situation with double storage
|
@@ -1326,7 +1334,7 @@ def task(
|
|
1326
1334
|
Callable[[int], List[float]],
|
1327
1335
|
] = 0,
|
1328
1336
|
retry_jitter_factor: Optional[float] = None,
|
1329
|
-
persist_result:
|
1337
|
+
persist_result: bool = True,
|
1330
1338
|
result_storage: Optional[ResultStorage] = None,
|
1331
1339
|
result_storage_key: Optional[str] = None,
|
1332
1340
|
result_serializer: Optional[ResultSerializer] = None,
|
@@ -1358,7 +1366,7 @@ def task(
|
|
1358
1366
|
float, int, List[float], Callable[[int], List[float]], None
|
1359
1367
|
] = None,
|
1360
1368
|
retry_jitter_factor: Optional[float] = None,
|
1361
|
-
persist_result:
|
1369
|
+
persist_result: bool = True,
|
1362
1370
|
result_storage: Optional[ResultStorage] = None,
|
1363
1371
|
result_storage_key: Optional[str] = None,
|
1364
1372
|
result_serializer: Optional[ResultSerializer] = None,
|
@@ -1404,10 +1412,8 @@ def task(
|
|
1404
1412
|
cannot exceed 50.
|
1405
1413
|
retry_jitter_factor: An optional factor that defines the factor to which a retry
|
1406
1414
|
can be jittered in order to avoid a "thundering herd".
|
1407
|
-
persist_result: An
|
1408
|
-
should be persisted to result storage. Defaults to `
|
1409
|
-
that Prefect should choose whether the result should be persisted depending on
|
1410
|
-
the features being used.
|
1415
|
+
persist_result: An toggle indicating whether the result of this task
|
1416
|
+
should be persisted to result storage. Defaults to `True`.
|
1411
1417
|
result_storage: An optional block to use to persist the result of this task.
|
1412
1418
|
Defaults to the value set in the flow the task is called in.
|
1413
1419
|
result_storage_key: An optional key to store the result in storage at when persisted.
|
prefect/transactions.py
CHANGED
@@ -15,8 +15,11 @@ from typing_extensions import Self
|
|
15
15
|
from prefect.context import ContextModel, FlowRunContext, TaskRunContext
|
16
16
|
from prefect.records import RecordStore
|
17
17
|
from prefect.records.result_store import ResultFactoryStore
|
18
|
-
from prefect.results import
|
19
|
-
|
18
|
+
from prefect.results import (
|
19
|
+
BaseResult,
|
20
|
+
ResultFactory,
|
21
|
+
get_or_create_default_result_storage,
|
22
|
+
)
|
20
23
|
from prefect.utilities.asyncutils import run_coro_as_sync
|
21
24
|
from prefect.utilities.collections import AutoEnum
|
22
25
|
|
@@ -265,12 +268,7 @@ def transaction(
|
|
265
268
|
}
|
266
269
|
)
|
267
270
|
else:
|
268
|
-
default_storage =
|
269
|
-
if not default_storage._block_document_id:
|
270
|
-
default_name = PREFECT_DEFAULT_RESULT_STORAGE_BLOCK.value().split("/")[
|
271
|
-
-1
|
272
|
-
]
|
273
|
-
default_storage.save(default_name, overwrite=True, _sync=True)
|
271
|
+
default_storage = get_or_create_default_result_storage(_sync=True)
|
274
272
|
if existing_factory:
|
275
273
|
new_factory = existing_factory.model_copy(
|
276
274
|
update={
|
prefect/types/__init__.py
CHANGED
@@ -15,12 +15,19 @@ from zoneinfo import available_timezones
|
|
15
15
|
MAX_VARIABLE_NAME_LENGTH = 255
|
16
16
|
MAX_VARIABLE_VALUE_LENGTH = 5000
|
17
17
|
|
18
|
-
timezone_set = available_timezones()
|
19
|
-
|
20
18
|
NonNegativeInteger = Annotated[int, Field(ge=0)]
|
21
19
|
PositiveInteger = Annotated[int, Field(gt=0)]
|
22
20
|
NonNegativeFloat = Annotated[float, Field(ge=0.0)]
|
23
|
-
|
21
|
+
|
22
|
+
TimeZone = Annotated[
|
23
|
+
str,
|
24
|
+
Field(
|
25
|
+
default="UTC",
|
26
|
+
pattern="|".join(
|
27
|
+
[z for z in sorted(available_timezones()) if "localtime" not in z]
|
28
|
+
),
|
29
|
+
),
|
30
|
+
]
|
24
31
|
|
25
32
|
|
26
33
|
BANNED_CHARACTERS = ["/", "%", "&", ">", "<"]
|
prefect/utilities/collections.py
CHANGED
@@ -4,6 +4,7 @@ Utilities for extensions of and operations on Python collections.
|
|
4
4
|
|
5
5
|
import io
|
6
6
|
import itertools
|
7
|
+
import types
|
7
8
|
import warnings
|
8
9
|
from collections import OrderedDict, defaultdict
|
9
10
|
from collections.abc import Iterator as IteratorABC
|
@@ -220,25 +221,31 @@ class StopVisiting(BaseException):
|
|
220
221
|
|
221
222
|
|
222
223
|
def visit_collection(
|
223
|
-
expr,
|
224
|
-
visit_fn: Union[Callable[[Any, dict], Any], Callable[[Any], Any]],
|
224
|
+
expr: Any,
|
225
|
+
visit_fn: Union[Callable[[Any, Optional[dict]], Any], Callable[[Any], Any]],
|
225
226
|
return_data: bool = False,
|
226
227
|
max_depth: int = -1,
|
227
228
|
context: Optional[dict] = None,
|
228
229
|
remove_annotations: bool = False,
|
229
|
-
|
230
|
+
_seen: Optional[Set[int]] = None,
|
231
|
+
) -> Any:
|
230
232
|
"""
|
231
|
-
|
232
|
-
is a Python collection, it will be visited recursively. If an element is not a
|
233
|
-
collection, `visit_fn` will be called with the element. The return value of
|
234
|
-
`visit_fn` can be used to alter the element if `return_data` is set.
|
233
|
+
Visits and potentially transforms every element of an arbitrary Python collection.
|
235
234
|
|
236
|
-
|
237
|
-
|
238
|
-
|
235
|
+
If an element is a Python collection, it will be visited recursively. If an element
|
236
|
+
is not a collection, `visit_fn` will be called with the element. The return value of
|
237
|
+
`visit_fn` can be used to alter the element if `return_data` is set to `True`.
|
238
|
+
|
239
|
+
Note:
|
240
|
+
- When `return_data` is `True`, a copy of each collection is created only if
|
241
|
+
`visit_fn` modifies an element within that collection. This approach minimizes
|
242
|
+
performance penalties by avoiding unnecessary copying.
|
243
|
+
- When `return_data` is `False`, no copies are created, and only side effects from
|
244
|
+
`visit_fn` are applied. This mode is faster and should be used when no transformation
|
245
|
+
of the collection is required, because it never has to copy any data.
|
239
246
|
|
240
247
|
Supported types:
|
241
|
-
- List
|
248
|
+
- List (including iterators)
|
242
249
|
- Tuple
|
243
250
|
- Set
|
244
251
|
- Dict (note: keys are also visited recursively)
|
@@ -246,32 +253,41 @@ def visit_collection(
|
|
246
253
|
- Pydantic model
|
247
254
|
- Prefect annotations
|
248
255
|
|
256
|
+
Note that visit_collection will not consume generators or async generators, as it would prevent
|
257
|
+
the caller from iterating over them.
|
258
|
+
|
249
259
|
Args:
|
250
|
-
expr (Any):
|
251
|
-
visit_fn (Callable[[Any, Optional[dict]],
|
252
|
-
will be applied to every non-collection element of expr
|
253
|
-
accept one or two arguments. If two arguments are accepted, the second
|
254
|
-
|
255
|
-
return_data (bool):
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
descend to N layers deep. If set to any negative integer, no limit will be
|
260
|
+
expr (Any): A Python object or expression.
|
261
|
+
visit_fn (Callable[[Any, Optional[dict]], Any] or Callable[[Any], Any]): A function
|
262
|
+
that will be applied to every non-collection element of `expr`. The function can
|
263
|
+
accept one or two arguments. If two arguments are accepted, the second argument
|
264
|
+
will be the context dictionary.
|
265
|
+
return_data (bool): If `True`, a copy of `expr` containing data modified by `visit_fn`
|
266
|
+
will be returned. This is slower than `return_data=False` (the default).
|
267
|
+
max_depth (int): Controls the depth of recursive visitation. If set to zero, no
|
268
|
+
recursion will occur. If set to a positive integer `N`, visitation will only
|
269
|
+
descend to `N` layers deep. If set to any negative integer, no limit will be
|
261
270
|
enforced and recursion will continue until terminal items are reached. By
|
262
271
|
default, recursion is unlimited.
|
263
|
-
context: An optional dictionary. If passed, the context will be sent
|
264
|
-
call to the `visit_fn`. The context can be mutated by each visitor and
|
265
|
-
be available for later visits to expressions at the given depth. Values
|
272
|
+
context (Optional[dict]): An optional dictionary. If passed, the context will be sent
|
273
|
+
to each call to the `visit_fn`. The context can be mutated by each visitor and
|
274
|
+
will be available for later visits to expressions at the given depth. Values
|
266
275
|
will not be available "up" a level from a given expression.
|
267
|
-
|
268
276
|
The context will be automatically populated with an 'annotation' key when
|
269
|
-
visiting collections within a `BaseAnnotation` type. This requires the
|
270
|
-
|
271
|
-
remove_annotations: If set, annotations will be replaced by their contents. By
|
277
|
+
visiting collections within a `BaseAnnotation` type. This requires the caller to
|
278
|
+
pass `context={}` and will not be activated by default.
|
279
|
+
remove_annotations (bool): If set, annotations will be replaced by their contents. By
|
272
280
|
default, annotations are preserved but their contents are visited.
|
281
|
+
_seen (Optional[Set[int]]): A set of object ids that have already been visited. This
|
282
|
+
prevents infinite recursion when visiting recursive data structures.
|
283
|
+
|
284
|
+
Returns:
|
285
|
+
Any: The modified collection if `return_data` is `True`, otherwise `None`.
|
273
286
|
"""
|
274
287
|
|
288
|
+
if _seen is None:
|
289
|
+
_seen = set()
|
290
|
+
|
275
291
|
def visit_nested(expr):
|
276
292
|
# Utility for a recursive call, preserving options and updating the depth.
|
277
293
|
return visit_collection(
|
@@ -282,6 +298,7 @@ def visit_collection(
|
|
282
298
|
max_depth=max_depth - 1,
|
283
299
|
# Copy the context on nested calls so it does not "propagate up"
|
284
300
|
context=context.copy() if context is not None else None,
|
301
|
+
_seen=_seen,
|
285
302
|
)
|
286
303
|
|
287
304
|
def visit_expression(expr):
|
@@ -290,7 +307,7 @@ def visit_collection(
|
|
290
307
|
else:
|
291
308
|
return visit_fn(expr)
|
292
309
|
|
293
|
-
# Visit every expression
|
310
|
+
# --- 1. Visit every expression
|
294
311
|
try:
|
295
312
|
result = visit_expression(expr)
|
296
313
|
except StopVisiting:
|
@@ -298,47 +315,92 @@ def visit_collection(
|
|
298
315
|
result = expr
|
299
316
|
|
300
317
|
if return_data:
|
301
|
-
# Only mutate the expression
|
318
|
+
# Only mutate the root expression if the user indicated we're returning data,
|
319
|
+
# otherwise the function could return null and we have no collection to check
|
302
320
|
expr = result
|
303
321
|
|
304
|
-
#
|
322
|
+
# --- 2. Visit every child of the expression recursively
|
305
323
|
|
306
|
-
# If we have reached the maximum depth
|
307
|
-
if
|
324
|
+
# If we have reached the maximum depth or we have already visited this object,
|
325
|
+
# return the result if we are returning data, otherwise return None
|
326
|
+
if max_depth == 0 or id(expr) in _seen:
|
308
327
|
return result if return_data else None
|
328
|
+
else:
|
329
|
+
_seen.add(id(expr))
|
309
330
|
|
310
331
|
# Get the expression type; treat iterators like lists
|
311
332
|
typ = list if isinstance(expr, IteratorABC) and isiterable(expr) else type(expr)
|
312
333
|
typ = cast(type, typ) # mypy treats this as 'object' otherwise and complains
|
313
334
|
|
314
335
|
# Then visit every item in the expression if it is a collection
|
315
|
-
|
336
|
+
|
337
|
+
# presume that the result is the original expression.
|
338
|
+
# in each of the following cases, we will update the result if we need to.
|
339
|
+
result = expr
|
340
|
+
|
341
|
+
# --- Generators
|
342
|
+
|
343
|
+
if isinstance(expr, (types.GeneratorType, types.AsyncGeneratorType)):
|
344
|
+
# Do not attempt to iterate over generators, as it will exhaust them
|
345
|
+
pass
|
346
|
+
|
347
|
+
# --- Mocks
|
348
|
+
|
349
|
+
elif isinstance(expr, Mock):
|
316
350
|
# Do not attempt to recurse into mock objects
|
317
|
-
|
351
|
+
pass
|
352
|
+
|
353
|
+
# --- Annotations (unmapped, quote, etc.)
|
318
354
|
|
319
355
|
elif isinstance(expr, BaseAnnotation):
|
320
356
|
if context is not None:
|
321
357
|
context["annotation"] = expr
|
322
|
-
|
358
|
+
unwrapped = expr.unwrap()
|
359
|
+
value = visit_nested(unwrapped)
|
323
360
|
|
324
|
-
if
|
325
|
-
|
326
|
-
|
327
|
-
|
361
|
+
if return_data:
|
362
|
+
# if we are removing annotations, return the value
|
363
|
+
if remove_annotations:
|
364
|
+
result = value
|
365
|
+
# if the value was modified, rewrap it
|
366
|
+
elif value is not unwrapped:
|
367
|
+
result = expr.rewrap(value)
|
368
|
+
# otherwise return the expr
|
369
|
+
|
370
|
+
# --- Sequences
|
328
371
|
|
329
372
|
elif typ in (list, tuple, set):
|
330
373
|
items = [visit_nested(o) for o in expr]
|
331
|
-
|
374
|
+
if return_data:
|
375
|
+
modified = any(item is not orig for item, orig in zip(items, expr))
|
376
|
+
if modified:
|
377
|
+
result = typ(items)
|
378
|
+
|
379
|
+
# --- Dictionaries
|
332
380
|
|
333
381
|
elif typ in (dict, OrderedDict):
|
334
382
|
assert isinstance(expr, (dict, OrderedDict)) # typecheck assertion
|
335
383
|
items = [(visit_nested(k), visit_nested(v)) for k, v in expr.items()]
|
336
|
-
|
384
|
+
if return_data:
|
385
|
+
modified = any(
|
386
|
+
k1 is not k2 or v1 is not v2
|
387
|
+
for (k1, v1), (k2, v2) in zip(items, expr.items())
|
388
|
+
)
|
389
|
+
if modified:
|
390
|
+
result = typ(items)
|
391
|
+
|
392
|
+
# --- Dataclasses
|
337
393
|
|
338
394
|
elif is_dataclass(expr) and not isinstance(expr, type):
|
339
395
|
values = [visit_nested(getattr(expr, f.name)) for f in fields(expr)]
|
340
|
-
|
341
|
-
|
396
|
+
if return_data:
|
397
|
+
modified = any(
|
398
|
+
getattr(expr, f.name) is not v for f, v in zip(fields(expr), values)
|
399
|
+
)
|
400
|
+
if modified:
|
401
|
+
result = typ(**{f.name: v for f, v in zip(fields(expr), values)})
|
402
|
+
|
403
|
+
# --- Pydantic models
|
342
404
|
|
343
405
|
elif isinstance(expr, pydantic.BaseModel):
|
344
406
|
typ = cast(Type[pydantic.BaseModel], typ)
|
@@ -355,20 +417,21 @@ def visit_collection(
|
|
355
417
|
}
|
356
418
|
|
357
419
|
if return_data:
|
358
|
-
|
359
|
-
|
360
|
-
|
420
|
+
modified = any(
|
421
|
+
getattr(expr, field) is not updated_data[field]
|
422
|
+
for field in model_fields
|
361
423
|
)
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
424
|
+
if modified:
|
425
|
+
# Use construct to avoid validation and handle immutability
|
426
|
+
model_instance = typ.model_construct(
|
427
|
+
_fields_set=expr.model_fields_set, **updated_data
|
428
|
+
)
|
429
|
+
for private_attr in expr.__private_attributes__:
|
430
|
+
setattr(model_instance, private_attr, getattr(expr, private_attr))
|
431
|
+
result = model_instance
|
367
432
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
return result
|
433
|
+
if return_data:
|
434
|
+
return result
|
372
435
|
|
373
436
|
|
374
437
|
def remove_nested_keys(keys_to_remove: List[Hashable], obj):
|
prefect/utilities/urls.py
CHANGED
@@ -117,7 +117,7 @@ def url_for(
|
|
117
117
|
if obj.id.startswith("prefect."):
|
118
118
|
name = obj.id.split(".")[1]
|
119
119
|
else:
|
120
|
-
logger.
|
120
|
+
logger.debug(f"No URL known for resource with ID: {obj.id}")
|
121
121
|
return None
|
122
122
|
elif isinstance(obj, str):
|
123
123
|
name = obj
|
@@ -133,10 +133,10 @@ def url_for(
|
|
133
133
|
raise ValueError(f"Invalid URL type: {url_type}. Use 'ui' or 'api'.")
|
134
134
|
|
135
135
|
if url_type == "ui" and name not in UI_URL_FORMATS:
|
136
|
-
logger.
|
136
|
+
logger.debug("No UI URL known for this object: %s", name)
|
137
137
|
return None
|
138
138
|
elif url_type == "api" and name not in API_URL_FORMATS:
|
139
|
-
logger.
|
139
|
+
logger.debug("No API URL known for this object: %s", name)
|
140
140
|
return None
|
141
141
|
|
142
142
|
if isinstance(obj, str) and not obj_id:
|
@@ -152,7 +152,7 @@ def url_for(
|
|
152
152
|
base_url = base_url or default_base_url
|
153
153
|
|
154
154
|
if not base_url:
|
155
|
-
logger.
|
155
|
+
logger.debug(
|
156
156
|
f"No URL found for the Prefect {'UI' if url_type == 'ui' else 'API'}, "
|
157
157
|
f"and no default base path provided."
|
158
158
|
)
|
@@ -174,7 +174,7 @@ def url_for(
|
|
174
174
|
else:
|
175
175
|
obj_id = getattr(obj, "id", None)
|
176
176
|
if not obj_id:
|
177
|
-
logger.
|
177
|
+
logger.debug(
|
178
178
|
"An ID is required to build a URL, but object did not have one: %s", obj
|
179
179
|
)
|
180
180
|
return ""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: prefect-client
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.0rc4
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Home-page: https://www.prefect.io
|
6
6
|
Author: Prefect Technologies, Inc.
|
@@ -46,7 +46,7 @@ Requires-Dist: pathspec >=0.8.0
|
|
46
46
|
Requires-Dist: pendulum <4,>=3.0.0
|
47
47
|
Requires-Dist: pydantic <3.0.0,>=2.7
|
48
48
|
Requires-Dist: pydantic-core <3.0.0,>=2.12.0
|
49
|
-
Requires-Dist: pydantic-extra-types
|
49
|
+
Requires-Dist: pydantic-extra-types <3.0.0,>=2.8.2
|
50
50
|
Requires-Dist: pydantic-settings
|
51
51
|
Requires-Dist: python-dateutil <3.0.0,>=2.8.2
|
52
52
|
Requires-Dist: python-slugify <9.0,>=5.0
|
@@ -1,5 +1,5 @@
|
|
1
1
|
prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
|
2
|
-
prefect/__init__.py,sha256=
|
2
|
+
prefect/__init__.py,sha256=YdjT2cx1P0UBRlc6qUXxZrY1DB39YNPbJHqNvLr8wds,2919
|
3
3
|
prefect/_version.py,sha256=I9JsXwt7BjAAbMEZgtmE3a6dJ2jqV-wqWto9D6msb3k,24597
|
4
4
|
prefect/artifacts.py,sha256=G-jCyce3XGtTyQpCk_s3L7e-TWFyJY8Dcnk_i4_CsY4,12647
|
5
5
|
prefect/automations.py,sha256=NlQ62GPJzy-gnWQqX7c6CQJKw7p60WLGDAFcy82vtg4,5613
|
@@ -7,24 +7,24 @@ prefect/context.py,sha256=1dGUGcVXbx6rd04cwtz7Oz1qVPCMlIrAkF-Xo5GtcVY,23196
|
|
7
7
|
prefect/engine.py,sha256=asH7iMb1IfEOOIVIxM3ZalfvCe9PUp7f9ceKyT6isa8,2019
|
8
8
|
prefect/exceptions.py,sha256=kRiEX6qpT9errs0SuYJDYG7ioMNddTvqK7gT8RVFajk,11076
|
9
9
|
prefect/filesystems.py,sha256=HrPoehZKpuVxzWDXaTiuJqgVCgxlQ4lyTEZKSYKiZUc,17169
|
10
|
-
prefect/flow_engine.py,sha256=
|
10
|
+
prefect/flow_engine.py,sha256=0Or0YtZcGVM4zYZtFWYB3qhUjzOP1ZI9KRqdqj-wEiY,26301
|
11
11
|
prefect/flow_runs.py,sha256=7mHGjb3-6MfR4XKQjy9sJPS9dS0yTxVO6MYQ8YlGjGw,16071
|
12
|
-
prefect/flows.py,sha256=
|
13
|
-
prefect/futures.py,sha256
|
12
|
+
prefect/flows.py,sha256=aHr_PLR_bmFUO09hMUC0J5LapJya3zppZXsMC95uBxo,81466
|
13
|
+
prefect/futures.py,sha256=I4yyicBo_kUxzzOV1mrSWqjvRzFm_8CD-JQf0Gchbos,9452
|
14
14
|
prefect/manifests.py,sha256=477XcmfdC_yE81wT6zIAKnEUEJ0lH9ZLfOVSgX2FohE,676
|
15
15
|
prefect/plugins.py,sha256=-IqPJvQGoMZBioHCF0s1IDNHYA7OxIRaUlkaGM2CgLY,4164
|
16
16
|
prefect/profiles.toml,sha256=Fs8hD_BdWHZgAijgk8pK_Zx-Pm-YFixqDIfEP6fM-qU,38
|
17
17
|
prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
|
-
prefect/results.py,sha256=
|
18
|
+
prefect/results.py,sha256=r9yPpvQcvKlnaoXvJfWPj8nbJZ9QiiyKDxtKRS-PxKQ,25061
|
19
19
|
prefect/serializers.py,sha256=8ON--RmaLX3Td3Rpd1lshGcqWyjlCFkmO3sblxsdT_c,8699
|
20
|
-
prefect/settings.py,sha256=
|
20
|
+
prefect/settings.py,sha256=JkCgcFO7Zw0Kv_azK9XLabx08ypVgL76E6r8nD-HZLM,74598
|
21
21
|
prefect/states.py,sha256=GDpFM6UUMB5MkCDWyqo8F9ELnkskr1BTg4YdU_bnv7Q,20395
|
22
|
-
prefect/task_engine.py,sha256=
|
22
|
+
prefect/task_engine.py,sha256=cd68Rdy9Ihb0x1ngBcJ_eSH9E1BCUkoDHuesqfmlNjQ,32219
|
23
23
|
prefect/task_runners.py,sha256=TQHyQATPkZE6BNVJ_JQBNmiL1kdgZRjY_Fjs3-N1UiE,11869
|
24
|
-
prefect/task_runs.py,sha256=
|
25
|
-
prefect/task_worker.py,sha256=
|
26
|
-
prefect/tasks.py,sha256=
|
27
|
-
prefect/transactions.py,sha256=
|
24
|
+
prefect/task_runs.py,sha256=eDWYH5H1K4SyduhKmn3GzO6vM3fZSwOZxAb8KhkMGsk,7798
|
25
|
+
prefect/task_worker.py,sha256=iawQZn4hNcrXR-CHtM4jzhlnotqeNHiRuHc-eumJ9Oc,16788
|
26
|
+
prefect/tasks.py,sha256=adECMEbsP32KPYzrSasBtfhdFs-gHUxCnS6PXxVsCek,60312
|
27
|
+
prefect/transactions.py,sha256=FwCrZfq3zVSiqgpNYNkAm1ihjFFauDAvzPYf-J5z26s,9151
|
28
28
|
prefect/variables.py,sha256=-t5LVY0N-K4f0fa6YwruVVQqwnU3fGWBMYXXE32XPkA,4821
|
29
29
|
prefect/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
30
|
prefect/_internal/_logging.py,sha256=HvNHY-8P469o5u4LYEDBTem69XZEt1QUeUaLToijpak,810
|
@@ -59,7 +59,6 @@ prefect/blocks/__init__.py,sha256=BUfh6gIwA6HEjRyVCAiv0he3M1zfM-oY-JrlBfeWeY8,18
|
|
59
59
|
prefect/blocks/abstract.py,sha256=YLzCaf3yXv6wFCF5ZqCIHJNwH7fME1rLxC-SijARHzk,16319
|
60
60
|
prefect/blocks/core.py,sha256=cgkPF1rpNl_4Asekh2RJ0RiMmjqtuQEbp52BDXgxdbY,46657
|
61
61
|
prefect/blocks/fields.py,sha256=1m507VVmkpOnMF_7N-qboRjtw4_ceIuDneX3jZ3Jm54,63
|
62
|
-
prefect/blocks/kubernetes.py,sha256=1AHzcI2hPeu5zOEKLC4FBjjv8VdZ8ianuv6oVEh4ou8,4016
|
63
62
|
prefect/blocks/notifications.py,sha256=QV2ndeiERBbL9vNW2zR1LzH86llDY1sJVh2DN0sh1eo,28198
|
64
63
|
prefect/blocks/redis.py,sha256=GUKYyx2QLtyNvgf5FT_dJxbgQcOzWCja3I23J1-AXhM,5629
|
65
64
|
prefect/blocks/system.py,sha256=tkONKzDlaQgR6NtWXON0ZQm7nGuFKt0_Du3sj8ubs-M,3605
|
@@ -70,7 +69,7 @@ prefect/client/cloud.py,sha256=5T84QP9IRa_cqL7rmY3lR1wxFW6C41PajFZgelurhK0,4124
|
|
70
69
|
prefect/client/collections.py,sha256=I9EgbTg4Fn57gn8vwP_WdDmgnATbx9gfkm2jjhCORjw,1037
|
71
70
|
prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
|
72
71
|
prefect/client/orchestration.py,sha256=0wK6LEWgKgsrgy6kF654EiweorId8nmX5nzXp-BtSgU,142641
|
73
|
-
prefect/client/subscriptions.py,sha256=
|
72
|
+
prefect/client/subscriptions.py,sha256=J9uK9NGHO4VX4Y3NGgBJ4pIG_0cf-dJWPhF3f3PGYL4,3388
|
74
73
|
prefect/client/utilities.py,sha256=Ni1DsFDhnvxpXWerlvZpK8tCg-uZ8UyZwOmDTKEb1DI,3269
|
75
74
|
prefect/client/schemas/__init__.py,sha256=KlyqFV-hMulMkNstBn_0ijoHoIwJZaBj6B1r07UmgvE,607
|
76
75
|
prefect/client/schemas/actions.py,sha256=t-JJCikwa_ZrTPu7VJDwkLQ2fgNQuYHUwAi_3PHpwoU,28113
|
@@ -141,12 +140,12 @@ prefect/runtime/flow_run.py,sha256=Fxbyc4r3kPj2m3AIJT8gud2PB5w9aKTwkI-g4dysikE,8
|
|
141
140
|
prefect/runtime/task_run.py,sha256=B6v_nZiHy9nKZfnKFQF7izZjAjaiZOT0j80m-VcLxmY,3403
|
142
141
|
prefect/server/api/collections_data/views/aggregate-worker-metadata.json,sha256=gqrwGyylzBEzlFSPOJcMuUwdoK_zojpU0SZaBDgK5FE,79748
|
143
142
|
prefect/server/api/static/prefect-logo-mark-gradient.png,sha256=ylRjJkI_JHCw8VbQasNnXQHwZW-sH-IQiUGSD3aWP1E,73430
|
144
|
-
prefect/types/__init__.py,sha256=
|
143
|
+
prefect/types/__init__.py,sha256=SAHJDtWEGidTKXQACJ38nj6fq8r57Gj0Pwo4Gy7pVWs,2234
|
145
144
|
prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
146
145
|
prefect/utilities/annotations.py,sha256=bXB43j5Zsq5gaBcJe9qnszBlnNwCTwqSTgcu2OkkRLo,2776
|
147
146
|
prefect/utilities/asyncutils.py,sha256=GRDiA3S9vGRpM3aKSq6iZnNP9XNBcfUg0NBwbjUFeAw,19200
|
148
147
|
prefect/utilities/callables.py,sha256=rkPPzwiVFRoVszSUq612s9S0v3nxcMC-rIwfXoJTn0E,24915
|
149
|
-
prefect/utilities/collections.py,sha256=
|
148
|
+
prefect/utilities/collections.py,sha256=2W7cgdB_c_LGMbHPmFSKJbwue_Ai8h5CukSmFoZ8svE,17248
|
150
149
|
prefect/utilities/compat.py,sha256=mNQZDnzyKaOqy-OV-DnmH_dc7CNF5nQgW_EsA4xMr7g,906
|
151
150
|
prefect/utilities/context.py,sha256=BThuUW94-IYgFYTeMIM9KMo8ShT3oiI7w5ajZHzU1j0,1377
|
152
151
|
prefect/utilities/dispatch.py,sha256=c8G-gBo7hZlyoD7my9nO50Rzy8Retk-np5WGq9_E2AM,5856
|
@@ -165,7 +164,7 @@ prefect/utilities/slugify.py,sha256=57Vb14t13F3zm1P65KAu8nVeAz0iJCd1Qc5eMG-R5y8,
|
|
165
164
|
prefect/utilities/templating.py,sha256=nAiOGMMHGbIDFkGYy-g-dzcbY311WfycdgAhsM3cLpY,13298
|
166
165
|
prefect/utilities/text.py,sha256=eXGIsCcZ7h_6hy8T5GDQjL8GiKyktoOqavYub0QjgO4,445
|
167
166
|
prefect/utilities/timeout.py,sha256=nxmuPxROIT-i8gPffpARuxnxu58H0vkmbjTVIgef0_0,805
|
168
|
-
prefect/utilities/urls.py,sha256=
|
167
|
+
prefect/utilities/urls.py,sha256=GuiV3mk-XfzXx139ySyNQNbNaolA3T-hUZvW3T_PhXU,6396
|
169
168
|
prefect/utilities/visualization.py,sha256=Lum4IvLQ0nHsdLt6GGzS3Wwo-828u1rmOKc5mmWu994,6502
|
170
169
|
prefect/utilities/schema_tools/__init__.py,sha256=KsFsTEHQqgp89TkDpjggkgBBywoHQPxbx-m6YQhiNEI,322
|
171
170
|
prefect/utilities/schema_tools/hydration.py,sha256=Nitnmr35Mcn5z9NXIvh9DuZW5nCZxpjyMc9RFawMsgs,8376
|
@@ -175,8 +174,8 @@ prefect/workers/base.py,sha256=62E0Q41pPr3eQdSBSUBfiR4WYx01OfuqUp5INRqHGgo,46942
|
|
175
174
|
prefect/workers/process.py,sha256=vylkSSswaSCew-V65YW0HcxIxyKI-uqWkbSKpkkLamQ,9372
|
176
175
|
prefect/workers/server.py,sha256=EfPiMxI7TVgkqpHkdPwSaYG-ydi99sG7jwXhkAcACbI,1519
|
177
176
|
prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
|
178
|
-
prefect_client-3.0.
|
179
|
-
prefect_client-3.0.
|
180
|
-
prefect_client-3.0.
|
181
|
-
prefect_client-3.0.
|
182
|
-
prefect_client-3.0.
|
177
|
+
prefect_client-3.0.0rc4.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
|
178
|
+
prefect_client-3.0.0rc4.dist-info/METADATA,sha256=eFZ99z6jEN7BfrG1CodVrcYG7w13-pzn50J0ayzgO6I,7392
|
179
|
+
prefect_client-3.0.0rc4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
180
|
+
prefect_client-3.0.0rc4.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
|
181
|
+
prefect_client-3.0.0rc4.dist-info/RECORD,,
|