prefect-client 3.3.0__py3-none-any.whl → 3.3.2.dev1__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/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.3.0"
3
- __build_date__ = "2025-03-31 15:28:57.721236+00:00"
4
- __git_commit__ = "ef73b2c49e26b05c55b52022048da00f0845dcf1"
2
+ __version__ = "3.3.2.dev1"
3
+ __build_date__ = "2025-04-02 08:08:14.621204+00:00"
4
+ __git_commit__ = "e4e383ba03ce530c04ec69c514bca125af7a22e5"
5
5
  __dirty__ = False
@@ -10,12 +10,15 @@ will be calculated 6 months later. Start and end dates are always in the format
10
10
  e.g. Jan 2023.
11
11
  """
12
12
 
13
+ from __future__ import annotations
14
+
13
15
  import datetime
14
16
  import functools
15
17
  import sys
16
18
  import warnings
17
19
  from typing import TYPE_CHECKING, Any, Callable, Optional, Union
18
20
 
21
+ import dateparser
19
22
  from pydantic import BaseModel
20
23
  from typing_extensions import ParamSpec, TypeAlias, TypeVar
21
24
 
@@ -32,6 +35,9 @@ R = TypeVar("R", infer_variance=True)
32
35
  M = TypeVar("M", bound=BaseModel)
33
36
  T = TypeVar("T")
34
37
 
38
+ # Note: A datetime is strongly preferred over a string, but a string is acceptable for
39
+ # backwards compatibility until support is dropped from dateparser in Python 3.15.
40
+ _AcceptableDate: TypeAlias = Optional[Union[datetime.datetime, str]]
35
41
 
36
42
  DEPRECATED_WARNING = (
37
43
  "{name} has been deprecated{when}. It will not be available in new releases after {end_date}."
@@ -51,18 +57,25 @@ class PrefectDeprecationWarning(DeprecationWarning):
51
57
  """
52
58
 
53
59
 
60
+ def _coerce_datetime(
61
+ dt: Optional[_AcceptableDate],
62
+ ) -> Optional[datetime.datetime]:
63
+ if dt is None or isinstance(dt, datetime.datetime):
64
+ return dt
65
+ with warnings.catch_warnings():
66
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
67
+ return dateparser.parse(dt)
68
+
69
+
54
70
  def generate_deprecation_message(
55
71
  name: str,
56
- start_date: Optional[datetime.datetime] = None,
57
- end_date: Optional[datetime.datetime] = None,
72
+ start_date: Optional[_AcceptableDate] = None,
73
+ end_date: Optional[_AcceptableDate] = None,
58
74
  help: str = "",
59
75
  when: str = "",
60
76
  ) -> str:
61
- if start_date is not None and not isinstance(start_date, datetime.datetime):
62
- raise ValueError("Must provide start_date as a datetime")
63
-
64
- if end_date is not None and not isinstance(end_date, datetime.datetime):
65
- raise ValueError("Must provide end_date as a datetime")
77
+ start_date = _coerce_datetime(start_date)
78
+ end_date = _coerce_datetime(end_date)
66
79
 
67
80
  if start_date is None and end_date is None:
68
81
  raise ValueError(
@@ -87,8 +100,8 @@ def generate_deprecation_message(
87
100
 
88
101
  def deprecated_callable(
89
102
  *,
90
- start_date: Optional[datetime.datetime] = None,
91
- end_date: Optional[datetime.datetime] = None,
103
+ start_date: Optional[_AcceptableDate] = None,
104
+ end_date: Optional[_AcceptableDate] = None,
92
105
  stacklevel: int = 2,
93
106
  help: str = "",
94
107
  ) -> Callable[[Callable[P, R]], Callable[P, R]]:
@@ -112,8 +125,8 @@ def deprecated_callable(
112
125
 
113
126
  def deprecated_class(
114
127
  *,
115
- start_date: Optional[datetime.datetime] = None,
116
- end_date: Optional[datetime.datetime] = None,
128
+ start_date: Optional[_AcceptableDate] = None,
129
+ end_date: Optional[_AcceptableDate] = None,
117
130
  stacklevel: int = 2,
118
131
  help: str = "",
119
132
  ) -> Callable[[type[T]], type[T]]:
@@ -141,8 +154,8 @@ def deprecated_class(
141
154
  def deprecated_parameter(
142
155
  name: str,
143
156
  *,
144
- start_date: Optional[datetime.datetime] = None,
145
- end_date: Optional[datetime.datetime] = None,
157
+ start_date: Optional[_AcceptableDate] = None,
158
+ end_date: Optional[_AcceptableDate] = None,
146
159
  stacklevel: int = 2,
147
160
  help: str = "",
148
161
  when: Optional[Callable[[Any], bool]] = None,
@@ -197,8 +210,8 @@ JsonDict: TypeAlias = dict[str, JsonValue]
197
210
  def deprecated_field(
198
211
  name: str,
199
212
  *,
200
- start_date: Optional[datetime.datetime] = None,
201
- end_date: Optional[datetime.datetime] = None,
213
+ start_date: Optional[_AcceptableDate] = None,
214
+ end_date: Optional[_AcceptableDate] = None,
202
215
  when_message: str = "",
203
216
  help: str = "",
204
217
  when: Optional[Callable[[Any], bool]] = None,
@@ -279,9 +292,7 @@ def inject_renamed_module_alias_finder():
279
292
  sys.meta_path.insert(0, AliasedModuleFinder(DEPRECATED_MODULE_ALIASES))
280
293
 
281
294
 
282
- def register_renamed_module(
283
- old_name: str, new_name: str, start_date: datetime.datetime
284
- ):
295
+ def register_renamed_module(old_name: str, new_name: str, start_date: _AcceptableDate):
285
296
  """
286
297
  Register a renamed module.
287
298
 
@@ -374,8 +374,11 @@ class Call(Generic[T]):
374
374
 
375
375
  except CancelledError:
376
376
  # Report cancellation
377
- if TYPE_CHECKING:
378
- assert cancel_scope is not None
377
+ # in rare cases, enforce_sync_deadline raises CancelledError
378
+ # prior to yielding
379
+ if cancel_scope is None:
380
+ self.future.cancel()
381
+ return None
379
382
  if cancel_scope.timedout():
380
383
  setattr(self.future, "_timed_out", True)
381
384
  self.future.cancel()
@@ -64,7 +64,7 @@ class PrefectBaseModel(BaseModel):
64
64
 
65
65
  def __rich_repr__(self) -> RichReprResult:
66
66
  # Display all of the fields in the model if they differ from the default value
67
- for name, field in self.model_fields.items():
67
+ for name, field in type(self).model_fields.items():
68
68
  value = getattr(self, name)
69
69
 
70
70
  # Simplify the display of some common fields
@@ -90,7 +90,9 @@ class PrefectBaseModel(BaseModel):
90
90
  """
91
91
  return self.model_copy(
92
92
  update={
93
- field: self.model_fields[field].get_default(call_default_factory=True)
93
+ field: type(self)
94
+ .model_fields[field]
95
+ .get_default(call_default_factory=True)
94
96
  for field in self._reset_fields
95
97
  }
96
98
  )
prefect/blocks/core.py CHANGED
@@ -371,7 +371,7 @@ class Block(BaseModel, ABC):
371
371
  visit_fn=partial(handle_secret_render, context=ctx),
372
372
  return_data=True,
373
373
  )
374
- for field_name in self.model_fields
374
+ for field_name in type(self).model_fields
375
375
  }
376
376
  )
377
377
  if extra_fields := {
prefect/client/base.py CHANGED
@@ -222,6 +222,10 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
222
222
  if the request either raises an exception listed in `retry_exceptions` or
223
223
  receives a response with a status code listed in `retry_codes`.
224
224
 
225
+ Retries are not counted against the limit if the response headers contains
226
+ a reserved value, indicating that the server is undergoing maintenance. These
227
+ requests will retry indefinitely until the header is no longer returned.
228
+
225
229
  Retries will be delayed based on either the retry header (preferred) or
226
230
  exponential backoff if a retry header is not provided.
227
231
  """
@@ -239,18 +243,21 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
239
243
  await self._add_csrf_headers(request=request)
240
244
 
241
245
  while try_count <= PREFECT_CLIENT_MAX_RETRIES.value():
242
- try_count += 1
243
246
  retry_seconds = None
244
247
  exc_info = None
245
248
 
246
249
  try:
247
250
  response = await send(request, *send_args, **send_kwargs)
248
251
  except retry_exceptions: # type: ignore
252
+ try_count += 1
249
253
  if try_count > PREFECT_CLIENT_MAX_RETRIES.value():
250
254
  raise
251
255
  # Otherwise, we will ignore this error but capture the info for logging
252
256
  exc_info = sys.exc_info()
253
257
  else:
258
+ if response.headers.get("Prefect-Maintenance") != "true":
259
+ try_count += 1
260
+
254
261
  # We got a response; check if it's a CSRF error, otherwise
255
262
  # return immediately if it is not retryable
256
263
  if (
@@ -441,6 +448,10 @@ class PrefectHttpxSyncClient(httpx.Client):
441
448
  if the request either raises an exception listed in `retry_exceptions` or
442
449
  receives a response with a status code listed in `retry_codes`.
443
450
 
451
+ Retries are not counted against the limit if the response headers contains
452
+ a reserved value, indicating that the server is undergoing maintenance. These
453
+ requests will retry indefinitely until the header is no longer returned.
454
+
444
455
  Retries will be delayed based on either the retry header (preferred) or
445
456
  exponential backoff if a retry header is not provided.
446
457
  """
@@ -458,18 +469,21 @@ class PrefectHttpxSyncClient(httpx.Client):
458
469
  self._add_csrf_headers(request=request)
459
470
 
460
471
  while try_count <= PREFECT_CLIENT_MAX_RETRIES.value():
461
- try_count += 1
462
472
  retry_seconds = None
463
473
  exc_info = None
464
474
 
465
475
  try:
466
476
  response = send(request, *send_args, **send_kwargs)
467
477
  except retry_exceptions: # type: ignore
478
+ try_count += 1
468
479
  if try_count > PREFECT_CLIENT_MAX_RETRIES.value():
469
480
  raise
470
481
  # Otherwise, we will ignore this error but capture the info for logging
471
482
  exc_info = sys.exc_info()
472
483
  else:
484
+ if response.headers.get("Prefect-Maintenance") != "true":
485
+ try_count += 1
486
+
473
487
  # We got a response; check if it's a CSRF error, otherwise
474
488
  # return immediately if it is not retryable
475
489
  if (
@@ -414,7 +414,7 @@ class State(ObjectBaseModel, Generic[R]):
414
414
  database again. The 'timestamp' is reset using the default factory.
415
415
  """
416
416
  update = {
417
- "timestamp": self.model_fields["timestamp"].get_default(),
417
+ "timestamp": type(self).model_fields["timestamp"].get_default(),
418
418
  **(update or {}),
419
419
  }
420
420
  return super().model_copy(update=update, deep=deep)
prefect/events/filters.py CHANGED
@@ -45,7 +45,7 @@ class EventDataFilter(PrefectBaseModel, extra="forbid"): # type: ignore[call-ar
45
45
  def get_filters(self) -> list["EventDataFilter"]:
46
46
  filters: list["EventDataFilter"] = [
47
47
  filter
48
- for filter in [getattr(self, name) for name in self.model_fields]
48
+ for filter in [getattr(self, name) for name in type(self).model_fields]
49
49
  if isinstance(filter, EventDataFilter)
50
50
  ]
51
51
  return filters
prefect/flows.py CHANGED
@@ -272,10 +272,11 @@ class Flow(Generic[P, R]):
272
272
 
273
273
  if isinstance(fn, classmethod):
274
274
  fn = cast(Callable[P, R], fn.__func__)
275
+ self._isclassmethod = True
275
276
 
276
277
  if isinstance(fn, staticmethod):
277
278
  fn = cast(Callable[P, R], fn.__func__)
278
- setattr(fn, "__prefect_static__", True)
279
+ self._isstaticmethod = True
279
280
 
280
281
  if not callable(fn):
281
282
  raise TypeError("'fn' must be callable")
@@ -405,11 +406,11 @@ class Flow(Generic[P, R]):
405
406
 
406
407
  @property
407
408
  def isclassmethod(self) -> bool:
408
- return hasattr(self.fn, "__prefect_cls__")
409
+ return getattr(self, "_isclassmethod", False)
409
410
 
410
411
  @property
411
412
  def isstaticmethod(self) -> bool:
412
- return getattr(self.fn, "__prefect_static__", False)
413
+ return getattr(self, "_isstaticmethod", False)
413
414
 
414
415
  def __get__(self, instance: Any, owner: Any) -> "Flow[P, R]":
415
416
  """
@@ -417,21 +418,20 @@ class Flow(Generic[P, R]):
417
418
  When an instance method is loaded, this method is called with the "self" instance as
418
419
  an argument. We return a copy of the flow with that instance bound to the flow's function.
419
420
  """
420
- if self.isstaticmethod:
421
- return self
422
-
423
421
  # wrapped function is a classmethod
424
- if instance is None:
425
- bound_flow = copy(self)
426
- setattr(bound_flow.fn, "__prefect_cls__", owner)
427
- return bound_flow
428
-
429
- # if the flow is being accessed on an instance, bind the instance to the __prefect_self__ attribute
430
- # of the flow's function. This will allow it to be automatically added to the flow's parameters
431
- else:
432
- bound_flow = copy(self)
433
- setattr(bound_flow.fn, "__prefect_self__", instance)
434
- return bound_flow
422
+ if self.isclassmethod:
423
+ bound_task = copy(self)
424
+ setattr(bound_task.fn, "__prefect_cls__", owner)
425
+ return bound_task
426
+
427
+ # if the task is being accessed on an instance, bind the instance to the __prefect_self__ attribute
428
+ # of the task's function. This will allow it to be automatically added to the task's parameters
429
+ if instance:
430
+ bound_task = copy(self)
431
+ bound_task.fn.__prefect_self__ = instance # type: ignore[attr-defined]
432
+ return bound_task
433
+
434
+ return self
435
435
 
436
436
  def with_options(
437
437
  self,
prefect/settings/base.py CHANGED
@@ -101,7 +101,7 @@ class PrefectBaseSettings(BaseSettings):
101
101
  context={"include_secrets": include_secrets},
102
102
  )
103
103
  env_variables: dict[str, str] = {}
104
- for key in self.model_fields.keys():
104
+ for key in type(self).model_fields.keys():
105
105
  if isinstance(child_settings := getattr(self, key), PrefectBaseSettings):
106
106
  child_env = child_settings.to_environment_variables(
107
107
  exclude_unset=exclude_unset,
@@ -110,7 +110,7 @@ class PrefectBaseSettings(BaseSettings):
110
110
  )
111
111
  env_variables.update(child_env)
112
112
  elif (value := env.get(key)) is not None:
113
- validation_alias = self.model_fields[key].validation_alias
113
+ validation_alias = type(self).model_fields[key].validation_alias
114
114
  if include_aliases and validation_alias is not None:
115
115
  if isinstance(validation_alias, AliasChoices):
116
116
  for alias in validation_alias.choices:
@@ -136,7 +136,7 @@ class PrefectBaseSettings(BaseSettings):
136
136
  ) -> Any:
137
137
  jsonable_self = handler(self)
138
138
  # iterate over fields to ensure child models that have been updated are also included
139
- for key in self.model_fields.keys():
139
+ for key in type(self).model_fields.keys():
140
140
  if info.exclude and key in info.exclude:
141
141
  continue
142
142
  if info.include and key not in info.include:
prefect/tasks.py CHANGED
@@ -382,10 +382,11 @@ class Task(Generic[P, R]):
382
382
 
383
383
  if isinstance(fn, classmethod):
384
384
  fn = cast(Callable[P, R], fn.__func__)
385
+ self._isclassmethod = True
385
386
 
386
387
  if isinstance(fn, staticmethod):
387
388
  fn = cast(Callable[P, R], fn.__func__)
388
- setattr(fn, "__prefect_static__", True)
389
+ self._isstaticmethod = True
389
390
 
390
391
  if not callable(fn):
391
392
  raise TypeError("'fn' must be callable")
@@ -547,11 +548,11 @@ class Task(Generic[P, R]):
547
548
 
548
549
  @property
549
550
  def isclassmethod(self) -> bool:
550
- return hasattr(self.fn, "__prefect_cls__")
551
+ return getattr(self, "_isclassmethod", False)
551
552
 
552
553
  @property
553
554
  def isstaticmethod(self) -> bool:
554
- return getattr(self.fn, "__prefect_static__", False)
555
+ return getattr(self, "_isstaticmethod", False)
555
556
 
556
557
  def __get__(self, instance: Any, owner: Any) -> "Task[P, R]":
557
558
  """
@@ -559,23 +560,21 @@ class Task(Generic[P, R]):
559
560
  When an instance method is loaded, this method is called with the "self" instance as
560
561
  an argument. We return a copy of the task with that instance bound to the task's function.
561
562
  """
562
-
563
- if self.isstaticmethod:
564
- return self
565
-
566
563
  # wrapped function is a classmethod
567
- if not instance:
564
+ if self.isclassmethod:
568
565
  bound_task = copy(self)
569
566
  setattr(bound_task.fn, "__prefect_cls__", owner)
570
567
  return bound_task
571
568
 
572
569
  # if the task is being accessed on an instance, bind the instance to the __prefect_self__ attribute
573
570
  # of the task's function. This will allow it to be automatically added to the task's parameters
574
- else:
571
+ if instance:
575
572
  bound_task = copy(self)
576
573
  bound_task.fn.__prefect_self__ = instance # type: ignore[attr-defined]
577
574
  return bound_task
578
575
 
576
+ return self
577
+
579
578
  def with_options(
580
579
  self,
581
580
  *,
@@ -130,7 +130,7 @@ def end_of_period(dt: datetime.datetime, period: str) -> datetime.datetime:
130
130
  ValueError: If an invalid unit is specified.
131
131
  """
132
132
  if sys.version_info >= (3, 13):
133
- from whenever import Weekday, ZonedDateTime
133
+ from whenever import Weekday, ZonedDateTime, days
134
134
 
135
135
  if not isinstance(dt.tzinfo, ZoneInfo):
136
136
  zdt = ZonedDateTime.from_py_datetime(
@@ -150,8 +150,8 @@ def end_of_period(dt: datetime.datetime, period: str) -> datetime.datetime:
150
150
  days_till_end_of_week: int = (
151
151
  Weekday.SUNDAY.value - zdt.date().day_of_week().value
152
152
  )
153
+ zdt = zdt + days(days_till_end_of_week)
153
154
  zdt = zdt.replace(
154
- day=zdt.day + days_till_end_of_week,
155
155
  hour=23,
156
156
  minute=59,
157
157
  second=59,
@@ -63,7 +63,7 @@ def get_call_parameters(
63
63
  """
64
64
  if hasattr(fn, "__prefect_self__"):
65
65
  call_args = (getattr(fn, "__prefect_self__"), *call_args)
66
- if hasattr(fn, "__prefect_cls__"):
66
+ elif hasattr(fn, "__prefect_cls__"):
67
67
  call_args = (getattr(fn, "__prefect_cls__"), *call_args)
68
68
 
69
69
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.3.0
3
+ Version: 3.3.2.dev1
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -26,6 +26,7 @@ Requires-Dist: asgi-lifespan<3.0,>=1.0
26
26
  Requires-Dist: cachetools<6.0,>=5.3
27
27
  Requires-Dist: cloudpickle<4.0,>=2.0
28
28
  Requires-Dist: coolname<3.0.0,>=1.0.4
29
+ Requires-Dist: dateparser<2.0.0,>=1.1.1
29
30
  Requires-Dist: exceptiongroup>=1.0.0
30
31
  Requires-Dist: fastapi<1.0.0,>=0.111.0
31
32
  Requires-Dist: fsspec>=2022.5.0
@@ -1,7 +1,7 @@
1
1
  prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
2
2
  prefect/__init__.py,sha256=iCdcC5ZmeewikCdnPEP6YBAjPNV5dvfxpYCTpw30Hkw,3685
3
3
  prefect/__main__.py,sha256=WFjw3kaYJY6pOTA7WDOgqjsz8zUEUZHCcj3P5wyVa-g,66
4
- prefect/_build_info.py,sha256=YvpGLTpFxGQ_grDGKBX2Gt1wo6CZtiqYmzZ5LKEPXlY,180
4
+ prefect/_build_info.py,sha256=AopRsWpwT27ggqv0_AkJac0VfMct6el6FqihpyiH5zY,185
5
5
  prefect/_result_records.py,sha256=S6QmsODkehGVSzbMm6ig022PYbI6gNKz671p_8kBYx4,7789
6
6
  prefect/_waiters.py,sha256=Ia2ITaXdHzevtyWIgJoOg95lrEXQqNEOquHvw3T33UQ,9026
7
7
  prefect/agent.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
@@ -14,7 +14,7 @@ prefect/exceptions.py,sha256=wZLQQMRB_DyiYkeEdIC5OKwbba5A94Dlnics-lrWI7A,11581
14
14
  prefect/filesystems.py,sha256=v5YqGB4uXf9Ew2VuB9VCSkawvYMMVvEtZf7w1VmAmr8,18036
15
15
  prefect/flow_engine.py,sha256=hZpTYEtwTPMtwVoTCrfD93igN7rlKeG_0kyCvdU4aYE,58876
16
16
  prefect/flow_runs.py,sha256=dbHcXsOq1UsNM7vyJV9gboCTylmdUwQ_-W4NQt4R4ds,17267
17
- prefect/flows.py,sha256=wDVMQ67YSgzJR_jwSBjmLQ2zAtIKP7xN_R1UG7an-yk,109495
17
+ prefect/flows.py,sha256=FXAZZvRVEAzjJ87LOPXM8oO1qlkyJdiydMukfQGddPo,109511
18
18
  prefect/futures.py,sha256=ZD5rdgUHA4sfxwHaPToumOUKlyn4d989JHR7eI97-Hs,23271
19
19
  prefect/main.py,sha256=8V-qLB4GjEVCkGRgGXeaIk-JIXY8Z9FozcNluj4Sm9E,2589
20
20
  prefect/plugins.py,sha256=FPRLR2mWVBMuOnlzeiTD9krlHONZH2rtYLD753JQDNQ,2516
@@ -27,7 +27,7 @@ prefect/task_engine.py,sha256=IIvDRl2bnnO3aKXTmtWsz0pnV8kL7xjOaUyJTlL6LaM,61491
27
27
  prefect/task_runners.py,sha256=Ce_ngocfq_X-NA5zhPj13IdVmzZ5h6gXlmfxYWs2AXA,15828
28
28
  prefect/task_runs.py,sha256=7LIzfo3fondCyEUpU05sYFN5IfpZigBDXrhG5yc-8t0,9039
29
29
  prefect/task_worker.py,sha256=gMj_rl4EjTrnJ5YSOXinC6y-7KSK7fRQt_UYbZbrrV8,17879
30
- prefect/tasks.py,sha256=do0oWfp-VPTAVZsd1HstCtUyHbA5t4_ySmhr0mDW-2Q,74946
30
+ prefect/tasks.py,sha256=X83KIVowu-c-EDFbmh4ZurEVtEKTyUSkQ8Elo0nWy4k,74946
31
31
  prefect/transactions.py,sha256=BYvxr4ZSFmYDCODPhH8DO1_51inH35oJ75ZZOd_GI_w,16341
32
32
  prefect/variables.py,sha256=dCK3vX7TbkqXZhnNT_v7rcGh3ISRqoR6pJVLpoll3Js,8342
33
33
  prefect/_experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -43,11 +43,11 @@ prefect/_internal/pytz.py,sha256=Sy_cD-Hkmo_Yrhx2Jucy7DgTRhvO8ZD0whW1ywbSg_U,137
43
43
  prefect/_internal/retries.py,sha256=pMHofrTQPDSxbVWclDwXbfhFKaDC6sxe1DkUOWugV6k,3040
44
44
  prefect/_internal/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  prefect/_internal/compatibility/async_dispatch.py,sha256=cUXOqSeseMUaje9oYUzasVPtNttyiHvrqfJl0zK66XI,2949
46
- prefect/_internal/compatibility/deprecated.py,sha256=cvislmRJ28SONsgxDwjgKj17j39P3kHt005loyOIkP0,8921
46
+ prefect/_internal/compatibility/deprecated.py,sha256=IWu4k1GvIF_vdIcBnsD0UkDYBuf5PxBfDPv3RLO8_FU,9295
47
47
  prefect/_internal/compatibility/migration.py,sha256=Z_r28B90ZQkSngXjr4I_9zA6P74_u48mtp2jYWB9zGg,6797
48
48
  prefect/_internal/concurrency/__init__.py,sha256=YlTwU9ryjPNwbJa45adLJY00t_DGCh1QrdtY9WdVFfw,2140
49
49
  prefect/_internal/concurrency/api.py,sha256=9MuQ0icQVTxwxChujn9mnv0WXRqwToysQy9GWC3sJRg,7352
50
- prefect/_internal/concurrency/calls.py,sha256=B7yNQUkLgwu6BUaNMtVAZaK7IoTkGtHIJHsYjKaDAnE,16467
50
+ prefect/_internal/concurrency/calls.py,sha256=DkXNOpOrEM8IhFNE7E_ondwg1gcBeceLgoWPH3F2ExM,16596
51
51
  prefect/_internal/concurrency/cancellation.py,sha256=stCN22-S0f_kZPk50hCEEYzH35fBel3Nthq86FrW0MU,18675
52
52
  prefect/_internal/concurrency/event_loop.py,sha256=N6SyBV0vaSF5HD4_JM8zL7oBGd2nMuEKkeSPnBZdHw4,2136
53
53
  prefect/_internal/concurrency/inspection.py,sha256=wUWVbHi4G-BxuuYFWhTNmo5yc1C651lQrp5OMiHPU1E,3545
@@ -61,7 +61,7 @@ prefect/_internal/pydantic/v1_schema.py,sha256=wSyQr3LUbIh0R9LsZ6ItmLnQeAS8dxVMN
61
61
  prefect/_internal/pydantic/v2_schema.py,sha256=lh-dnIoZigHJ6e1K89BVy0zDw3R0vQV9ih3ZC7s7i-Q,3223
62
62
  prefect/_internal/pydantic/v2_validated_func.py,sha256=Ld8OtPFF7Ci-gHHmKhSMizBxzuIBOQ6kuIFNRh0vRVY,3731
63
63
  prefect/_internal/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- prefect/_internal/schemas/bases.py,sha256=NtamY7NIpQJP0XtTxTj2oHHu9PjXXYi3d7Lgi2V1iYQ,4245
64
+ prefect/_internal/schemas/bases.py,sha256=JqcZazL5Cp2hZ8Hssu8R2SVXRxHfbdRbTqmvwDYSzyk,4291
65
65
  prefect/_internal/schemas/fields.py,sha256=m4LrFNz8rA9uBhMk9VyQT6FIXmV_EVAW92hdXeSvHbY,837
66
66
  prefect/_internal/schemas/serializers.py,sha256=G_RGHfObjisUiRvd29p-zc6W4bwt5rE1OdR6TXNrRhQ,825
67
67
  prefect/_internal/schemas/validators.py,sha256=ty9hpmfiNEWpENgeBGrgs94j192L8SpLJ0bhFHeXV_8,19733
@@ -69,14 +69,14 @@ prefect/_vendor/croniter/__init__.py,sha256=NUFzdbyPcTQhIOFtzmFM0nbClAvBbKh2mlnT
69
69
  prefect/_vendor/croniter/croniter.py,sha256=eJ2HzStNAYV-vNiLOgDXl4sYWWHOsSA0dgwbkQoguhY,53009
70
70
  prefect/blocks/__init__.py,sha256=D0hB72qMfgqnBB2EMZRxUxlX9yLfkab5zDChOwJZmkY,220
71
71
  prefect/blocks/abstract.py,sha256=mpOAWopSR_RrzdxeurBTXVSKisP8ne-k8LYos-tp7go,17021
72
- prefect/blocks/core.py,sha256=CgxU59KUWiHLWUdTxOSDOfHkfFAyjLXc7eibmFc_xCo,62186
72
+ prefect/blocks/core.py,sha256=LDC6Q2Bx88xfI7jRSx4Xlqevhf7KNw_uv_CAh2ZWim0,62192
73
73
  prefect/blocks/fields.py,sha256=1m507VVmkpOnMF_7N-qboRjtw4_ceIuDneX3jZ3Jm54,63
74
74
  prefect/blocks/notifications.py,sha256=UpNNxc4Bwx0nSlDj-vZQOv2XyUCUB2PaO4uBPO1Y6XM,34162
75
75
  prefect/blocks/redis.py,sha256=lt_f1SIcS5OVvthCY6KRWiy5DyUZNRlHqkKhKF25P8c,5770
76
76
  prefect/blocks/system.py,sha256=4KiUIy5zizMqfGJrxvi9GLRLcMj4BjAXARxCUEmgbKI,5041
77
77
  prefect/blocks/webhook.py,sha256=hRpMGamOpS2HSM0iPU2ylVGnDWtWUPo6sIU3O24lIa0,2558
78
78
  prefect/client/__init__.py,sha256=bDeOC_I8_la5dwCAfxKzYSTSAr2tlq5HpxJgVoCCdAs,675
79
- prefect/client/base.py,sha256=HWfabmDRu2YX6G6X4XXAwvjQtaYdSjo3-OovzAM0mis,25539
79
+ prefect/client/base.py,sha256=7VAMyoy8KtmtI-H8KYsI16_uw9TlrXSrcxChFuMp65Q,26269
80
80
  prefect/client/cloud.py,sha256=jnFgg0osMVDGbLjdWkDX3rQg_0pI_zvfSlU480XCWGQ,6523
81
81
  prefect/client/collections.py,sha256=t9XkVU_onQMZ871L21F1oZnAiPSQeeVfd_MuDEBS3iM,1050
82
82
  prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
@@ -112,7 +112,7 @@ prefect/client/orchestration/_work_pools/client.py,sha256=s1DfUQQBgB2sLiVVPhLNTl
112
112
  prefect/client/schemas/__init__.py,sha256=InZcDzdeWA2oaV0TlyvoMcyLcbi_aaqU1U9D6Gx-eoU,2747
113
113
  prefect/client/schemas/actions.py,sha256=I8LGTyDBrV4eXI_VSq8nQz5jUuOUAn1A0Q5JsPgCa2A,33032
114
114
  prefect/client/schemas/filters.py,sha256=zaiDkalrIpKjd38V4aP1GHlqD24KTPCZiKtPyX69ZWE,36607
115
- prefect/client/schemas/objects.py,sha256=H5VEfe3VZejD1KC4Gcb9KxTQ-YULiRIWJRtZoJ-2kH8,58508
115
+ prefect/client/schemas/objects.py,sha256=VIewi8krUQpGemZVwcbuqgOG-U7LUfFoWLa0lUaL1QE,58514
116
116
  prefect/client/schemas/responses.py,sha256=iTXTiUhdRL7PxNyJXMZ4ngT7C8SepT_z7g_pnUnVlzo,15629
117
117
  prefect/client/schemas/schedules.py,sha256=sxLFk0SmFY7X1Y9R9HyGDqOS3U5NINBWTciUU7vTTic,14836
118
118
  prefect/client/schemas/sorting.py,sha256=L-2Mx-igZPtsUoRUguTcG3nIEstMEMPD97NwPM2Ox5s,2579
@@ -147,7 +147,7 @@ prefect/docker/docker_image.py,sha256=bR_pEq5-FDxlwTj8CP_7nwZ_MiGK6KxIi8v7DRjy1K
147
147
  prefect/events/__init__.py,sha256=GtKl2bE--pJduTxelH2xy7SadlLJmmis8WR1EYixhuA,2094
148
148
  prefect/events/actions.py,sha256=A7jS8bo4zWGnrt3QfSoQs0uYC1xfKXio3IfU0XtTb5s,9129
149
149
  prefect/events/clients.py,sha256=XA33NpeRdgVglt7J47uFdpASa1bCvcKWyxsxQt3vEPQ,27290
150
- prefect/events/filters.py,sha256=cZ9KnQyWpIHshpAJ95nF5JosCag48enI5cBfKd2JNXA,8227
150
+ prefect/events/filters.py,sha256=2hVfzc3Rdgy0mBHDutWxT__LJY0zpVM8greWX3y6kjM,8233
151
151
  prefect/events/related.py,sha256=nthW3toCPacIL1xkWeV_BG30X6hF4vF2rJHAgqtDXXU,6580
152
152
  prefect/events/utilities.py,sha256=ww34bTMENCNwcp6RhhgzG0KgXOvKGe0MKmBdSJ8NpZY,3043
153
153
  prefect/events/worker.py,sha256=HjbibR0_J1W1nnNMZDFTXAbB0cl_cFGaFI87DvNGcnI,4557
@@ -233,7 +233,7 @@ prefect/server/api/ui/flows.py,sha256=W4kwqOCJ_2vROmMCmemH2Mq3uWbWZyu5q5uTZPBdYw
233
233
  prefect/server/api/ui/schemas.py,sha256=NVWA1RFnHW-MMU1s6WbNmp_S5mhbrN-_P41I4O2XtMg,2085
234
234
  prefect/server/api/ui/task_runs.py,sha256=dKVNe4EjmMrXH-VtsRoFTKJEBbl35upGHAW2C_AhKKM,6664
235
235
  prefect/settings/__init__.py,sha256=3jDLzExmq9HsRWo1kTSE16BO_3B3JlVsk5pR0s4PWEQ,2136
236
- prefect/settings/base.py,sha256=e5huXB_cWgw_N6QWuRNSWMjW6B-g261RbiQ-6RoWFVE,9667
236
+ prefect/settings/base.py,sha256=tRpTdJUjntatn9H-9Ij2kzEfFbd-a3ZEeB3CrCe9Meo,9685
237
237
  prefect/settings/constants.py,sha256=5NjVLG1Km9J9I-a6wrq-qmi_dTkPdwEk3IrY9bSxWvw,281
238
238
  prefect/settings/context.py,sha256=yKxnaDJHX8e2jmAVtw1RF9o7X4V3AOcz61sVeQyPX2c,2195
239
239
  prefect/settings/legacy.py,sha256=KG00GwaURl1zbwfCKAjwNRdJjB2UdTyo80gYF7U60jk,5693
@@ -275,7 +275,7 @@ prefect/telemetry/processors.py,sha256=jw6j6LviOVxw3IBJe7cSjsxFk0zzY43jUmy6C9pcf
275
275
  prefect/telemetry/run_telemetry.py,sha256=_FbjiPqPemu4xvZuI2YBPwXeRJ2BcKRJ6qgO4UMzKKE,8571
276
276
  prefect/telemetry/services.py,sha256=DxgNNDTeWNtHBtioX8cjua4IrCbTiJJdYecx-gugg-w,2358
277
277
  prefect/types/__init__.py,sha256=yBjKxiQmSC7jXoo0UNmM3KZil1NBFS-BWGPfwSEaoJo,4621
278
- prefect/types/_datetime.py,sha256=NdlwqXTee_EJqgAUIh80xSPPUUvvuE_57ocs828Tk4o,7289
278
+ prefect/types/_datetime.py,sha256=Cy6z7MxPDV_-jH2vxqC3PNA2G74IdUDIB07Jaakdj5w,7294
279
279
  prefect/types/entrypoint.py,sha256=2FF03-wLPgtnqR_bKJDB2BsXXINPdu8ptY9ZYEZnXg8,328
280
280
  prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
281
  prefect/utilities/_deprecated.py,sha256=b3pqRSoFANdVJAc8TJkygBcP-VjZtLJUxVIWC7kwspI,1303
@@ -283,7 +283,7 @@ prefect/utilities/_engine.py,sha256=9GW4X1lyAbmPwCuXXIubVJ7Z0DMT3dykkEUtp9tm5hI,
283
283
  prefect/utilities/_git.py,sha256=bPYWQdr9xvH0BqxR1ll1RkaSb3x0vhwylhYD5EilkKU,863
284
284
  prefect/utilities/annotations.py,sha256=0Elqgq6LR7pQqezNqT5wb6U_0e2pDO_zx6VseVL6kL8,4396
285
285
  prefect/utilities/asyncutils.py,sha256=xcfeNym2j3WH4gKXznON2hI1PpUTcwr_BGc16IQS3C4,19789
286
- prefect/utilities/callables.py,sha256=YiNdLzsOQfUsTa6bIU3TIMAuZWRiZVevYUQX2cSv5gY,25833
286
+ prefect/utilities/callables.py,sha256=xK1zWWcNPkFM4a0Yq8MaMyx9p_4F74DnDYoQ8zEkzZI,25835
287
287
  prefect/utilities/collections.py,sha256=c3nPLPWqIZQQdNuHs_nrbQJwuhQSX4ivUl-h9LtzXto,23243
288
288
  prefect/utilities/compat.py,sha256=nnPA3lf2f4Y-l645tYFFNmj5NDPaYvjqa9pbGKZ3WKE,582
289
289
  prefect/utilities/context.py,sha256=23SDMgdt07SjmB1qShiykHfGgiv55NBzdbMXM3fE9CI,1447
@@ -316,7 +316,7 @@ prefect/workers/cloud.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
316
316
  prefect/workers/process.py,sha256=uxOwcqA2Ps-V-W6WeSdKCQMINrCxBEVx1K1Un8pb7vs,8973
317
317
  prefect/workers/server.py,sha256=2pmVeJZiVbEK02SO6BEZaBIvHMsn6G8LzjW8BXyiTtk,1952
318
318
  prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
319
- prefect_client-3.3.0.dist-info/METADATA,sha256=1u64NIfd917nrg-CjmHQTxkh-8BuaPDFBgby2yKCREg,7411
320
- prefect_client-3.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
321
- prefect_client-3.3.0.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
322
- prefect_client-3.3.0.dist-info/RECORD,,
319
+ prefect_client-3.3.2.dev1.dist-info/METADATA,sha256=h0kpaz04uScDrt6tLhcgehDTzHIXXxj7xehi-n4qmMo,7456
320
+ prefect_client-3.3.2.dev1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
321
+ prefect_client-3.3.2.dev1.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
322
+ prefect_client-3.3.2.dev1.dist-info/RECORD,,