prefect-client 3.3.2.dev2__py3-none-any.whl → 3.3.3__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 +3 -3
- prefect/client/orchestration/__init__.py +5 -0
- prefect/client/orchestration/_deployments/client.py +133 -62
- prefect/client/orchestration/routes.py +1 -0
- prefect/client/schemas/actions.py +39 -1
- prefect/client/schemas/objects.py +14 -0
- prefect/client/schemas/responses.py +23 -0
- prefect/context.py +2 -1
- prefect/server/api/flow_runs.py +2 -2
- prefect/server/api/ui/task_runs.py +21 -1
- {prefect_client-3.3.2.dev2.dist-info → prefect_client-3.3.3.dist-info}/METADATA +1 -1
- {prefect_client-3.3.2.dev2.dist-info → prefect_client-3.3.3.dist-info}/RECORD +14 -14
- {prefect_client-3.3.2.dev2.dist-info → prefect_client-3.3.3.dist-info}/WHEEL +0 -0
- {prefect_client-3.3.2.dev2.dist-info → prefect_client-3.3.3.dist-info}/licenses/LICENSE +0 -0
prefect/_build_info.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Generated by versioningit
|
2
|
-
__version__ = "3.3.
|
3
|
-
__build_date__ = "2025-04-
|
4
|
-
__git_commit__ = "
|
2
|
+
__version__ = "3.3.3"
|
3
|
+
__build_date__ = "2025-04-05 01:43:07.772891+00:00"
|
4
|
+
__git_commit__ = "4100d4ea3c8d2559e48d9860a5b241d8cd29d47e"
|
5
5
|
__dirty__ = False
|
@@ -1,3 +1,4 @@
|
|
1
|
+
from __future__ import annotations
|
1
2
|
import asyncio
|
2
3
|
import base64
|
3
4
|
import datetime
|
@@ -1164,6 +1165,10 @@ class PrefectClient(
|
|
1164
1165
|
def client_version(self) -> str:
|
1165
1166
|
return prefect.__version__
|
1166
1167
|
|
1168
|
+
@property
|
1169
|
+
def loop(self) -> asyncio.AbstractEventLoop | None:
|
1170
|
+
return self._loop
|
1171
|
+
|
1167
1172
|
async def raise_for_api_version_mismatch(self) -> None:
|
1168
1173
|
# Cloud is always compatible as a server
|
1169
1174
|
if self.server_type == ServerType.CLOUD:
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from collections.abc import Iterable
|
4
4
|
from typing import TYPE_CHECKING, Any, Union
|
5
|
+
from uuid import UUID
|
5
6
|
|
6
7
|
from httpx import HTTPStatusError, RequestError
|
7
8
|
|
@@ -10,7 +11,6 @@ from prefect.exceptions import ObjectNotFound
|
|
10
11
|
|
11
12
|
if TYPE_CHECKING:
|
12
13
|
import datetime
|
13
|
-
from uuid import UUID
|
14
14
|
|
15
15
|
from prefect.client.schemas import FlowRun
|
16
16
|
from prefect.client.schemas.actions import (
|
@@ -28,7 +28,9 @@ if TYPE_CHECKING:
|
|
28
28
|
)
|
29
29
|
from prefect.client.schemas.objects import (
|
30
30
|
ConcurrencyOptions,
|
31
|
+
DeploymentBranchingOptions,
|
31
32
|
DeploymentSchedule,
|
33
|
+
VersionInfo,
|
32
34
|
)
|
33
35
|
from prefect.client.schemas.responses import (
|
34
36
|
DeploymentResponse,
|
@@ -45,9 +47,10 @@ if TYPE_CHECKING:
|
|
45
47
|
class DeploymentClient(BaseClient):
|
46
48
|
def create_deployment(
|
47
49
|
self,
|
48
|
-
flow_id:
|
50
|
+
flow_id: UUID,
|
49
51
|
name: str,
|
50
52
|
version: str | None = None,
|
53
|
+
version_info: "VersionInfo | None" = None,
|
51
54
|
schedules: list["DeploymentScheduleCreate"] | None = None,
|
52
55
|
concurrency_limit: int | None = None,
|
53
56
|
concurrency_options: "ConcurrencyOptions | None" = None,
|
@@ -56,16 +59,19 @@ class DeploymentClient(BaseClient):
|
|
56
59
|
work_queue_name: str | None = None,
|
57
60
|
work_pool_name: str | None = None,
|
58
61
|
tags: list[str] | None = None,
|
59
|
-
storage_document_id:
|
62
|
+
storage_document_id: UUID | None = None,
|
60
63
|
path: str | None = None,
|
61
64
|
entrypoint: str | None = None,
|
62
|
-
infrastructure_document_id:
|
65
|
+
infrastructure_document_id: UUID | None = None,
|
63
66
|
parameter_openapi_schema: dict[str, Any] | None = None,
|
64
67
|
paused: bool | None = None,
|
65
68
|
pull_steps: list[dict[str, Any]] | None = None,
|
66
69
|
enforce_parameter_schema: bool | None = None,
|
67
70
|
job_variables: dict[str, Any] | None = None,
|
68
|
-
|
71
|
+
branch: str | None = None,
|
72
|
+
base: UUID | None = None,
|
73
|
+
root: UUID | None = None,
|
74
|
+
) -> UUID:
|
69
75
|
"""
|
70
76
|
Create a deployment.
|
71
77
|
|
@@ -89,7 +95,6 @@ class DeploymentClient(BaseClient):
|
|
89
95
|
Returns:
|
90
96
|
the ID of the deployment in the backend
|
91
97
|
"""
|
92
|
-
from uuid import UUID
|
93
98
|
|
94
99
|
from prefect.client.schemas.actions import DeploymentCreate
|
95
100
|
|
@@ -99,6 +104,7 @@ class DeploymentClient(BaseClient):
|
|
99
104
|
flow_id=flow_id,
|
100
105
|
name=name,
|
101
106
|
version=version,
|
107
|
+
version_info=version_info,
|
102
108
|
parameters=dict(parameters or {}),
|
103
109
|
tags=list(tags or []),
|
104
110
|
work_queue_name=work_queue_name,
|
@@ -115,6 +121,9 @@ class DeploymentClient(BaseClient):
|
|
115
121
|
concurrency_options=concurrency_options,
|
116
122
|
pull_steps=pull_steps,
|
117
123
|
enforce_parameter_schema=enforce_parameter_schema,
|
124
|
+
branch=branch,
|
125
|
+
base=base,
|
126
|
+
root=root,
|
118
127
|
)
|
119
128
|
|
120
129
|
if work_pool_name is not None:
|
@@ -123,20 +132,29 @@ class DeploymentClient(BaseClient):
|
|
123
132
|
# Exclude newer fields that are not set to avoid compatibility issues
|
124
133
|
exclude = {
|
125
134
|
field
|
126
|
-
for field in [
|
135
|
+
for field in [
|
136
|
+
"work_pool_name",
|
137
|
+
"work_queue_name",
|
138
|
+
]
|
127
139
|
if field not in deployment_create.model_fields_set
|
128
140
|
}
|
129
141
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
142
|
+
exclude_if_none = [
|
143
|
+
"paused",
|
144
|
+
"pull_steps",
|
145
|
+
"enforce_parameter_schema",
|
146
|
+
"version_info",
|
147
|
+
"branch",
|
148
|
+
"base",
|
149
|
+
"root",
|
150
|
+
]
|
135
151
|
|
136
|
-
|
137
|
-
|
152
|
+
for field in exclude_if_none:
|
153
|
+
if getattr(deployment_create, field) is None:
|
154
|
+
exclude.add(field)
|
138
155
|
|
139
156
|
json = deployment_create.model_dump(mode="json", exclude=exclude)
|
157
|
+
|
140
158
|
response = self.request(
|
141
159
|
"POST",
|
142
160
|
"/deployments/",
|
@@ -148,7 +166,7 @@ class DeploymentClient(BaseClient):
|
|
148
166
|
|
149
167
|
return UUID(deployment_id)
|
150
168
|
|
151
|
-
def set_deployment_paused_state(self, deployment_id:
|
169
|
+
def set_deployment_paused_state(self, deployment_id: UUID, paused: bool) -> None:
|
152
170
|
self.request(
|
153
171
|
"PATCH",
|
154
172
|
"/deployments/{id}",
|
@@ -158,7 +176,7 @@ class DeploymentClient(BaseClient):
|
|
158
176
|
|
159
177
|
def update_deployment(
|
160
178
|
self,
|
161
|
-
deployment_id:
|
179
|
+
deployment_id: UUID,
|
162
180
|
deployment: "DeploymentUpdate",
|
163
181
|
) -> None:
|
164
182
|
self.request(
|
@@ -172,12 +190,10 @@ class DeploymentClient(BaseClient):
|
|
172
190
|
),
|
173
191
|
)
|
174
192
|
|
175
|
-
def _create_deployment_from_schema(self, schema: "DeploymentCreate") ->
|
193
|
+
def _create_deployment_from_schema(self, schema: "DeploymentCreate") -> UUID:
|
176
194
|
"""
|
177
195
|
Create a deployment from a prepared `DeploymentCreate` schema.
|
178
196
|
"""
|
179
|
-
from uuid import UUID
|
180
|
-
|
181
197
|
# TODO: We are likely to remove this method once we have considered the
|
182
198
|
# packaging interface for deployments further.
|
183
199
|
response = self.request(
|
@@ -191,7 +207,7 @@ class DeploymentClient(BaseClient):
|
|
191
207
|
|
192
208
|
def read_deployment(
|
193
209
|
self,
|
194
|
-
deployment_id: Union[
|
210
|
+
deployment_id: Union[UUID, str],
|
195
211
|
) -> "DeploymentResponse":
|
196
212
|
"""
|
197
213
|
Query the Prefect API for a deployment by id.
|
@@ -202,7 +218,6 @@ class DeploymentClient(BaseClient):
|
|
202
218
|
Returns:
|
203
219
|
a [Deployment model][prefect.client.schemas.objects.Deployment] representation of the deployment
|
204
220
|
"""
|
205
|
-
from uuid import UUID
|
206
221
|
|
207
222
|
from prefect.client.schemas.responses import DeploymentResponse
|
208
223
|
|
@@ -328,7 +343,7 @@ class DeploymentClient(BaseClient):
|
|
328
343
|
|
329
344
|
def delete_deployment(
|
330
345
|
self,
|
331
|
-
deployment_id:
|
346
|
+
deployment_id: UUID,
|
332
347
|
) -> None:
|
333
348
|
"""
|
334
349
|
Delete deployment by id.
|
@@ -353,7 +368,7 @@ class DeploymentClient(BaseClient):
|
|
353
368
|
|
354
369
|
def create_deployment_schedules(
|
355
370
|
self,
|
356
|
-
deployment_id:
|
371
|
+
deployment_id: UUID,
|
357
372
|
schedules: list[tuple["SCHEDULE_TYPES", bool]],
|
358
373
|
) -> list["DeploymentSchedule"]:
|
359
374
|
"""
|
@@ -392,7 +407,7 @@ class DeploymentClient(BaseClient):
|
|
392
407
|
|
393
408
|
def read_deployment_schedules(
|
394
409
|
self,
|
395
|
-
deployment_id:
|
410
|
+
deployment_id: UUID,
|
396
411
|
) -> list["DeploymentSchedule"]:
|
397
412
|
"""
|
398
413
|
Query the Prefect API for a deployment's schedules.
|
@@ -420,8 +435,8 @@ class DeploymentClient(BaseClient):
|
|
420
435
|
|
421
436
|
def update_deployment_schedule(
|
422
437
|
self,
|
423
|
-
deployment_id:
|
424
|
-
schedule_id:
|
438
|
+
deployment_id: UUID,
|
439
|
+
schedule_id: UUID,
|
425
440
|
active: bool | None = None,
|
426
441
|
schedule: "SCHEDULE_TYPES | None" = None,
|
427
442
|
) -> None:
|
@@ -460,8 +475,8 @@ class DeploymentClient(BaseClient):
|
|
460
475
|
|
461
476
|
def delete_deployment_schedule(
|
462
477
|
self,
|
463
|
-
deployment_id:
|
464
|
-
schedule_id:
|
478
|
+
deployment_id: UUID,
|
479
|
+
schedule_id: UUID,
|
465
480
|
) -> None:
|
466
481
|
"""
|
467
482
|
Delete a deployment schedule.
|
@@ -487,7 +502,7 @@ class DeploymentClient(BaseClient):
|
|
487
502
|
|
488
503
|
def get_scheduled_flow_runs_for_deployments(
|
489
504
|
self,
|
490
|
-
deployment_ids: list[
|
505
|
+
deployment_ids: list[UUID],
|
491
506
|
scheduled_before: "datetime.datetime | None" = None,
|
492
507
|
limit: int | None = None,
|
493
508
|
) -> list["FlowRunResponse"]:
|
@@ -509,7 +524,7 @@ class DeploymentClient(BaseClient):
|
|
509
524
|
|
510
525
|
def create_flow_run_from_deployment(
|
511
526
|
self,
|
512
|
-
deployment_id:
|
527
|
+
deployment_id: UUID,
|
513
528
|
*,
|
514
529
|
parameters: dict[str, Any] | None = None,
|
515
530
|
context: dict[str, Any] | None = None,
|
@@ -517,7 +532,7 @@ class DeploymentClient(BaseClient):
|
|
517
532
|
name: str | None = None,
|
518
533
|
tags: Iterable[str] | None = None,
|
519
534
|
idempotency_key: str | None = None,
|
520
|
-
parent_task_run_id:
|
535
|
+
parent_task_run_id: UUID | None = None,
|
521
536
|
work_queue_name: str | None = None,
|
522
537
|
job_variables: dict[str, Any] | None = None,
|
523
538
|
labels: "KeyValueLabelsField | None" = None,
|
@@ -586,13 +601,36 @@ class DeploymentClient(BaseClient):
|
|
586
601
|
)
|
587
602
|
return FlowRun.model_validate(response.json())
|
588
603
|
|
604
|
+
def create_deployment_branch(
|
605
|
+
self,
|
606
|
+
deployment_id: UUID,
|
607
|
+
branch: str,
|
608
|
+
options: "DeploymentBranchingOptions | None" = None,
|
609
|
+
overrides: "DeploymentUpdate | None" = None,
|
610
|
+
) -> UUID:
|
611
|
+
from prefect.client.schemas.actions import DeploymentBranch
|
612
|
+
from prefect.client.schemas.objects import DeploymentBranchingOptions
|
613
|
+
|
614
|
+
response = self.request(
|
615
|
+
"POST",
|
616
|
+
"/deployments/{id}/branch",
|
617
|
+
path_params={"id": deployment_id},
|
618
|
+
json=DeploymentBranch(
|
619
|
+
branch=branch,
|
620
|
+
options=options or DeploymentBranchingOptions(),
|
621
|
+
overrides=overrides,
|
622
|
+
).model_dump(mode="json", exclude_unset=True),
|
623
|
+
)
|
624
|
+
return UUID(response.json().get("id"))
|
625
|
+
|
589
626
|
|
590
627
|
class DeploymentAsyncClient(BaseAsyncClient):
|
591
628
|
async def create_deployment(
|
592
629
|
self,
|
593
|
-
flow_id:
|
630
|
+
flow_id: UUID,
|
594
631
|
name: str,
|
595
632
|
version: str | None = None,
|
633
|
+
version_info: "VersionInfo | None" = None,
|
596
634
|
schedules: list["DeploymentScheduleCreate"] | None = None,
|
597
635
|
concurrency_limit: int | None = None,
|
598
636
|
concurrency_options: "ConcurrencyOptions | None" = None,
|
@@ -601,16 +639,19 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
601
639
|
work_queue_name: str | None = None,
|
602
640
|
work_pool_name: str | None = None,
|
603
641
|
tags: list[str] | None = None,
|
604
|
-
storage_document_id:
|
642
|
+
storage_document_id: UUID | None = None,
|
605
643
|
path: str | None = None,
|
606
644
|
entrypoint: str | None = None,
|
607
|
-
infrastructure_document_id:
|
645
|
+
infrastructure_document_id: UUID | None = None,
|
608
646
|
parameter_openapi_schema: dict[str, Any] | None = None,
|
609
647
|
paused: bool | None = None,
|
610
648
|
pull_steps: list[dict[str, Any]] | None = None,
|
611
649
|
enforce_parameter_schema: bool | None = None,
|
612
650
|
job_variables: dict[str, Any] | None = None,
|
613
|
-
|
651
|
+
branch: str | None = None,
|
652
|
+
base: UUID | None = None,
|
653
|
+
root: UUID | None = None,
|
654
|
+
) -> UUID:
|
614
655
|
"""
|
615
656
|
Create a deployment.
|
616
657
|
|
@@ -634,7 +675,6 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
634
675
|
Returns:
|
635
676
|
the ID of the deployment in the backend
|
636
677
|
"""
|
637
|
-
from uuid import UUID
|
638
678
|
|
639
679
|
from prefect.client.schemas.actions import DeploymentCreate
|
640
680
|
|
@@ -644,6 +684,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
644
684
|
flow_id=flow_id,
|
645
685
|
name=name,
|
646
686
|
version=version,
|
687
|
+
version_info=version_info,
|
647
688
|
parameters=dict(parameters or {}),
|
648
689
|
tags=list(tags or []),
|
649
690
|
work_queue_name=work_queue_name,
|
@@ -660,6 +701,9 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
660
701
|
concurrency_options=concurrency_options,
|
661
702
|
pull_steps=pull_steps,
|
662
703
|
enforce_parameter_schema=enforce_parameter_schema,
|
704
|
+
branch=branch,
|
705
|
+
base=base,
|
706
|
+
root=root,
|
663
707
|
)
|
664
708
|
|
665
709
|
if work_pool_name is not None:
|
@@ -668,20 +712,29 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
668
712
|
# Exclude newer fields that are not set to avoid compatibility issues
|
669
713
|
exclude = {
|
670
714
|
field
|
671
|
-
for field in [
|
715
|
+
for field in [
|
716
|
+
"work_pool_name",
|
717
|
+
"work_queue_name",
|
718
|
+
]
|
672
719
|
if field not in deployment_create.model_fields_set
|
673
720
|
}
|
674
721
|
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
722
|
+
exclude_if_none = [
|
723
|
+
"paused",
|
724
|
+
"pull_steps",
|
725
|
+
"enforce_parameter_schema",
|
726
|
+
"version_info",
|
727
|
+
"branch",
|
728
|
+
"base",
|
729
|
+
"root",
|
730
|
+
]
|
680
731
|
|
681
|
-
|
682
|
-
|
732
|
+
for field in exclude_if_none:
|
733
|
+
if getattr(deployment_create, field) is None:
|
734
|
+
exclude.add(field)
|
683
735
|
|
684
736
|
json = deployment_create.model_dump(mode="json", exclude=exclude)
|
737
|
+
|
685
738
|
response = await self.request(
|
686
739
|
"POST",
|
687
740
|
"/deployments/",
|
@@ -694,7 +747,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
694
747
|
return UUID(deployment_id)
|
695
748
|
|
696
749
|
async def set_deployment_paused_state(
|
697
|
-
self, deployment_id:
|
750
|
+
self, deployment_id: UUID, paused: bool
|
698
751
|
) -> None:
|
699
752
|
await self.request(
|
700
753
|
"PATCH",
|
@@ -705,7 +758,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
705
758
|
|
706
759
|
async def update_deployment(
|
707
760
|
self,
|
708
|
-
deployment_id:
|
761
|
+
deployment_id: UUID,
|
709
762
|
deployment: "DeploymentUpdate",
|
710
763
|
) -> None:
|
711
764
|
await self.request(
|
@@ -719,13 +772,10 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
719
772
|
),
|
720
773
|
)
|
721
774
|
|
722
|
-
async def _create_deployment_from_schema(
|
723
|
-
self, schema: "DeploymentCreate"
|
724
|
-
) -> "UUID":
|
775
|
+
async def _create_deployment_from_schema(self, schema: "DeploymentCreate") -> UUID:
|
725
776
|
"""
|
726
777
|
Create a deployment from a prepared `DeploymentCreate` schema.
|
727
778
|
"""
|
728
|
-
from uuid import UUID
|
729
779
|
|
730
780
|
# TODO: We are likely to remove this method once we have considered the
|
731
781
|
# packaging interface for deployments further.
|
@@ -740,7 +790,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
740
790
|
|
741
791
|
async def read_deployment(
|
742
792
|
self,
|
743
|
-
deployment_id: Union[
|
793
|
+
deployment_id: Union[UUID, str],
|
744
794
|
) -> "DeploymentResponse":
|
745
795
|
"""
|
746
796
|
Query the Prefect API for a deployment by id.
|
@@ -751,7 +801,6 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
751
801
|
Returns:
|
752
802
|
a [Deployment model][prefect.client.schemas.objects.Deployment] representation of the deployment
|
753
803
|
"""
|
754
|
-
from uuid import UUID
|
755
804
|
|
756
805
|
from prefect.client.schemas.responses import DeploymentResponse
|
757
806
|
|
@@ -877,7 +926,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
877
926
|
|
878
927
|
async def delete_deployment(
|
879
928
|
self,
|
880
|
-
deployment_id:
|
929
|
+
deployment_id: UUID,
|
881
930
|
) -> None:
|
882
931
|
"""
|
883
932
|
Delete deployment by id.
|
@@ -902,7 +951,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
902
951
|
|
903
952
|
async def create_deployment_schedules(
|
904
953
|
self,
|
905
|
-
deployment_id:
|
954
|
+
deployment_id: UUID,
|
906
955
|
schedules: list[tuple["SCHEDULE_TYPES", bool]],
|
907
956
|
) -> list["DeploymentSchedule"]:
|
908
957
|
"""
|
@@ -941,7 +990,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
941
990
|
|
942
991
|
async def read_deployment_schedules(
|
943
992
|
self,
|
944
|
-
deployment_id:
|
993
|
+
deployment_id: UUID,
|
945
994
|
) -> list["DeploymentSchedule"]:
|
946
995
|
"""
|
947
996
|
Query the Prefect API for a deployment's schedules.
|
@@ -969,8 +1018,8 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
969
1018
|
|
970
1019
|
async def update_deployment_schedule(
|
971
1020
|
self,
|
972
|
-
deployment_id:
|
973
|
-
schedule_id:
|
1021
|
+
deployment_id: UUID,
|
1022
|
+
schedule_id: UUID,
|
974
1023
|
active: bool | None = None,
|
975
1024
|
schedule: "SCHEDULE_TYPES | None" = None,
|
976
1025
|
) -> None:
|
@@ -1009,8 +1058,8 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
1009
1058
|
|
1010
1059
|
async def delete_deployment_schedule(
|
1011
1060
|
self,
|
1012
|
-
deployment_id:
|
1013
|
-
schedule_id:
|
1061
|
+
deployment_id: UUID,
|
1062
|
+
schedule_id: UUID,
|
1014
1063
|
) -> None:
|
1015
1064
|
"""
|
1016
1065
|
Delete a deployment schedule.
|
@@ -1036,7 +1085,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
1036
1085
|
|
1037
1086
|
async def get_scheduled_flow_runs_for_deployments(
|
1038
1087
|
self,
|
1039
|
-
deployment_ids: list[
|
1088
|
+
deployment_ids: list[UUID],
|
1040
1089
|
scheduled_before: "datetime.datetime | None" = None,
|
1041
1090
|
limit: int | None = None,
|
1042
1091
|
) -> list["FlowRun"]:
|
@@ -1058,7 +1107,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
1058
1107
|
|
1059
1108
|
async def create_flow_run_from_deployment(
|
1060
1109
|
self,
|
1061
|
-
deployment_id:
|
1110
|
+
deployment_id: UUID,
|
1062
1111
|
*,
|
1063
1112
|
parameters: dict[str, Any] | None = None,
|
1064
1113
|
context: dict[str, Any] | None = None,
|
@@ -1066,7 +1115,7 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
1066
1115
|
name: str | None = None,
|
1067
1116
|
tags: Iterable[str] | None = None,
|
1068
1117
|
idempotency_key: str | None = None,
|
1069
|
-
parent_task_run_id:
|
1118
|
+
parent_task_run_id: UUID | None = None,
|
1070
1119
|
work_queue_name: str | None = None,
|
1071
1120
|
job_variables: dict[str, Any] | None = None,
|
1072
1121
|
labels: "KeyValueLabelsField | None" = None,
|
@@ -1134,3 +1183,25 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
1134
1183
|
json=flow_run_create.model_dump(mode="json", exclude_unset=True),
|
1135
1184
|
)
|
1136
1185
|
return FlowRun.model_validate(response.json())
|
1186
|
+
|
1187
|
+
async def create_deployment_branch(
|
1188
|
+
self,
|
1189
|
+
deployment_id: UUID,
|
1190
|
+
branch: str,
|
1191
|
+
options: "DeploymentBranchingOptions | None" = None,
|
1192
|
+
overrides: "DeploymentUpdate | None" = None,
|
1193
|
+
) -> UUID:
|
1194
|
+
from prefect.client.schemas.actions import DeploymentBranch
|
1195
|
+
from prefect.client.schemas.objects import DeploymentBranchingOptions
|
1196
|
+
|
1197
|
+
response = await self.request(
|
1198
|
+
"POST",
|
1199
|
+
"/deployments/{id}/branch",
|
1200
|
+
path_params={"id": deployment_id},
|
1201
|
+
json=DeploymentBranch(
|
1202
|
+
branch=branch,
|
1203
|
+
options=options or DeploymentBranchingOptions(),
|
1204
|
+
overrides=overrides,
|
1205
|
+
).model_dump(mode="json", exclude_unset=True),
|
1206
|
+
)
|
1207
|
+
return UUID(response.json().get("id"))
|
@@ -253,13 +253,29 @@ class DeploymentCreate(ActionBaseModel):
|
|
253
253
|
infrastructure_document_id: Optional[UUID] = Field(default=None)
|
254
254
|
description: Optional[str] = Field(default=None)
|
255
255
|
path: Optional[str] = Field(default=None)
|
256
|
-
version: Optional[str] = Field(default=None)
|
257
256
|
entrypoint: Optional[str] = Field(default=None)
|
258
257
|
job_variables: dict[str, Any] = Field(
|
259
258
|
default_factory=dict,
|
260
259
|
description="Overrides to apply to flow run infrastructure at runtime.",
|
261
260
|
)
|
262
261
|
|
262
|
+
# Versionining
|
263
|
+
version: Optional[str] = Field(default=None)
|
264
|
+
version_info: Optional[objects.VersionInfo] = Field(
|
265
|
+
default=None, description="Version information for the deployment."
|
266
|
+
)
|
267
|
+
|
268
|
+
# Branching
|
269
|
+
branch: Optional[str] = Field(
|
270
|
+
default=None, description="The branch of the deployment."
|
271
|
+
)
|
272
|
+
base: Optional[UUID] = Field(
|
273
|
+
default=None, description="The base deployment of the deployment."
|
274
|
+
)
|
275
|
+
root: Optional[UUID] = Field(
|
276
|
+
default=None, description="The root deployment of the deployment."
|
277
|
+
)
|
278
|
+
|
263
279
|
def check_valid_configuration(self, base_job_template: dict[str, Any]) -> None:
|
264
280
|
"""Check that the combination of base_job_template defaults
|
265
281
|
and job_variables conforms to the specified schema.
|
@@ -289,6 +305,9 @@ class DeploymentUpdate(ActionBaseModel):
|
|
289
305
|
return remove_old_deployment_fields(values)
|
290
306
|
|
291
307
|
version: Optional[str] = Field(default=None)
|
308
|
+
version_info: Optional[objects.VersionInfo] = Field(
|
309
|
+
default=None, description="Version information for the deployment."
|
310
|
+
)
|
292
311
|
description: Optional[str] = Field(default=None)
|
293
312
|
parameters: Optional[dict[str, Any]] = Field(
|
294
313
|
default=None,
|
@@ -354,6 +373,25 @@ class DeploymentUpdate(ActionBaseModel):
|
|
354
373
|
jsonschema.validate(self.job_variables, variables_schema)
|
355
374
|
|
356
375
|
|
376
|
+
class DeploymentBranch(ActionBaseModel):
|
377
|
+
branch: str = Field(..., description="Name of the branch to create")
|
378
|
+
options: objects.DeploymentBranchingOptions = Field(
|
379
|
+
default_factory=objects.DeploymentBranchingOptions,
|
380
|
+
description="Configuration options for how the deployment should be branched",
|
381
|
+
)
|
382
|
+
overrides: Optional[DeploymentUpdate] = Field(
|
383
|
+
default=None,
|
384
|
+
description="Optional values to override in the branched deployment",
|
385
|
+
)
|
386
|
+
|
387
|
+
@field_validator("branch")
|
388
|
+
@classmethod
|
389
|
+
def validate_branch_length(cls, v: str) -> str:
|
390
|
+
if len(v.strip()) < 1:
|
391
|
+
raise ValueError("Branch name cannot be empty or contain only whitespace")
|
392
|
+
return v
|
393
|
+
|
394
|
+
|
357
395
|
class FlowRunUpdate(ActionBaseModel):
|
358
396
|
"""Data used by the Prefect REST API to update a flow run."""
|
359
397
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
import datetime
|
4
4
|
import warnings
|
5
5
|
from collections.abc import Callable, Mapping
|
6
|
+
from enum import Enum
|
6
7
|
from functools import partial
|
7
8
|
from typing import (
|
8
9
|
TYPE_CHECKING,
|
@@ -1107,6 +1108,19 @@ class VersionInfo(PrefectBaseModel, extra="allow"):
|
|
1107
1108
|
version: str = Field(default=..., description="The version of the deployment.")
|
1108
1109
|
|
1109
1110
|
|
1111
|
+
class BranchingScheduleHandling(str, Enum):
|
1112
|
+
KEEP = "keep"
|
1113
|
+
REMOVE = "remove"
|
1114
|
+
INACTIVE = "inactive"
|
1115
|
+
|
1116
|
+
|
1117
|
+
class DeploymentBranchingOptions(ObjectBaseModel):
|
1118
|
+
schedule_handling: BranchingScheduleHandling = Field(
|
1119
|
+
default=BranchingScheduleHandling.REMOVE,
|
1120
|
+
description="Whether to keep, remove, or set inactive the existing schedules when branching",
|
1121
|
+
)
|
1122
|
+
|
1123
|
+
|
1110
1124
|
class Deployment(ObjectBaseModel):
|
1111
1125
|
"""An ORM representation of deployment data."""
|
1112
1126
|
|
@@ -308,6 +308,8 @@ class FlowRunResponse(ObjectBaseModel):
|
|
308
308
|
|
309
309
|
class DeploymentResponse(ObjectBaseModel):
|
310
310
|
name: str = Field(default=..., description="The name of the deployment.")
|
311
|
+
|
312
|
+
# Versionining
|
311
313
|
version: Optional[str] = Field(
|
312
314
|
default=None, description="An optional version for the deployment."
|
313
315
|
)
|
@@ -317,6 +319,18 @@ class DeploymentResponse(ObjectBaseModel):
|
|
317
319
|
version_info: Optional[objects.VersionInfo] = Field(
|
318
320
|
default=None, description="A description of this version of the deployment."
|
319
321
|
)
|
322
|
+
|
323
|
+
# Branching
|
324
|
+
branch: Optional[str] = Field(
|
325
|
+
default=None, description="The branch of the deployment."
|
326
|
+
)
|
327
|
+
base: Optional[UUID] = Field(
|
328
|
+
default=None, description="The base deployment of the deployment."
|
329
|
+
)
|
330
|
+
root: Optional[UUID] = Field(
|
331
|
+
default=None, description="The root deployment of the deployment."
|
332
|
+
)
|
333
|
+
|
320
334
|
description: Optional[str] = Field(
|
321
335
|
default=None, description="A description for the deployment."
|
322
336
|
)
|
@@ -438,6 +452,15 @@ class DeploymentResponse(ObjectBaseModel):
|
|
438
452
|
"prefect.resource.name": self.name,
|
439
453
|
}
|
440
454
|
|
455
|
+
if self.branch:
|
456
|
+
labels["prefect.deployment.branch"] = self.branch
|
457
|
+
|
458
|
+
if self.base:
|
459
|
+
labels["prefect.deployment.base"] = f"prefect.deployment.{self.base}"
|
460
|
+
|
461
|
+
if self.root:
|
462
|
+
labels["prefect.deployment.root"] = f"prefect.deployment.{self.root}"
|
463
|
+
|
441
464
|
if self.version_id and self.version_info:
|
442
465
|
labels["prefect.deployment.version-id"] = str(self.version_id)
|
443
466
|
labels["prefect.deployment.version-type"] = self.version_info.type
|
prefect/context.py
CHANGED
@@ -6,6 +6,7 @@ These contexts should never be directly mutated by the user.
|
|
6
6
|
For more user-accessible information about the current run, see [`prefect.runtime`](../runtime/flow_run).
|
7
7
|
"""
|
8
8
|
|
9
|
+
import asyncio
|
9
10
|
import os
|
10
11
|
import sys
|
11
12
|
import warnings
|
@@ -294,7 +295,7 @@ class AsyncClientContext(ContextModel):
|
|
294
295
|
@asynccontextmanager
|
295
296
|
async def get_or_create(cls) -> AsyncGenerator[Self, None]:
|
296
297
|
ctx = cls.get()
|
297
|
-
if ctx:
|
298
|
+
if ctx and asyncio.get_running_loop() is ctx.client.loop:
|
298
299
|
yield ctx
|
299
300
|
else:
|
300
301
|
async with cls() as ctx:
|
prefect/server/api/flow_runs.py
CHANGED
@@ -48,7 +48,7 @@ from prefect.server.schemas.responses import (
|
|
48
48
|
)
|
49
49
|
from prefect.server.utilities.server import PrefectRouter
|
50
50
|
from prefect.types import DateTime
|
51
|
-
from prefect.types._datetime import now
|
51
|
+
from prefect.types._datetime import earliest_possible_datetime, now
|
52
52
|
from prefect.utilities import schema_tools
|
53
53
|
|
54
54
|
if TYPE_CHECKING:
|
@@ -353,7 +353,7 @@ async def read_flow_run_graph_v1(
|
|
353
353
|
async def read_flow_run_graph_v2(
|
354
354
|
flow_run_id: UUID = Path(..., description="The flow run id", alias="id"),
|
355
355
|
since: datetime.datetime = Query(
|
356
|
-
default=jsonable_encoder(
|
356
|
+
default=jsonable_encoder(earliest_possible_datetime()),
|
357
357
|
description="Only include runs that start or end after this time.",
|
358
358
|
),
|
359
359
|
db: PrefectDBInterface = Depends(provide_database_interface),
|
@@ -1,8 +1,9 @@
|
|
1
1
|
from datetime import datetime
|
2
2
|
from typing import TYPE_CHECKING, List, Optional
|
3
|
+
from uuid import UUID
|
3
4
|
|
4
5
|
import sqlalchemy as sa
|
5
|
-
from fastapi import Depends, HTTPException, status
|
6
|
+
from fastapi import Depends, HTTPException, Path, status
|
6
7
|
from pydantic import Field, model_serializer
|
7
8
|
|
8
9
|
import prefect.server.schemas as schemas
|
@@ -173,3 +174,22 @@ async def read_task_run_counts_by_state(
|
|
173
174
|
task_run_filter=task_runs,
|
174
175
|
deployment_filter=deployments,
|
175
176
|
)
|
177
|
+
|
178
|
+
|
179
|
+
@router.get("/{id}")
|
180
|
+
async def read_task_run_with_flow_run_name(
|
181
|
+
task_run_id: UUID = Path(..., description="The task run id", alias="id"),
|
182
|
+
db: PrefectDBInterface = Depends(provide_database_interface),
|
183
|
+
) -> schemas.ui.UITaskRun:
|
184
|
+
"""
|
185
|
+
Get a task run by id.
|
186
|
+
"""
|
187
|
+
async with db.session_context() as session:
|
188
|
+
task_run = await models.task_runs.read_task_run_with_flow_run_name(
|
189
|
+
session=session, task_run_id=task_run_id
|
190
|
+
)
|
191
|
+
|
192
|
+
if not task_run:
|
193
|
+
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Task not found")
|
194
|
+
|
195
|
+
return schemas.ui.UITaskRun.model_validate(task_run)
|
@@ -1,14 +1,14 @@
|
|
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=
|
4
|
+
prefect/_build_info.py,sha256=rkcwN5IlOT8GJmmraH2Q4ljo2fZu5atasia8KZm29DQ,180
|
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
|
8
8
|
prefect/artifacts.py,sha256=dMBUOAWnUamzjb5HSqwB5-GR2Qb-Gxee26XG5NDCUuw,22720
|
9
9
|
prefect/automations.py,sha256=ZzPxn2tINdlXTQo805V4rIlbXuNWxd7cdb3gTJxZIeY,12567
|
10
10
|
prefect/cache_policies.py,sha256=Kwdei4JjitNfx42OepKpDNxwPtEwRgUUAn_soxsnNzI,12699
|
11
|
-
prefect/context.py,sha256=
|
11
|
+
prefect/context.py,sha256=LYEOlz7ZkuSDj7TmrE4mByy3N3TquFkIE2hEy0WHW1Y,23798
|
12
12
|
prefect/engine.py,sha256=uB5JN4l045i5JTlRQNT1x7MwlSiGQ5Bop2Q6jHHOgxY,3699
|
13
13
|
prefect/exceptions.py,sha256=wZLQQMRB_DyiYkeEdIC5OKwbba5A94Dlnics-lrWI7A,11581
|
14
14
|
prefect/filesystems.py,sha256=v5YqGB4uXf9Ew2VuB9VCSkawvYMMVvEtZf7w1VmAmr8,18036
|
@@ -82,9 +82,9 @@ prefect/client/collections.py,sha256=t9XkVU_onQMZ871L21F1oZnAiPSQeeVfd_MuDEBS3iM
|
|
82
82
|
prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
|
83
83
|
prefect/client/subscriptions.py,sha256=b2gjoWjrTjshnv_s6zlPN3t0JIe2EKAdMqEzj3-kc6w,3879
|
84
84
|
prefect/client/utilities.py,sha256=UEJD6nwYg2mD8-GSmru-E2ofXaBlmSFZ2-8T_5rIK6c,3472
|
85
|
-
prefect/client/orchestration/__init__.py,sha256=
|
85
|
+
prefect/client/orchestration/__init__.py,sha256=1GHRA9-JWPBX6oSVNytQ1qL6epFeslRT2oBgZdFDJ68,60807
|
86
86
|
prefect/client/orchestration/base.py,sha256=HM6ryHBZSzuHoCFQM9u5qR5k1dN9Bbr_ah6z1UPNbZQ,1542
|
87
|
-
prefect/client/orchestration/routes.py,sha256=
|
87
|
+
prefect/client/orchestration/routes.py,sha256=FHG9xyop_eXp6wtg0Fp0G14J6lO8UVsdnhGY5qvnJ9k,4396
|
88
88
|
prefect/client/orchestration/_artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
89
|
prefect/client/orchestration/_artifacts/client.py,sha256=0GEM4rJWeedKR2xVgWQcX6DpLyn0zKFJF9nfRCQ4tpM,8855
|
90
90
|
prefect/client/orchestration/_automations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -98,7 +98,7 @@ prefect/client/orchestration/_blocks_types/client.py,sha256=alA4xD-yp3mycAbzMyRu
|
|
98
98
|
prefect/client/orchestration/_concurrency_limits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
99
|
prefect/client/orchestration/_concurrency_limits/client.py,sha256=r_oyY7hQbgyG1rntwe7WWcsraQHBKhk6MOPFUAHWiVc,23678
|
100
100
|
prefect/client/orchestration/_deployments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
|
-
prefect/client/orchestration/_deployments/client.py,sha256=
|
101
|
+
prefect/client/orchestration/_deployments/client.py,sha256=I2-RhU15lbEI1_JX_-WJErfp3lkvTCJHja-p4y8hzLA,42923
|
102
102
|
prefect/client/orchestration/_flow_runs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
103
|
prefect/client/orchestration/_flow_runs/client.py,sha256=fjh5J-LG8tsny7BGYEvynbuGuHDAudYHpx-PamL0GYQ,32220
|
104
104
|
prefect/client/orchestration/_flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -110,10 +110,10 @@ prefect/client/orchestration/_variables/client.py,sha256=wKBbZBLGgs5feDCil-xxKt3
|
|
110
110
|
prefect/client/orchestration/_work_pools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
111
111
|
prefect/client/orchestration/_work_pools/client.py,sha256=s1DfUQQBgB2sLiVVPhLNTlkueUDE6uFsh4mAzcSA1OE,19881
|
112
112
|
prefect/client/schemas/__init__.py,sha256=InZcDzdeWA2oaV0TlyvoMcyLcbi_aaqU1U9D6Gx-eoU,2747
|
113
|
-
prefect/client/schemas/actions.py,sha256=
|
113
|
+
prefect/client/schemas/actions.py,sha256=e4I21SQZt0zSIxdHgPox269eUUOPHzcv0xytgsmyKqY,34403
|
114
114
|
prefect/client/schemas/filters.py,sha256=zaiDkalrIpKjd38V4aP1GHlqD24KTPCZiKtPyX69ZWE,36607
|
115
|
-
prefect/client/schemas/objects.py,sha256=
|
116
|
-
prefect/client/schemas/responses.py,sha256=
|
115
|
+
prefect/client/schemas/objects.py,sha256=nyaodVdbZIl-p5e7BvF5olPoiHZkymXkn7nFkFnXqXA,59402
|
116
|
+
prefect/client/schemas/responses.py,sha256=Zdcx7jlIaluEa2uYIOE5mK1HsJvWPErRAcaWM20oY_I,17336
|
117
117
|
prefect/client/schemas/schedules.py,sha256=sxLFk0SmFY7X1Y9R9HyGDqOS3U5NINBWTciUU7vTTic,14836
|
118
118
|
prefect/client/schemas/sorting.py,sha256=L-2Mx-igZPtsUoRUguTcG3nIEstMEMPD97NwPM2Ox5s,2579
|
119
119
|
prefect/client/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -209,7 +209,7 @@ prefect/server/api/deployments.py,sha256=d-GAbVP3T0RVkkz6VN5nsQN7XU7fTjQg-vzYxuo
|
|
209
209
|
prefect/server/api/events.py,sha256=3-Qdt6ORxFv3nLoogQqvd72zEulJSoAmcqZto2OULuk,9907
|
210
210
|
prefect/server/api/flow_run_notification_policies.py,sha256=F8xNm6bgZTC3nFe9xCUJS4NlU9tLXZ8fShtJqmhT2m4,4828
|
211
211
|
prefect/server/api/flow_run_states.py,sha256=lIdxVE9CqLgtDCuH9bTaKkzHNL81FPrr11liPzvONrw,1661
|
212
|
-
prefect/server/api/flow_runs.py,sha256=
|
212
|
+
prefect/server/api/flow_runs.py,sha256=Lmb165fLbN4DioxjxgDYaAJ5Qxj771iRYaqn-hYq9KM,33744
|
213
213
|
prefect/server/api/flows.py,sha256=Bz0ISh-9oY0W1X3mqA631_8678pQ6tuRGMpSgWAfxOc,7018
|
214
214
|
prefect/server/api/logs.py,sha256=0z78tM2B5sRgJWYRWJn5lHhRoLtZB_OU3C-uALV8tOs,1571
|
215
215
|
prefect/server/api/middleware.py,sha256=WkyuyeJIfo9Q0GAIVU5gO6yIGNVwoHwuBah5AB5oUyw,2733
|
@@ -231,7 +231,7 @@ prefect/server/api/ui/__init__.py,sha256=TCXO4ZUZCqCbm2QoNvWNTErkzWiX2nSACuO-0Ti
|
|
231
231
|
prefect/server/api/ui/flow_runs.py,sha256=ALmUFY4WrJggN1ha0z-tqXeddG2GptswbPnB7iYixUM,4172
|
232
232
|
prefect/server/api/ui/flows.py,sha256=W4kwqOCJ_2vROmMCmemH2Mq3uWbWZyu5q5uTZPBdYwk,5902
|
233
233
|
prefect/server/api/ui/schemas.py,sha256=NVWA1RFnHW-MMU1s6WbNmp_S5mhbrN-_P41I4O2XtMg,2085
|
234
|
-
prefect/server/api/ui/task_runs.py,sha256=
|
234
|
+
prefect/server/api/ui/task_runs.py,sha256=6CMrHmY-ybJGHXz7YlVVP2ZTmvq7w-XA9GUHqCcw_7o,7319
|
235
235
|
prefect/settings/__init__.py,sha256=3jDLzExmq9HsRWo1kTSE16BO_3B3JlVsk5pR0s4PWEQ,2136
|
236
236
|
prefect/settings/base.py,sha256=HGukXOXOokfqmrVirgejNskKtf1x2QheZ-ldRakxPJA,9701
|
237
237
|
prefect/settings/constants.py,sha256=5NjVLG1Km9J9I-a6wrq-qmi_dTkPdwEk3IrY9bSxWvw,281
|
@@ -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.
|
320
|
-
prefect_client-3.3.
|
321
|
-
prefect_client-3.3.
|
322
|
-
prefect_client-3.3.
|
319
|
+
prefect_client-3.3.3.dist-info/METADATA,sha256=iOCVZHQAkXFFvPYp6Z-LNCAfswoTz_HQDvEfYcZ7i5E,7451
|
320
|
+
prefect_client-3.3.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
321
|
+
prefect_client-3.3.3.dist-info/licenses/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
|
322
|
+
prefect_client-3.3.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|