prefect-client 3.0.0rc10__py3-none-any.whl → 3.0.0rc11__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.
@@ -21,8 +21,10 @@ import socket
21
21
  import subprocess
22
22
  import sys
23
23
  import tempfile
24
+ import threading
25
+ from functools import partial
24
26
  from pathlib import Path
25
- from typing import TYPE_CHECKING, Dict, Optional, Tuple
27
+ from typing import TYPE_CHECKING, Callable, Dict, Optional, Tuple
26
28
 
27
29
  import anyio
28
30
  import anyio.abc
@@ -30,8 +32,27 @@ from pydantic import Field, field_validator
30
32
 
31
33
  from prefect._internal.schemas.validators import validate_command
32
34
  from prefect.client.schemas import FlowRun
33
- from prefect.exceptions import InfrastructureNotAvailable, InfrastructureNotFound
35
+ from prefect.client.schemas.filters import (
36
+ FlowRunFilter,
37
+ FlowRunFilterId,
38
+ FlowRunFilterState,
39
+ FlowRunFilterStateName,
40
+ FlowRunFilterStateType,
41
+ WorkPoolFilter,
42
+ WorkPoolFilterName,
43
+ WorkQueueFilter,
44
+ WorkQueueFilterName,
45
+ )
46
+ from prefect.client.schemas.objects import StateType
47
+ from prefect.events.utilities import emit_event
48
+ from prefect.exceptions import (
49
+ InfrastructureNotAvailable,
50
+ InfrastructureNotFound,
51
+ ObjectNotFound,
52
+ )
53
+ from prefect.settings import PREFECT_WORKER_QUERY_SECONDS
34
54
  from prefect.utilities.processutils import get_sys_executable, run_process
55
+ from prefect.utilities.services import critical_service_loop
35
56
  from prefect.workers.base import (
36
57
  BaseJobConfiguration,
37
58
  BaseVariables,
@@ -128,6 +149,96 @@ class ProcessWorker(BaseWorker):
128
149
  )
129
150
  _logo_url = "https://cdn.sanity.io/images/3ugk85nk/production/356e6766a91baf20e1d08bbe16e8b5aaef4d8643-48x48.png"
130
151
 
152
+ async def start(
153
+ self,
154
+ run_once: bool = False,
155
+ with_healthcheck: bool = False,
156
+ printer: Callable[..., None] = print,
157
+ ):
158
+ """
159
+ Starts the worker and runs the main worker loops.
160
+
161
+ By default, the worker will run loops to poll for scheduled/cancelled flow
162
+ runs and sync with the Prefect API server.
163
+
164
+ If `run_once` is set, the worker will only run each loop once and then return.
165
+
166
+ If `with_healthcheck` is set, the worker will start a healthcheck server which
167
+ can be used to determine if the worker is still polling for flow runs and restart
168
+ the worker if necessary.
169
+
170
+ Args:
171
+ run_once: If set, the worker will only run each loop once then return.
172
+ with_healthcheck: If set, the worker will start a healthcheck server.
173
+ printer: A `print`-like function where logs will be reported.
174
+ """
175
+ healthcheck_server = None
176
+ healthcheck_thread = None
177
+ try:
178
+ async with self as worker:
179
+ # wait for an initial heartbeat to configure the worker
180
+ await worker.sync_with_backend()
181
+ # schedule the scheduled flow run polling loop
182
+ async with anyio.create_task_group() as loops_task_group:
183
+ loops_task_group.start_soon(
184
+ partial(
185
+ critical_service_loop,
186
+ workload=self.get_and_submit_flow_runs,
187
+ interval=PREFECT_WORKER_QUERY_SECONDS.value(),
188
+ run_once=run_once,
189
+ jitter_range=0.3,
190
+ backoff=4, # Up to ~1 minute interval during backoff
191
+ )
192
+ )
193
+ # schedule the sync loop
194
+ loops_task_group.start_soon(
195
+ partial(
196
+ critical_service_loop,
197
+ workload=self.sync_with_backend,
198
+ interval=self.heartbeat_interval_seconds,
199
+ run_once=run_once,
200
+ jitter_range=0.3,
201
+ backoff=4,
202
+ )
203
+ )
204
+ loops_task_group.start_soon(
205
+ partial(
206
+ critical_service_loop,
207
+ workload=self.check_for_cancelled_flow_runs,
208
+ interval=PREFECT_WORKER_QUERY_SECONDS.value() * 2,
209
+ run_once=run_once,
210
+ jitter_range=0.3,
211
+ backoff=4,
212
+ )
213
+ )
214
+
215
+ self._started_event = await self._emit_worker_started_event()
216
+
217
+ if with_healthcheck:
218
+ from prefect.workers.server import build_healthcheck_server
219
+
220
+ # we'll start the ASGI server in a separate thread so that
221
+ # uvicorn does not block the main thread
222
+ healthcheck_server = build_healthcheck_server(
223
+ worker=worker,
224
+ query_interval_seconds=PREFECT_WORKER_QUERY_SECONDS.value(),
225
+ )
226
+ healthcheck_thread = threading.Thread(
227
+ name="healthcheck-server-thread",
228
+ target=healthcheck_server.run,
229
+ daemon=True,
230
+ )
231
+ healthcheck_thread.start()
232
+ printer(f"Worker {worker.name!r} started!")
233
+ finally:
234
+ if healthcheck_server and healthcheck_thread:
235
+ self._logger.debug("Stopping healthcheck server...")
236
+ healthcheck_server.should_exit = True
237
+ healthcheck_thread.join()
238
+ self._logger.debug("Healthcheck server stopped.")
239
+
240
+ printer(f"Worker {worker.name!r} stopped!")
241
+
131
242
  async def run(
132
243
  self,
133
244
  flow_run: FlowRun,
@@ -209,10 +320,9 @@ class ProcessWorker(BaseWorker):
209
320
  status_code=process.returncode, identifier=str(process.pid)
210
321
  )
211
322
 
212
- async def kill_infrastructure(
323
+ async def kill_process(
213
324
  self,
214
325
  infrastructure_pid: str,
215
- configuration: ProcessJobConfiguration,
216
326
  grace_seconds: int = 30,
217
327
  ):
218
328
  hostname, pid = _parse_infrastructure_pid(infrastructure_pid)
@@ -263,3 +373,151 @@ class ProcessWorker(BaseWorker):
263
373
  # We shouldn't ever end up here, but it's possible that the
264
374
  # process ended right after the check above.
265
375
  return
376
+
377
+ async def check_for_cancelled_flow_runs(self):
378
+ if not self.is_setup:
379
+ raise RuntimeError(
380
+ "Worker is not set up. Please make sure you are running this worker "
381
+ "as an async context manager."
382
+ )
383
+
384
+ self._logger.debug("Checking for cancelled flow runs...")
385
+
386
+ work_queue_filter = (
387
+ WorkQueueFilter(name=WorkQueueFilterName(any_=list(self._work_queues)))
388
+ if self._work_queues
389
+ else None
390
+ )
391
+
392
+ named_cancelling_flow_runs = await self._client.read_flow_runs(
393
+ flow_run_filter=FlowRunFilter(
394
+ state=FlowRunFilterState(
395
+ type=FlowRunFilterStateType(any_=[StateType.CANCELLED]),
396
+ name=FlowRunFilterStateName(any_=["Cancelling"]),
397
+ ),
398
+ # Avoid duplicate cancellation calls
399
+ id=FlowRunFilterId(not_any_=list(self._cancelling_flow_run_ids)),
400
+ ),
401
+ work_pool_filter=WorkPoolFilter(
402
+ name=WorkPoolFilterName(any_=[self._work_pool_name])
403
+ ),
404
+ work_queue_filter=work_queue_filter,
405
+ )
406
+
407
+ typed_cancelling_flow_runs = await self._client.read_flow_runs(
408
+ flow_run_filter=FlowRunFilter(
409
+ state=FlowRunFilterState(
410
+ type=FlowRunFilterStateType(any_=[StateType.CANCELLING]),
411
+ ),
412
+ # Avoid duplicate cancellation calls
413
+ id=FlowRunFilterId(not_any_=list(self._cancelling_flow_run_ids)),
414
+ ),
415
+ work_pool_filter=WorkPoolFilter(
416
+ name=WorkPoolFilterName(any_=[self._work_pool_name])
417
+ ),
418
+ work_queue_filter=work_queue_filter,
419
+ )
420
+
421
+ cancelling_flow_runs = named_cancelling_flow_runs + typed_cancelling_flow_runs
422
+
423
+ if cancelling_flow_runs:
424
+ self._logger.info(
425
+ f"Found {len(cancelling_flow_runs)} flow runs awaiting cancellation."
426
+ )
427
+
428
+ for flow_run in cancelling_flow_runs:
429
+ self._cancelling_flow_run_ids.add(flow_run.id)
430
+ self._runs_task_group.start_soon(self.cancel_run, flow_run)
431
+
432
+ return cancelling_flow_runs
433
+
434
+ async def cancel_run(self, flow_run: "FlowRun"):
435
+ run_logger = self.get_flow_run_logger(flow_run)
436
+
437
+ try:
438
+ configuration = await self._get_configuration(flow_run)
439
+ except ObjectNotFound:
440
+ self._logger.warning(
441
+ f"Flow run {flow_run.id!r} cannot be cancelled by this worker:"
442
+ f" associated deployment {flow_run.deployment_id!r} does not exist."
443
+ )
444
+ await self._mark_flow_run_as_cancelled(
445
+ flow_run,
446
+ state_updates={
447
+ "message": (
448
+ "This flow run is missing infrastructure configuration information"
449
+ " and cancellation cannot be guaranteed."
450
+ )
451
+ },
452
+ )
453
+ return
454
+ else:
455
+ if configuration.is_using_a_runner:
456
+ self._logger.info(
457
+ f"Skipping cancellation because flow run {str(flow_run.id)!r} is"
458
+ " using enhanced cancellation. A dedicated runner will handle"
459
+ " cancellation."
460
+ )
461
+ return
462
+
463
+ if not flow_run.infrastructure_pid:
464
+ run_logger.error(
465
+ f"Flow run '{flow_run.id}' does not have an infrastructure pid"
466
+ " attached. Cancellation cannot be guaranteed."
467
+ )
468
+ await self._mark_flow_run_as_cancelled(
469
+ flow_run,
470
+ state_updates={
471
+ "message": (
472
+ "This flow run is missing infrastructure tracking information"
473
+ " and cancellation cannot be guaranteed."
474
+ )
475
+ },
476
+ )
477
+ return
478
+
479
+ try:
480
+ await self.kill_process(
481
+ infrastructure_pid=flow_run.infrastructure_pid,
482
+ )
483
+ except NotImplementedError:
484
+ self._logger.error(
485
+ f"Worker type {self.type!r} does not support killing created "
486
+ "infrastructure. Cancellation cannot be guaranteed."
487
+ )
488
+ except InfrastructureNotFound as exc:
489
+ self._logger.warning(f"{exc} Marking flow run as cancelled.")
490
+ await self._mark_flow_run_as_cancelled(flow_run)
491
+ except InfrastructureNotAvailable as exc:
492
+ self._logger.warning(f"{exc} Flow run cannot be cancelled by this worker.")
493
+ except Exception:
494
+ run_logger.exception(
495
+ "Encountered exception while killing infrastructure for flow run "
496
+ f"'{flow_run.id}'. Flow run may not be cancelled."
497
+ )
498
+ # We will try again on generic exceptions
499
+ self._cancelling_flow_run_ids.remove(flow_run.id)
500
+ return
501
+ else:
502
+ self._emit_flow_run_cancelled_event(
503
+ flow_run=flow_run, configuration=configuration
504
+ )
505
+ await self._mark_flow_run_as_cancelled(flow_run)
506
+ run_logger.info(f"Cancelled flow run '{flow_run.id}'!")
507
+
508
+ def _emit_flow_run_cancelled_event(
509
+ self, flow_run: "FlowRun", configuration: BaseJobConfiguration
510
+ ):
511
+ related = self._event_related_resources(configuration=configuration)
512
+
513
+ for resource in related:
514
+ if resource.role == "flow-run":
515
+ resource["prefect.infrastructure.identifier"] = str(
516
+ flow_run.infrastructure_pid
517
+ )
518
+
519
+ emit_event(
520
+ event="prefect.worker.cancelled-flow-run",
521
+ resource=self._event_resource(),
522
+ related=related,
523
+ )
prefect/workers/server.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from typing import Union
2
2
 
3
3
  import uvicorn
4
+ import uvicorn.server
4
5
  from fastapi import APIRouter, FastAPI, status
5
6
  from fastapi.responses import JSONResponse
6
7
 
@@ -12,19 +13,19 @@ from prefect.workers.base import BaseWorker
12
13
  from prefect.workers.process import ProcessWorker
13
14
 
14
15
 
15
- def start_healthcheck_server(
16
+ def build_healthcheck_server(
16
17
  worker: Union[BaseWorker, ProcessWorker],
17
- query_interval_seconds: int,
18
+ query_interval_seconds: float,
18
19
  log_level: str = "error",
19
- ) -> None:
20
+ ):
20
21
  """
21
- Run a healthcheck FastAPI server for a worker.
22
+ Build a healthcheck FastAPI server for a worker.
22
23
 
23
24
  Args:
24
25
  worker (BaseWorker | ProcessWorker): the worker whose health we will check
25
- log_level (str): the log level to use for the server
26
+ log_level (str): the log
26
27
  """
27
- webserver = FastAPI()
28
+ app = FastAPI()
28
29
  router = APIRouter()
29
30
 
30
31
  def perform_health_check():
@@ -41,11 +42,28 @@ def start_healthcheck_server(
41
42
 
42
43
  router.add_api_route("/health", perform_health_check, methods=["GET"])
43
44
 
44
- webserver.include_router(router)
45
+ app.include_router(router)
45
46
 
46
- uvicorn.run(
47
- webserver,
47
+ config = uvicorn.Config(
48
+ app=app,
48
49
  host=PREFECT_WORKER_WEBSERVER_HOST.value(),
49
50
  port=PREFECT_WORKER_WEBSERVER_PORT.value(),
50
51
  log_level=log_level,
51
52
  )
53
+ return uvicorn.Server(config=config)
54
+
55
+
56
+ def start_healthcheck_server(
57
+ worker: Union[BaseWorker, ProcessWorker],
58
+ query_interval_seconds: float,
59
+ log_level: str = "error",
60
+ ) -> None:
61
+ """
62
+ Run a healthcheck FastAPI server for a worker.
63
+
64
+ Args:
65
+ worker (BaseWorker | ProcessWorker): the worker whose health we will check
66
+ log_level (str): the log level to use for the server
67
+ """
68
+ server = build_healthcheck_server(worker, query_interval_seconds, log_level)
69
+ server.run()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 3.0.0rc10
3
+ Version: 3.0.0rc11
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -24,7 +24,7 @@ Classifier: Topic :: Software Development :: Libraries
24
24
  Requires-Python: >=3.9
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
- Requires-Dist: anyio <5.0.0,>=4.0.0
27
+ Requires-Dist: anyio <5.0.0,>=4.4.0
28
28
  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
@@ -34,7 +34,7 @@ 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
36
36
  Requires-Dist: graphviz >=0.20.1
37
- Requires-Dist: griffe >=0.20.0
37
+ Requires-Dist: griffe <0.48.0,>=0.20.0
38
38
  Requires-Dist: httpcore <2.0.0,>=1.0.5
39
39
  Requires-Dist: httpx[http2] !=0.23.2,>=0.23
40
40
  Requires-Dist: importlib-resources <6.2.0,>=6.1.3
@@ -5,14 +5,14 @@ prefect/agent.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
5
5
  prefect/artifacts.py,sha256=G-jCyce3XGtTyQpCk_s3L7e-TWFyJY8Dcnk_i4_CsY4,12647
6
6
  prefect/automations.py,sha256=NlQ62GPJzy-gnWQqX7c6CQJKw7p60WLGDAFcy82vtg4,5613
7
7
  prefect/cache_policies.py,sha256=uEKNGO-PJ3N35B2tjhRDtQULN6ok72D9raIoJaUyXk0,6365
8
- prefect/context.py,sha256=GmCFJDsj8mEYBph8q_mQpzDebk3P43EeaXz-SiMeAmQ,19698
8
+ prefect/context.py,sha256=40FLSXI3Qd9dMwP8nQ7fGZFKpQIuEkjTpekT4V1MvF8,19942
9
9
  prefect/engine.py,sha256=BpmDbe6miZcTl1vRkxfCPYcWSXADLigGPCagFwucMz0,1976
10
10
  prefect/exceptions.py,sha256=3s69Z_IC3HKF6BKxcHrMPXkKdYwfbEfaTjy4-5LOtQ0,11132
11
11
  prefect/filesystems.py,sha256=rbFvlqHXeeo71nK1Y5I0-ucmGOYUcdkbb6N2vpsRcWE,17229
12
- prefect/flow_engine.py,sha256=niDSb2xeKvtE4ZZmkUR3zF-khqPFhpWuORnxZ_bJOD0,29246
12
+ prefect/flow_engine.py,sha256=pty-TJxjlJgk5diKXR3aIdjQNQkFZH-QN5HGxSvc-iQ,29189
13
13
  prefect/flow_runs.py,sha256=EaXRIQTOnwnA0fO7_EjwafFRmS57K_CRy0Xsz3JDIhc,16070
14
- prefect/flows.py,sha256=KfAulSaYhodoeLVROthtYWeVpchRhv7u9dsgYbR4Kzg,80833
15
- prefect/futures.py,sha256=nGD195sLosqBIpBtESLeVMKAorUVRNLstipiqs6e7w8,12153
14
+ prefect/flows.py,sha256=nHzrZG9-lQ8S_9lOKKFuX1l_BBJJ5IuLEqzuloqE4NY,84263
15
+ prefect/futures.py,sha256=w5M_iZwt5aI0AUfia0JC1FkitRmQ6Oxtc_L7g_INTOM,13695
16
16
  prefect/main.py,sha256=bab5nBn37a6gmxdPbTlRS2a9Cf0KY0GaCotDOSbcQ7M,1930
17
17
  prefect/manifests.py,sha256=477XcmfdC_yE81wT6zIAKnEUEJ0lH9ZLfOVSgX2FohE,676
18
18
  prefect/plugins.py,sha256=7AICJzHIu8iAeF9vl9wAYm28pR_k7dkdnm3OyJRfCv4,2229
@@ -20,25 +20,26 @@ prefect/profiles.toml,sha256=Fs8hD_BdWHZgAijgk8pK_Zx-Pm-YFixqDIfEP6fM-qU,38
20
20
  prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  prefect/results.py,sha256=gpX2pGIYyVfxMaVJkic5i1KbJ4RBARAoIizDL_C3auI,26152
22
22
  prefect/serializers.py,sha256=Lo41EM0_qGzcfB_63390Izeo3DdK6cY6VZfxa9hpSGQ,8712
23
- prefect/settings.py,sha256=-x6n7WpSgflBPCFRx9mP4i9cqDtMWVI3IKU7GFTRmP4,69747
23
+ prefect/settings.py,sha256=5H6yQqtql9GWHp1wFCaDnejfdrzd2v-9CPOHD7TA8yU,69607
24
24
  prefect/states.py,sha256=lw22xucH46cN9stkxiV9ByIvq689mH5iL3gErri-Y18,22207
25
25
  prefect/task_engine.py,sha256=94Acrmq04i-KjJtSa72_ofGAEfs_lKBAYqhRww0jH24,34957
26
26
  prefect/task_runners.py,sha256=W1n0yMwbDIqnvffFVJADo9MGEbLaYkzWk52rqgnkMY4,15019
27
27
  prefect/task_runs.py,sha256=eDWYH5H1K4SyduhKmn3GzO6vM3fZSwOZxAb8KhkMGsk,7798
28
- prefect/task_worker.py,sha256=dH9hf_vKsOlWtXinp2-1d2wk2YCa69QyuH8YAV_Bp28,17342
28
+ prefect/task_worker.py,sha256=lV9rQb9YOaO28DZLW_avw6p0pTSVYtsA1gqODWxB7J0,17334
29
29
  prefect/tasks.py,sha256=VkliQAiiLiYSpBQvY1Xc4huqmGgMlgX0KChlBPOX9IY,62599
30
- prefect/transactions.py,sha256=UBEFArEn1jWlacvHtYBxdtK6k57I4bHcCl5n8LDblRI,10460
30
+ prefect/transactions.py,sha256=Yn9XgUFJKD_QZ0OzvmW-kp7x6hcGcE5FuJ0V8lSTCEM,11032
31
31
  prefect/variables.py,sha256=-t5LVY0N-K4f0fa6YwruVVQqwnU3fGWBMYXXE32XPkA,4821
32
32
  prefect/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  prefect/_internal/_logging.py,sha256=HvNHY-8P469o5u4LYEDBTem69XZEt1QUeUaLToijpak,810
34
34
  prefect/_internal/integrations.py,sha256=U4cZMDbnilzZSKaMxvzZcSL27a1tzRMjDoTfr2ul_eY,231
35
35
  prefect/_internal/pytz.py,sha256=WWl9x16rKFWequGmcOGs_ljpCDPf2LDHMyZp_4D8e6c,13748
36
+ prefect/_internal/retries.py,sha256=8uuagUX32w5YANLHqjM_1hHmVe9b1HxcwuPMXb1G2Qk,2317
36
37
  prefect/_internal/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  prefect/_internal/compatibility/deprecated.py,sha256=7vqE1_PAPS0cDalTfTumHWUIOqIzkbKvQl1iwHlfynQ,9205
38
39
  prefect/_internal/compatibility/experimental.py,sha256=nrIeeAe1vZ0yMb1cPw5AroVR6_msx-bzTeBLzY4au6o,5634
39
40
  prefect/_internal/compatibility/migration.py,sha256=O9HrcqxfQ-RrIklH0uGxeXMrQejPz1hmsgrw8zDLJuw,6801
40
41
  prefect/_internal/concurrency/__init__.py,sha256=YlTwU9ryjPNwbJa45adLJY00t_DGCh1QrdtY9WdVFfw,2140
41
- prefect/_internal/concurrency/api.py,sha256=mE2IahRxGX1DgyxIryDXhF6gwhOJ-cdghsTjJtNil9U,7132
42
+ prefect/_internal/concurrency/api.py,sha256=mOajv_f9ms2u3O4sgegJDV2kLeCg9lBavlEZzPw5kr4,7126
42
43
  prefect/_internal/concurrency/calls.py,sha256=UlNgzCoy3awKEPnMpexBSa1dk_2MNwCWoZ5YQODEmG4,15437
43
44
  prefect/_internal/concurrency/cancellation.py,sha256=D1B_I2cBSGPNXcLaXNaLN_9_QAgFjRmA540RcTmS0rA,18050
44
45
  prefect/_internal/concurrency/event_loop.py,sha256=1VBW862QZ6DV9dExWOT398A0fti4A7jW2kcY7Y5V-lI,2073
@@ -69,7 +70,7 @@ prefect/blocks/system.py,sha256=tkONKzDlaQgR6NtWXON0ZQm7nGuFKt0_Du3sj8ubs-M,3605
69
70
  prefect/blocks/webhook.py,sha256=mnAfGF64WyjH55BKkTbC1AP9FETNcrm_PEjiqJNpigA,1867
70
71
  prefect/client/__init__.py,sha256=fFtCXsGIsBCsAMFKlUPgRVUoIeqq_CsGtFE1knhbHlU,593
71
72
  prefect/client/base.py,sha256=laxz64IEhbetMIcRh67_YDYd5ThCmUK9fgUgco8WyXQ,24647
72
- prefect/client/cloud.py,sha256=5T84QP9IRa_cqL7rmY3lR1wxFW6C41PajFZgelurhK0,4124
73
+ prefect/client/cloud.py,sha256=7iHff1YDABdzBW5BZFlyzmwgCMWUwbgVv2zTNlqW7lw,4132
73
74
  prefect/client/collections.py,sha256=I9EgbTg4Fn57gn8vwP_WdDmgnATbx9gfkm2jjhCORjw,1037
74
75
  prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
75
76
  prefect/client/orchestration.py,sha256=W3tiqjND1lf0GtunLBayMRrUD5ykAcW0GfwxqT9fT-A,142479
@@ -78,18 +79,18 @@ prefect/client/utilities.py,sha256=Qh1WdKLs8F_GuA04FeZ1GJsPYtiCN4DjKmLEaMfKmpQ,3
78
79
  prefect/client/schemas/__init__.py,sha256=KlyqFV-hMulMkNstBn_0ijoHoIwJZaBj6B1r07UmgvE,607
79
80
  prefect/client/schemas/actions.py,sha256=wiyq87MrHBVbZZVqA6IX4Gy_rw7sogLfqRSXK3Id0cc,28019
80
81
  prefect/client/schemas/filters.py,sha256=HyIYZQowhkHa_D6syj83zUp5uFEzA8UADLaS9mt1MTo,35305
81
- prefect/client/schemas/objects.py,sha256=ot3nxARccG3viFuXp2bli_6JaGcO6I1_U_8gP-F2j0w,53547
82
+ prefect/client/schemas/objects.py,sha256=3-qhF8qTUSB-wax4s5_zBs6A1K2hdDr1WLxpTryQbRE,53547
82
83
  prefect/client/schemas/responses.py,sha256=xW9QKmVgBftSEmtuSr5gp9HBFvIDzF6aSFq-mhv7dE8,14948
83
84
  prefect/client/schemas/schedules.py,sha256=8rpqjOYtknu2-1n5_WD4cOplgu93P3mCyX86B22LfL4,13070
84
85
  prefect/client/schemas/sorting.py,sha256=EIQ6FUjUWMwk6fn6ckVLQLXOP-GI5kce7ftjUkDFWV0,2490
85
86
  prefect/client/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
87
  prefect/client/types/flexible_schedule_list.py,sha256=F1VFAXGLM89dJRBLnVsxwAMGLmrRF2i81FirEMpbB5s,368
87
88
  prefect/concurrency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- prefect/concurrency/asyncio.py,sha256=sn5Wm6pOnU0bnfJiwltwWBcouj-rhGg27Zkzw7zfVuA,4684
89
- prefect/concurrency/events.py,sha256=rQLSBwcYCzvdKTXr7bLjgMIklllObxB33MAL6dylXAM,1802
90
- prefect/concurrency/services.py,sha256=pxqfjA5DpzcpbU-E2TQT1Rq8BhOGf3Sfz5eTFE8sYu8,2981
91
- prefect/concurrency/sync.py,sha256=QtnPRfVX9GqVyuZOt6W9yJuT9G-PlCSVnxlZKFTjuKY,3271
92
- prefect/deployments/__init__.py,sha256=yAtuBvqhQNhlJHjPW6yQyjkPFCgew3t26NAKO2RnQyk,428
89
+ prefect/concurrency/asyncio.py,sha256=cCpjhq7z9hHpXUFLYp4fiGw_GcSfxOphhkOR4Xkf-4g,4738
90
+ prefect/concurrency/events.py,sha256=EjZwUbbtP-N-u8rk8nbyMIi-BnkshoLkHRYh913jUWU,1810
91
+ prefect/concurrency/services.py,sha256=akKoelFn6w70uYqGLIn2JcD5iCLy2CHPTnOz4XYrmOo,3039
92
+ prefect/concurrency/sync.py,sha256=tjAcMj9mtgGeCQNmHTk35jCvqoI9CEGQNyeHG8j1B3k,3496
93
+ prefect/deployments/__init__.py,sha256=_wb7NxDKhq11z9MjYsPckmT3o6MRhGLRgCV9TmvYtew,1002
93
94
  prefect/deployments/base.py,sha256=j2VUHkghXCqbfYJD8Joeh12Ejh4KCzr2DgVPRpDpbLw,16600
94
95
  prefect/deployments/deployments.py,sha256=EvC9qBdvJRc8CHJqRjFTqtzx75SE8bpZOl5C-2eULyA,109
95
96
  prefect/deployments/flow_runs.py,sha256=eatcBD7pg-aaEqs9JxQQcKN_flf614O4gAvedAlRyNo,6803
@@ -97,7 +98,7 @@ prefect/deployments/runner.py,sha256=wVz2Ltis_tOpWLvLzPuOBJBIsdWqs8aXY2oCOuwhssc
97
98
  prefect/deployments/schedules.py,sha256=KCYA6dOmLAoElHZuoWqdJn4Yno4TtOZtXfPOpTLb1cE,2046
98
99
  prefect/deployments/steps/__init__.py,sha256=Dlz9VqMRyG1Gal8dj8vfGpPr0LyQhZdvcciozkK8WoY,206
99
100
  prefect/deployments/steps/core.py,sha256=5vFf6BSpu992kkaYsvcPpsz-nZxFmayMIDmY9h0Hb8M,6846
100
- prefect/deployments/steps/pull.py,sha256=ylp3fd72hEfmY67LQs7sMwdcK6KKobsTZOeay-YUl8Q,7125
101
+ prefect/deployments/steps/pull.py,sha256=N98fU9S6Og204oKsqJf53eP1PdwwyRojtVg8GT2sVhE,7294
101
102
  prefect/deployments/steps/utility.py,sha256=s5mMBmHVCS1ZRBRUCunwPueU_7Dii_GK6CqCoznwUCc,8134
102
103
  prefect/docker/__init__.py,sha256=jumlacz2HY9l1ee0L9_kE0PFi9NO3l3pWINm9T5N9hs,524
103
104
  prefect/docker/docker_image.py,sha256=Y84_ooCYA9NGl6FElJul9-FaW3teT-eia2SiNtZ1LG8,2999
@@ -131,20 +132,20 @@ prefect/logging/filters.py,sha256=9keHLN4-cpnsWcii1qU0RITNi9-m7pOhkJ_t0MtCM4k,11
131
132
  prefect/logging/formatters.py,sha256=3nBWgawvD48slT0zgkKeus1gIyf0OjmDKdLwMEe5mPU,3923
132
133
  prefect/logging/handlers.py,sha256=eIf-0LFH8XUu8Ybnc3LXoocSsa8M8EdAIwbPTVFzZjI,10425
133
134
  prefect/logging/highlighters.py,sha256=BpSXOy0n3lFVvlKWa7jC-HetAiClFi9jnQtEq5-rgok,1681
134
- prefect/logging/loggers.py,sha256=tvd2uacDOndMKt_jvVlk-bsHGx6lRTaYNtbrvjIaUg8,11534
135
+ prefect/logging/loggers.py,sha256=xmJ4GIuSXyFV4yMMDK-VokMFGbfcX64PLPyzdM_aV9c,11544
135
136
  prefect/logging/logging.yml,sha256=UkEewf0c3_dURI2uCU4RrxkhI5Devoa1s93fl7hilcg,3160
136
137
  prefect/records/__init__.py,sha256=7q-lwyevfVgb5S7K9frzawmiJmpZ5ET0m5yXIHBYcVA,31
137
138
  prefect/records/result_store.py,sha256=6Yh9zqqXMWjn0qWSfcjQBSfXCM7jVg9pve5TVsOodDc,1734
138
139
  prefect/records/store.py,sha256=eQM1p2vZDshXZYg6SkJwL-DP3kUehL_Zgs8xa2-0DZs,224
139
140
  prefect/runner/__init__.py,sha256=7U-vAOXFkzMfRz1q8Uv6Otsvc0OrPYLLP44srwkJ_8s,89
140
- prefect/runner/runner.py,sha256=aR9Figoyvn0PAKv8zussaT7sJP9zM-SAmrcYZN19ZB8,45152
141
- prefect/runner/server.py,sha256=pXyNGDw2aBYCXRr3zyFCaflxUaQOG4M07zxwXiFngoQ,10676
141
+ prefect/runner/runner.py,sha256=33lp10HDKhB8r009eQZJ1hAbcH8_V0zVpbCL1_4-0MQ,47990
142
+ prefect/runner/server.py,sha256=2o5vhrL7Zbn-HBStWhCjqqViex5Ye9GiQ1EW9RSEzdo,10500
142
143
  prefect/runner/storage.py,sha256=FFHk28iF_OLw-cnXQtJIgGXUV4xecxF70mobiszP8C4,24557
143
- prefect/runner/submit.py,sha256=EpgYNR-tAub0VFVTIkijp8qwHcS1iojLAZN5NM0X39s,8552
144
+ prefect/runner/submit.py,sha256=RuyDr-ved9wjYYarXiehY5oJVFf_HE3XKKACNWpxpPc,8131
144
145
  prefect/runner/utils.py,sha256=wVgVa7p5uUL7tfYfDOVuq6QIGf-I8U9dfAjYBmYf6n4,3286
145
146
  prefect/runtime/__init__.py,sha256=JswiTlYRup2zXOYu8AqJ7czKtgcw9Kxo0tTbS6aWCqY,407
146
147
  prefect/runtime/deployment.py,sha256=Kah8Xdh5f94-CEAXjBgnEB4xAQXXYPaEqDJ_gTqltIY,4752
147
- prefect/runtime/flow_run.py,sha256=Fxbyc4r3kPj2m3AIJT8gud2PB5w9aKTwkI-g4dysikE,8445
148
+ prefect/runtime/flow_run.py,sha256=N16Z-GzATw-vZnaGdxjomWCfZx8_mMBQR2_cGUVj9m0,9436
148
149
  prefect/runtime/task_run.py,sha256=B6v_nZiHy9nKZfnKFQF7izZjAjaiZOT0j80m-VcLxmY,3403
149
150
  prefect/server/api/collections_data/views/aggregate-worker-metadata.json,sha256=gqrwGyylzBEzlFSPOJcMuUwdoK_zojpU0SZaBDgK5FE,79748
150
151
  prefect/server/api/static/prefect-logo-mark-gradient.png,sha256=ylRjJkI_JHCw8VbQasNnXQHwZW-sH-IQiUGSD3aWP1E,73430
@@ -152,14 +153,14 @@ prefect/types/__init__.py,sha256=SAHJDtWEGidTKXQACJ38nj6fq8r57Gj0Pwo4Gy7pVWs,223
152
153
  prefect/types/entrypoint.py,sha256=2FF03-wLPgtnqR_bKJDB2BsXXINPdu8ptY9ZYEZnXg8,328
153
154
  prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
155
  prefect/utilities/annotations.py,sha256=bXB43j5Zsq5gaBcJe9qnszBlnNwCTwqSTgcu2OkkRLo,2776
155
- prefect/utilities/asyncutils.py,sha256=9utKsWwvZ2q4ZgXEEPwqlAF9rQ_lavAo_4yZowICkJQ,19997
156
+ prefect/utilities/asyncutils.py,sha256=_ZN4lag5zofbXYysL8IbS3FBNjFF9bzjoVQfmgM7WLs,19998
156
157
  prefect/utilities/callables.py,sha256=rkPPzwiVFRoVszSUq612s9S0v3nxcMC-rIwfXoJTn0E,24915
157
158
  prefect/utilities/collections.py,sha256=pPa_SZZq80cja6l99b3TV7hRQy366WnuWpOW_FnutMI,17259
158
159
  prefect/utilities/compat.py,sha256=mNQZDnzyKaOqy-OV-DnmH_dc7CNF5nQgW_EsA4xMr7g,906
159
160
  prefect/utilities/context.py,sha256=BThuUW94-IYgFYTeMIM9KMo8ShT3oiI7w5ajZHzU1j0,1377
160
161
  prefect/utilities/dispatch.py,sha256=c8G-gBo7hZlyoD7my9nO50Rzy8Retk-np5WGq9_E2AM,5856
161
162
  prefect/utilities/dockerutils.py,sha256=kRozGQ7JO6Uxl-ljWtDryzxhf96rHL78aHYDh255Em4,20324
162
- prefect/utilities/engine.py,sha256=E5WSLg9XsvkEN56M8Q5Wl4k0INUpaqmvdToQPFjYWNo,30160
163
+ prefect/utilities/engine.py,sha256=jqE8RqixSbobaB9IxTGKIT2siv9zjT_w_99Y8dDeVVU,31518
163
164
  prefect/utilities/filesystem.py,sha256=frAyy6qOeYa7c-jVbEUGZQEe6J1yF8I_SvUepPd59gI,4415
164
165
  prefect/utilities/hashing.py,sha256=EOwZLmoIZImuSTxAvVqInabxJ-4RpEfYeg9e2EDQF8o,1752
165
166
  prefect/utilities/importtools.py,sha256=YKmfib0_fYK_TaVjy8Ru1yxBI1OPH_Jh-utxlLpu2y8,15406
@@ -179,14 +180,14 @@ prefect/utilities/schema_tools/__init__.py,sha256=KsFsTEHQqgp89TkDpjggkgBBywoHQP
179
180
  prefect/utilities/schema_tools/hydration.py,sha256=Nitnmr35Mcn5z9NXIvh9DuZW5nCZxpjyMc9RFawMsgs,8376
180
181
  prefect/utilities/schema_tools/validation.py,sha256=zZHL_UFxAlgaUzi-qsEOrhWtZ7EkFQvPkX_YN1EJNTo,8414
181
182
  prefect/workers/__init__.py,sha256=8dP8SLZbWYyC_l9DRTQSE3dEbDgns5DZDhxkp_NfsbQ,35
182
- prefect/workers/base.py,sha256=62E0Q41pPr3eQdSBSUBfiR4WYx01OfuqUp5INRqHGgo,46942
183
+ prefect/workers/base.py,sha256=gjv-ZxwJOSr9mytY5bVwj8rtFriLGacGghQhwcX9hQI,43457
183
184
  prefect/workers/block.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
184
185
  prefect/workers/cloud.py,sha256=BOVVY5z-vUIQ2u8LwMTXDaNys2fjOZSS5YGDwJmTQjI,230
185
- prefect/workers/process.py,sha256=vylkSSswaSCew-V65YW0HcxIxyKI-uqWkbSKpkkLamQ,9372
186
- prefect/workers/server.py,sha256=EfPiMxI7TVgkqpHkdPwSaYG-ydi99sG7jwXhkAcACbI,1519
186
+ prefect/workers/process.py,sha256=t1f1EYRoPL5B25KbLgUX2b5q-lCCAXb2Gpf6T2M9WfY,19822
187
+ prefect/workers/server.py,sha256=lgh2FfSuaNU7b6HPxSFm8JtKvAvHsZGkiOo4y4tW1Cw,2022
187
188
  prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
188
- prefect_client-3.0.0rc10.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
189
- prefect_client-3.0.0rc10.dist-info/METADATA,sha256=IrvEmM3lkAlZER89HpIGYjfXrekuvfgaxXCE4875OQ4,7424
190
- prefect_client-3.0.0rc10.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
191
- prefect_client-3.0.0rc10.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
192
- prefect_client-3.0.0rc10.dist-info/RECORD,,
189
+ prefect_client-3.0.0rc11.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
190
+ prefect_client-3.0.0rc11.dist-info/METADATA,sha256=21Ipv_Qq3mfIziTr_jbFzJPBsMKfM1Tlspvek1Cpcg0,7432
191
+ prefect_client-3.0.0rc11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
192
+ prefect_client-3.0.0rc11.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
193
+ prefect_client-3.0.0rc11.dist-info/RECORD,,