prefect-client 3.1.8__py3-none-any.whl → 3.1.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prefect/__init__.py +53 -59
- prefect/_internal/concurrency/services.py +6 -4
- prefect/_version.py +3 -3
- prefect/agent.py +3 -1
- prefect/artifacts.py +61 -74
- prefect/automations.py +27 -7
- prefect/client/cloud.py +0 -21
- prefect/client/schemas/objects.py +11 -0
- prefect/client/utilities.py +1 -15
- prefect/context.py +16 -27
- prefect/deployments/deployments.py +4 -2
- prefect/deployments/runner.py +3 -1
- prefect/engine.py +2 -1
- prefect/events/filters.py +2 -8
- prefect/exceptions.py +31 -41
- prefect/filesystems.py +2 -2
- prefect/flow_engine.py +2 -2
- prefect/flows.py +230 -186
- prefect/futures.py +42 -27
- prefect/infrastructure/__init__.py +3 -1
- prefect/infrastructure/base.py +3 -1
- prefect/locking/filesystem.py +8 -7
- prefect/locking/memory.py +5 -3
- prefect/locking/protocol.py +1 -1
- prefect/plugins.py +12 -10
- prefect/results.py +76 -19
- prefect/runner/runner.py +2 -3
- prefect/states.py +22 -10
- prefect/task_engine.py +1 -1
- prefect/telemetry/instrumentation.py +9 -10
- prefect/telemetry/processors.py +6 -6
- prefect/telemetry/services.py +68 -0
- prefect/utilities/engine.py +15 -1
- prefect/utilities/importtools.py +28 -21
- prefect/variables.py +2 -2
- prefect/workers/__init__.py +2 -0
- prefect/workers/base.py +6 -12
- prefect/workers/block.py +3 -1
- prefect/workers/cloud.py +3 -1
- {prefect_client-3.1.8.dist-info → prefect_client-3.1.10.dist-info}/METADATA +1 -1
- {prefect_client-3.1.8.dist-info → prefect_client-3.1.10.dist-info}/RECORD +44 -43
- {prefect_client-3.1.8.dist-info → prefect_client-3.1.10.dist-info}/LICENSE +0 -0
- {prefect_client-3.1.8.dist-info → prefect_client-3.1.10.dist-info}/WHEEL +0 -0
- {prefect_client-3.1.8.dist-info → prefect_client-3.1.10.dist-info}/top_level.txt +0 -0
@@ -7,9 +7,7 @@ from uuid import UUID
|
|
7
7
|
|
8
8
|
from opentelemetry import metrics, trace
|
9
9
|
from opentelemetry._logs import set_logger_provider
|
10
|
-
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
|
11
10
|
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
|
12
|
-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
13
11
|
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
|
14
12
|
from opentelemetry.sdk._logs.export import SimpleLogRecordProcessor
|
15
13
|
from opentelemetry.sdk.metrics import MeterProvider
|
@@ -19,6 +17,7 @@ from opentelemetry.sdk.trace import TracerProvider
|
|
19
17
|
|
20
18
|
from .logging import set_log_handler
|
21
19
|
from .processors import InFlightSpanProcessor
|
20
|
+
from .services import QueueingLogExporter, QueueingSpanExporter
|
22
21
|
|
23
22
|
if TYPE_CHECKING:
|
24
23
|
from opentelemetry.sdk._logs import LoggerProvider
|
@@ -83,11 +82,10 @@ def _setup_trace_provider(
|
|
83
82
|
resource: Resource, headers: dict[str, str], telemetry_url: str
|
84
83
|
) -> TracerProvider:
|
85
84
|
trace_provider = TracerProvider(resource=resource)
|
86
|
-
|
87
|
-
|
88
|
-
headers=headers,
|
85
|
+
queueing_span_exporter = QueueingSpanExporter.instance(
|
86
|
+
_url_join(telemetry_url, "v1/traces"), tuple(headers.items())
|
89
87
|
)
|
90
|
-
trace_provider.add_span_processor(InFlightSpanProcessor(
|
88
|
+
trace_provider.add_span_processor(InFlightSpanProcessor(queueing_span_exporter))
|
91
89
|
trace.set_tracer_provider(trace_provider)
|
92
90
|
|
93
91
|
return trace_provider
|
@@ -112,11 +110,12 @@ def _setup_logger_provider(
|
|
112
110
|
resource: Resource, headers: dict[str, str], telemetry_url: str
|
113
111
|
) -> LoggerProvider:
|
114
112
|
logger_provider = LoggerProvider(resource=resource)
|
115
|
-
|
116
|
-
|
117
|
-
|
113
|
+
queueing_log_exporter = QueueingLogExporter.instance(
|
114
|
+
_url_join(telemetry_url, "v1/logs"), tuple(headers.items())
|
115
|
+
)
|
116
|
+
logger_provider.add_log_record_processor(
|
117
|
+
SimpleLogRecordProcessor(queueing_log_exporter)
|
118
118
|
)
|
119
|
-
logger_provider.add_log_record_processor(SimpleLogRecordProcessor(otlp_exporter))
|
120
119
|
set_logger_provider(logger_provider)
|
121
120
|
log_handler = LoggingHandler(level=logging.NOTSET, logger_provider=logger_provider)
|
122
121
|
|
prefect/telemetry/processors.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import time
|
2
2
|
from threading import Event, Lock, Thread
|
3
|
-
from typing import TYPE_CHECKING,
|
3
|
+
from typing import TYPE_CHECKING, Optional
|
4
4
|
|
5
5
|
from opentelemetry.context import Context
|
6
6
|
from opentelemetry.sdk.trace import Span, SpanProcessor
|
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
|
|
13
13
|
class InFlightSpanProcessor(SpanProcessor):
|
14
14
|
def __init__(self, span_exporter: "SpanExporter"):
|
15
15
|
self.span_exporter = span_exporter
|
16
|
-
self._in_flight:
|
16
|
+
self._in_flight: dict[int, Span] = {}
|
17
17
|
self._lock = Lock()
|
18
18
|
self._stop_event = Event()
|
19
19
|
self._export_thread = Thread(target=self._export_periodically, daemon=True)
|
@@ -30,10 +30,10 @@ class InFlightSpanProcessor(SpanProcessor):
|
|
30
30
|
self.span_exporter.export(to_export)
|
31
31
|
|
32
32
|
def _readable_span(self, span: "Span") -> "ReadableSpan":
|
33
|
-
readable = span._readable_span()
|
34
|
-
readable._end_time = time.time_ns()
|
35
|
-
readable._attributes = {
|
36
|
-
**(readable._attributes or {}),
|
33
|
+
readable = span._readable_span() # pyright: ignore[reportPrivateUsage]
|
34
|
+
readable._end_time = time.time_ns() # pyright: ignore[reportPrivateUsage]
|
35
|
+
readable._attributes = { # pyright: ignore[reportPrivateUsage]
|
36
|
+
**(readable._attributes or {}), # pyright: ignore[reportPrivateUsage]
|
37
37
|
"prefect.in-flight": True,
|
38
38
|
}
|
39
39
|
return readable
|
@@ -0,0 +1,68 @@
|
|
1
|
+
from collections.abc import Sequence
|
2
|
+
from typing import Any, Protocol, TypeVar
|
3
|
+
|
4
|
+
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
|
5
|
+
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
6
|
+
from opentelemetry.sdk._logs import LogData
|
7
|
+
from opentelemetry.sdk._logs.export import LogExporter
|
8
|
+
from opentelemetry.sdk.trace import ReadableSpan
|
9
|
+
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
|
10
|
+
|
11
|
+
from prefect._internal.concurrency.services import BatchedQueueService
|
12
|
+
|
13
|
+
BatchItem = TypeVar("BatchItem", ReadableSpan, LogData)
|
14
|
+
T_contra = TypeVar("T_contra", contravariant=True)
|
15
|
+
|
16
|
+
|
17
|
+
class OTLPExporter(Protocol[T_contra]):
|
18
|
+
def export(self, __items: Sequence[T_contra]) -> Any:
|
19
|
+
...
|
20
|
+
|
21
|
+
def shutdown(self) -> Any:
|
22
|
+
...
|
23
|
+
|
24
|
+
|
25
|
+
class BaseQueueingExporter(BatchedQueueService[BatchItem]):
|
26
|
+
_max_batch_size = 512
|
27
|
+
_min_interval = 2.0
|
28
|
+
|
29
|
+
def __init__(self, otlp_exporter: OTLPExporter[BatchItem]) -> None:
|
30
|
+
super().__init__()
|
31
|
+
self._otlp_exporter = otlp_exporter
|
32
|
+
|
33
|
+
async def _handle_batch(self, items: list[BatchItem]) -> None:
|
34
|
+
try:
|
35
|
+
self._otlp_exporter.export(items)
|
36
|
+
except Exception as e:
|
37
|
+
self._logger.exception(f"Failed to export batch: {e}")
|
38
|
+
raise
|
39
|
+
|
40
|
+
def shutdown(self) -> None:
|
41
|
+
if self._stopped:
|
42
|
+
return
|
43
|
+
|
44
|
+
self.drain()
|
45
|
+
self._otlp_exporter.shutdown()
|
46
|
+
|
47
|
+
|
48
|
+
class QueueingSpanExporter(BaseQueueingExporter[ReadableSpan], SpanExporter):
|
49
|
+
_otlp_exporter: OTLPSpanExporter
|
50
|
+
|
51
|
+
def __init__(self, endpoint: str, headers: tuple[tuple[str, str]]):
|
52
|
+
super().__init__(OTLPSpanExporter(endpoint=endpoint, headers=dict(headers)))
|
53
|
+
|
54
|
+
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
|
55
|
+
for item in spans:
|
56
|
+
self.send(item)
|
57
|
+
return SpanExportResult.SUCCESS
|
58
|
+
|
59
|
+
|
60
|
+
class QueueingLogExporter(BaseQueueingExporter[LogData], LogExporter):
|
61
|
+
_otlp_exporter: OTLPLogExporter
|
62
|
+
|
63
|
+
def __init__(self, endpoint: str, headers: tuple[tuple[str, str]]) -> None:
|
64
|
+
super().__init__(OTLPLogExporter(endpoint=endpoint, headers=dict(headers)))
|
65
|
+
|
66
|
+
def export(self, batch: Sequence[LogData]) -> None:
|
67
|
+
for item in batch:
|
68
|
+
self.send(item)
|
prefect/utilities/engine.py
CHANGED
@@ -18,6 +18,7 @@ from typing import (
|
|
18
18
|
from uuid import UUID
|
19
19
|
|
20
20
|
import anyio
|
21
|
+
from opentelemetry import propagate, trace
|
21
22
|
from typing_extensions import TypeIs
|
22
23
|
|
23
24
|
import prefect
|
@@ -767,6 +768,19 @@ def resolve_to_final_result(expr: Any, context: dict[str, Any]) -> Any:
|
|
767
768
|
result = state.result(raise_on_failure=False, fetch=True)
|
768
769
|
if asyncio.iscoroutine(result):
|
769
770
|
result = run_coro_as_sync(result)
|
771
|
+
|
772
|
+
if state.state_details.traceparent:
|
773
|
+
parameter_context = propagate.extract(
|
774
|
+
{"traceparent": state.state_details.traceparent}
|
775
|
+
)
|
776
|
+
trace.get_current_span().add_link(
|
777
|
+
context=trace.get_current_span(parameter_context).get_span_context(),
|
778
|
+
attributes={
|
779
|
+
"prefect.input.name": context["parameter_name"],
|
780
|
+
"prefect.input.type": type(result).__name__,
|
781
|
+
},
|
782
|
+
)
|
783
|
+
|
770
784
|
return result
|
771
785
|
|
772
786
|
|
@@ -796,7 +810,7 @@ def resolve_inputs_sync(
|
|
796
810
|
return_data=return_data,
|
797
811
|
max_depth=max_depth,
|
798
812
|
remove_annotations=True,
|
799
|
-
context={},
|
813
|
+
context={"parameter_name": parameter},
|
800
814
|
)
|
801
815
|
except UpstreamTaskError:
|
802
816
|
raise
|
prefect/utilities/importtools.py
CHANGED
@@ -4,6 +4,7 @@ import importlib.util
|
|
4
4
|
import os
|
5
5
|
import runpy
|
6
6
|
import sys
|
7
|
+
import threading
|
7
8
|
import warnings
|
8
9
|
from collections.abc import Iterable, Sequence
|
9
10
|
from importlib.abc import Loader, MetaPathFinder
|
@@ -23,6 +24,16 @@ from prefect.utilities.filesystem import filename, is_local_path, tmpchdir
|
|
23
24
|
|
24
25
|
logger: Logger = get_logger(__name__)
|
25
26
|
|
27
|
+
_sys_path_lock: Optional[threading.Lock] = None
|
28
|
+
|
29
|
+
|
30
|
+
def _get_sys_path_lock() -> threading.Lock:
|
31
|
+
"""Get the global sys.path lock, initializing it if necessary."""
|
32
|
+
global _sys_path_lock
|
33
|
+
if _sys_path_lock is None:
|
34
|
+
_sys_path_lock = threading.Lock()
|
35
|
+
return _sys_path_lock
|
36
|
+
|
26
37
|
|
27
38
|
def to_qualified_name(obj: Any) -> str:
|
28
39
|
"""
|
@@ -135,32 +146,26 @@ def objects_from_script(
|
|
135
146
|
|
136
147
|
|
137
148
|
def load_script_as_module(path: str) -> ModuleType:
|
138
|
-
"""
|
139
|
-
Execute a script at the given path.
|
149
|
+
"""Execute a script at the given path.
|
140
150
|
|
141
|
-
Sets the module name to
|
151
|
+
Sets the module name to a unique identifier to ensure thread safety.
|
152
|
+
Uses a lock to safely modify sys.path for relative imports.
|
142
153
|
|
143
154
|
If an exception occurs during execution of the script, a
|
144
155
|
`prefect.exceptions.ScriptError` is created to wrap the exception and raised.
|
145
|
-
|
146
|
-
During the duration of this function call, `sys` is modified to support loading.
|
147
|
-
These changes are reverted after completion, but this function is not thread safe
|
148
|
-
and use of it in threaded contexts may result in undesirable behavior.
|
149
|
-
|
150
|
-
See https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
|
151
156
|
"""
|
152
|
-
# We will add the parent directory to search locations to support relative imports
|
153
|
-
# during execution of the script
|
154
157
|
if not path.endswith(".py"):
|
155
158
|
raise ValueError(f"The provided path does not point to a python file: {path!r}")
|
156
159
|
|
157
160
|
parent_path = str(Path(path).resolve().parent)
|
158
161
|
working_directory = os.getcwd()
|
159
162
|
|
163
|
+
# Generate unique module name for thread safety
|
164
|
+
module_name = f"__prefect_loader_{id(path)}__"
|
165
|
+
|
160
166
|
spec = importlib.util.spec_from_file_location(
|
161
|
-
|
167
|
+
module_name,
|
162
168
|
path,
|
163
|
-
# Support explicit relative imports i.e. `from .foo import bar`
|
164
169
|
submodule_search_locations=[parent_path, working_directory],
|
165
170
|
)
|
166
171
|
if TYPE_CHECKING:
|
@@ -168,19 +173,21 @@ def load_script_as_module(path: str) -> ModuleType:
|
|
168
173
|
assert spec.loader is not None
|
169
174
|
|
170
175
|
module = importlib.util.module_from_spec(spec)
|
171
|
-
sys.modules[
|
176
|
+
sys.modules[module_name] = module
|
172
177
|
|
173
|
-
# Support implicit relative imports i.e. `from foo import bar`
|
174
|
-
sys.path.insert(0, working_directory)
|
175
|
-
sys.path.insert(0, parent_path)
|
176
178
|
try:
|
177
|
-
|
179
|
+
with _get_sys_path_lock():
|
180
|
+
sys.path.insert(0, working_directory)
|
181
|
+
sys.path.insert(0, parent_path)
|
182
|
+
try:
|
183
|
+
spec.loader.exec_module(module)
|
184
|
+
finally:
|
185
|
+
sys.path.remove(parent_path)
|
186
|
+
sys.path.remove(working_directory)
|
178
187
|
except Exception as exc:
|
179
188
|
raise ScriptError(user_exc=exc, path=path) from exc
|
180
189
|
finally:
|
181
|
-
sys.modules.pop(
|
182
|
-
sys.path.remove(parent_path)
|
183
|
-
sys.path.remove(working_directory)
|
190
|
+
sys.modules.pop(module_name)
|
184
191
|
|
185
192
|
return module
|
186
193
|
|
prefect/variables.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Optional
|
1
|
+
from typing import Any, Callable, Optional
|
2
2
|
|
3
3
|
from pydantic import BaseModel, Field
|
4
4
|
|
@@ -256,4 +256,4 @@ class Variable(BaseModel):
|
|
256
256
|
return False
|
257
257
|
|
258
258
|
|
259
|
-
__getattr__ = getattr_migration(__name__)
|
259
|
+
__getattr__: Callable[[str], Any] = getattr_migration(__name__)
|
prefect/workers/__init__.py
CHANGED
prefect/workers/base.py
CHANGED
@@ -18,7 +18,6 @@ from typing_extensions import Literal
|
|
18
18
|
import prefect
|
19
19
|
from prefect._internal.schemas.validators import return_v_or_none
|
20
20
|
from prefect.client.base import ServerType
|
21
|
-
from prefect.client.cloud import CloudClient, get_cloud_client
|
22
21
|
from prefect.client.orchestration import PrefectClient, get_client
|
23
22
|
from prefect.client.schemas.actions import WorkPoolCreate, WorkPoolUpdate
|
24
23
|
from prefect.client.schemas.objects import (
|
@@ -441,7 +440,6 @@ class BaseWorker(abc.ABC):
|
|
441
440
|
self._exit_stack: AsyncExitStack = AsyncExitStack()
|
442
441
|
self._runs_task_group: Optional[anyio.abc.TaskGroup] = None
|
443
442
|
self._client: Optional[PrefectClient] = None
|
444
|
-
self._cloud_client: Optional[CloudClient] = None
|
445
443
|
self._last_polled_time: pendulum.DateTime = pendulum.now("utc")
|
446
444
|
self._limit = limit
|
447
445
|
self._limiter: Optional[anyio.CapacityLimiter] = None
|
@@ -637,11 +635,6 @@ class BaseWorker(abc.ABC):
|
|
637
635
|
await self._exit_stack.enter_async_context(self._client)
|
638
636
|
await self._exit_stack.enter_async_context(self._runs_task_group)
|
639
637
|
|
640
|
-
if self._client.server_type == ServerType.CLOUD:
|
641
|
-
self._cloud_client = await self._exit_stack.enter_async_context(
|
642
|
-
get_cloud_client()
|
643
|
-
)
|
644
|
-
|
645
638
|
self.is_setup = True
|
646
639
|
|
647
640
|
async def teardown(self, *exc_info):
|
@@ -989,6 +982,8 @@ class BaseWorker(abc.ABC):
|
|
989
982
|
try:
|
990
983
|
configuration = await self._get_configuration(flow_run)
|
991
984
|
submitted_event = self._emit_flow_run_submitted_event(configuration)
|
985
|
+
await self._give_worker_labels_to_flow_run(flow_run.id)
|
986
|
+
|
992
987
|
result = await self.run(
|
993
988
|
flow_run=flow_run,
|
994
989
|
task_status=task_status,
|
@@ -1002,9 +997,8 @@ class BaseWorker(abc.ABC):
|
|
1002
997
|
)
|
1003
998
|
# Mark the task as started to prevent agent crash
|
1004
999
|
task_status.started(exc)
|
1005
|
-
|
1006
|
-
|
1007
|
-
)
|
1000
|
+
message = f"Flow run could not be submitted to infrastructure:\n{exc!r}"
|
1001
|
+
await self._propose_crashed_state(flow_run, message)
|
1008
1002
|
else:
|
1009
1003
|
run_logger.exception(
|
1010
1004
|
f"An error occurred while monitoring flow run '{flow_run.id}'. "
|
@@ -1221,7 +1215,7 @@ class BaseWorker(abc.ABC):
|
|
1221
1215
|
"""
|
1222
1216
|
Give this worker's identifying labels to the specified flow run.
|
1223
1217
|
"""
|
1224
|
-
if self.
|
1218
|
+
if self._client:
|
1225
1219
|
labels: KeyValueLabels = {
|
1226
1220
|
"prefect.worker.name": self.name,
|
1227
1221
|
"prefect.worker.type": self.type,
|
@@ -1235,7 +1229,7 @@ class BaseWorker(abc.ABC):
|
|
1235
1229
|
}
|
1236
1230
|
)
|
1237
1231
|
|
1238
|
-
await self.
|
1232
|
+
await self._client.update_flow_run_labels(flow_run_id, labels)
|
1239
1233
|
|
1240
1234
|
async def __aenter__(self):
|
1241
1235
|
self._logger.debug("Entering worker context...")
|
prefect/workers/block.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
"""
|
2
2
|
2024-06-27: This surfaces an actionable error message for moved or removed objects in Prefect 3.0 upgrade.
|
3
3
|
"""
|
4
|
+
from typing import Any, Callable
|
5
|
+
|
4
6
|
from prefect._internal.compatibility.migration import getattr_migration
|
5
7
|
|
6
|
-
__getattr__ = getattr_migration(__name__)
|
8
|
+
__getattr__: Callable[[str], Any] = getattr_migration(__name__)
|
prefect/workers/cloud.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
"""
|
2
2
|
2024-06-27: This surfaces an actionable error message for moved or removed objects in Prefect 3.0 upgrade.
|
3
3
|
"""
|
4
|
+
from typing import Any, Callable
|
5
|
+
|
4
6
|
from prefect._internal.compatibility.migration import getattr_migration
|
5
7
|
|
6
|
-
__getattr__ = getattr_migration(__name__)
|
8
|
+
__getattr__: Callable[[str], Any] = getattr_migration(__name__)
|
@@ -1,31 +1,31 @@
|
|
1
1
|
prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
|
2
|
-
prefect/__init__.py,sha256=
|
3
|
-
prefect/_version.py,sha256=
|
4
|
-
prefect/agent.py,sha256=
|
5
|
-
prefect/artifacts.py,sha256=
|
6
|
-
prefect/automations.py,sha256=
|
2
|
+
prefect/__init__.py,sha256=FmdMSNpGH8Mrkn5X0mNZup8_SHdeB_aqEmS5taeOHAQ,3530
|
3
|
+
prefect/_version.py,sha256=bUcLcvgSrFk7uLI6vWR4M14nKrDGJAXv4mOuUqQtH0U,497
|
4
|
+
prefect/agent.py,sha256=qyyUMdiv5ndUIk-O8uwamESJGXXDQ_BmhKiLlm31ue0,286
|
5
|
+
prefect/artifacts.py,sha256=c_hMYTQoKFij8_tahtBeHzjYl7ztXAU90QP_6SuMw9A,12934
|
6
|
+
prefect/automations.py,sha256=QHS3Xh6wUKRvzxXt8cfWri6wXjX8EfEDDQN8a7cRw3c,6594
|
7
7
|
prefect/cache_policies.py,sha256=dlhYHMxhb2N5KdDMIAuw4q-PIsI8WH5k0LDDLqsRYMU,9903
|
8
|
-
prefect/context.py,sha256=
|
9
|
-
prefect/engine.py,sha256=
|
10
|
-
prefect/exceptions.py,sha256=
|
11
|
-
prefect/filesystems.py,sha256=
|
12
|
-
prefect/flow_engine.py,sha256=
|
8
|
+
prefect/context.py,sha256=OAEhyJz7kheIh6UEwPp3oLklYdM_UHibrdqeM3aCLqk,22325
|
9
|
+
prefect/engine.py,sha256=qkT6hQWfxQPmjAEECQx3wluiDiFMHf3h9DRG1ShwK7w,2031
|
10
|
+
prefect/exceptions.py,sha256=sbphPKQ4yOBUa9w0MsSFoDj_uC8Tlv9WHTjzO3cQKq8,11593
|
11
|
+
prefect/filesystems.py,sha256=cLBGbnW2NQqH4N70Y1i1QuCL3R7p-_r_d5CGaEAd4wg,17897
|
12
|
+
prefect/flow_engine.py,sha256=eb2N5lRdsZBWNIsaAs1pqdDhL5Vevq8ETxyn5LM4Mks,53812
|
13
13
|
prefect/flow_runs.py,sha256=-5udBBYdgdCBCjAMYvELbA1vmrjZ6oREXl-BZdZr6hc,16129
|
14
|
-
prefect/flows.py,sha256=
|
15
|
-
prefect/futures.py,sha256=
|
14
|
+
prefect/flows.py,sha256=Z1BdpmJotXJoqoDqcUtxiiPsGWvDfSBvk1XEEo6ykw4,94127
|
15
|
+
prefect/futures.py,sha256=ZtQiRJddO5-LNabUZiX_2wEJnRf6w7qZ8KRC5VUNOa0,16915
|
16
16
|
prefect/main.py,sha256=lFYvXkW32sMj4aVH97foApD3Ut3rZIwtO91xUQHo_6I,2355
|
17
|
-
prefect/plugins.py,sha256=
|
17
|
+
prefect/plugins.py,sha256=FPRLR2mWVBMuOnlzeiTD9krlHONZH2rtYLD753JQDNQ,2516
|
18
18
|
prefect/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
prefect/results.py,sha256=
|
19
|
+
prefect/results.py,sha256=okLkMlQcYUZHIl0XXMqVnWVLdcIYXe4b1wWX1T7Qa_8,50562
|
20
20
|
prefect/serializers.py,sha256=DiKLYdIA5VjCSrLyu0BSWcLLVRujqjvj8XoQ3HOuvoY,8968
|
21
|
-
prefect/states.py,sha256=
|
22
|
-
prefect/task_engine.py,sha256=
|
21
|
+
prefect/states.py,sha256=ZhJHLx8ax7dQNdaBl2eDT6VYGAU-68R1loht68qHGpc,25396
|
22
|
+
prefect/task_engine.py,sha256=1xM64s9OpDREnKPnU9HpwHgtbAE50uwdp2ZucmPUhCg,61226
|
23
23
|
prefect/task_runners.py,sha256=o7x_R18vMuum4GOcaQYVMK2CwyMgFguxYouKON5-_8c,15208
|
24
24
|
prefect/task_runs.py,sha256=jkaQOkRKOHS8fgHUijteriFpjMSKv4zldn1D8tZHkUI,8777
|
25
25
|
prefect/task_worker.py,sha256=PsjK25VS9JS_rAGY6rZU0lv4zgwIScl78V8Q4tXKZTs,17654
|
26
26
|
prefect/tasks.py,sha256=YgA67JQu3ZqCuRtWuBMli2fHuiYDaKinD1ZyDvd9OJM,69988
|
27
27
|
prefect/transactions.py,sha256=KLZbvOdCOqwpXrvzfycZbBlVOqrZhKhjG7JynGxkZY4,16686
|
28
|
-
prefect/variables.py,sha256=
|
28
|
+
prefect/variables.py,sha256=dCK3vX7TbkqXZhnNT_v7rcGh3ISRqoR6pJVLpoll3Js,8342
|
29
29
|
prefect/_experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
30
|
prefect/_experimental/lineage.py,sha256=Sz0Vtk5o68FzL6S-FgDELqmR1y8NgUdlKPn1u5_EAfA,6677
|
31
31
|
prefect/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -44,7 +44,7 @@ prefect/_internal/concurrency/cancellation.py,sha256=5pVR65GfVlzI4-h7R_uAPPgRFlw
|
|
44
44
|
prefect/_internal/concurrency/event_loop.py,sha256=N6SyBV0vaSF5HD4_JM8zL7oBGd2nMuEKkeSPnBZdHw4,2136
|
45
45
|
prefect/_internal/concurrency/inspection.py,sha256=xfyUNr5CoES8LFhybi2DmzHeW4RpTAbrGPiZOYMVLbQ,3464
|
46
46
|
prefect/_internal/concurrency/primitives.py,sha256=BQ0vObO7NUEq-IMbu5aTlfoZpWMbYwinzYP89GIyw68,2609
|
47
|
-
prefect/_internal/concurrency/services.py,sha256=
|
47
|
+
prefect/_internal/concurrency/services.py,sha256=zemUTygWxI3s2t4abQQKVqedGkuePhEqfESSe0BQ9Pw,12842
|
48
48
|
prefect/_internal/concurrency/threads.py,sha256=pe-ill3xaXejpCwWLkak9e1hQB5wEuwZ_-0aQDMEDBM,9153
|
49
49
|
prefect/_internal/concurrency/waiters.py,sha256=eHMfsoFiY9ZZFFTxfYMaW46WR6e5uB6OUUgnmmKFp_k,9224
|
50
50
|
prefect/_internal/pydantic/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
@@ -69,16 +69,16 @@ prefect/blocks/system.py,sha256=1Zcu4tzgY2x_F3rESb_gQsr_UCsyX55-O2eq9tqdce0,4702
|
|
69
69
|
prefect/blocks/webhook.py,sha256=F0u1WSO17Gda8qwr9gYaA84Nfc8Qkic6HhhJMYXRzug,2496
|
70
70
|
prefect/client/__init__.py,sha256=bDeOC_I8_la5dwCAfxKzYSTSAr2tlq5HpxJgVoCCdAs,675
|
71
71
|
prefect/client/base.py,sha256=KJg-RapWjjJp64I-k7s3AlN3rXZQRVz2tYOoAQ6qdTU,25547
|
72
|
-
prefect/client/cloud.py,sha256
|
72
|
+
prefect/client/cloud.py,sha256=nw3eVQXVCLD5DU8a-7rpBYHDnBD1v3B0GZ3tu9aNT70,6546
|
73
73
|
prefect/client/collections.py,sha256=OdgJrUssGtuD0tHIYhtBamEN5q4oA6Uv4ZX-QueW7LI,1074
|
74
74
|
prefect/client/constants.py,sha256=Z_GG8KF70vbbXxpJuqW5pLnwzujTVeHbcYYRikNmGH0,29
|
75
75
|
prefect/client/orchestration.py,sha256=DQBnvgFZ1jbUMfMKcoP6l5mn6lZlT_0FW2DFcP0ahds,159927
|
76
76
|
prefect/client/subscriptions.py,sha256=TZ7Omv8yeQQIkE6EmWYM78e8p7UdvdTDzcQe91dCU4U,3838
|
77
|
-
prefect/client/utilities.py,sha256=
|
77
|
+
prefect/client/utilities.py,sha256=oYer87Q79C6V4BXURRHbvsPFt0tiOSFR2lLBzjaNV6w,3463
|
78
78
|
prefect/client/schemas/__init__.py,sha256=uQqe3HkbW3gBvsIju0ee_ybJ8uuF2z_-DXLjS_O_37w,1063
|
79
79
|
prefect/client/schemas/actions.py,sha256=8Ioj7DsEzLBUYfRS5OLzt9kFFWU3HqetDmQLlE1Pk9U,29921
|
80
80
|
prefect/client/schemas/filters.py,sha256=MAy-km7qfJpz3Arf1kWk823oON175TH7gLp2iC4bflA,36452
|
81
|
-
prefect/client/schemas/objects.py,sha256=
|
81
|
+
prefect/client/schemas/objects.py,sha256=75VdF_YswjRIEZRAqLFhDIDz8RwMrVY-4EdtW4OZnfU,57731
|
82
82
|
prefect/client/schemas/responses.py,sha256=iTXTiUhdRL7PxNyJXMZ4ngT7C8SepT_z7g_pnUnVlzo,15629
|
83
83
|
prefect/client/schemas/schedules.py,sha256=ALK3Q-FveJdrTO8RryyAYJzOTGF8Wyp-Nbu6agpTooE,14466
|
84
84
|
prefect/client/schemas/sorting.py,sha256=L-2Mx-igZPtsUoRUguTcG3nIEstMEMPD97NwPM2Ox5s,2579
|
@@ -98,9 +98,9 @@ prefect/concurrency/v1/services.py,sha256=5IwRepJ4IMC0y-PmqXiDr5rR4wl3BuHbP6Tg6C
|
|
98
98
|
prefect/concurrency/v1/sync.py,sha256=qKE0YzNbrmYooTwP7pz4m1BUz61THCUIF45_PE5IyYg,2375
|
99
99
|
prefect/deployments/__init__.py,sha256=_wb7NxDKhq11z9MjYsPckmT3o6MRhGLRgCV9TmvYtew,1002
|
100
100
|
prefect/deployments/base.py,sha256=bwlkSN6pWC2fLj4-48AtPY1jTmVB0GADdyK9ToFLAiE,16534
|
101
|
-
prefect/deployments/deployments.py,sha256=
|
101
|
+
prefect/deployments/deployments.py,sha256=K3Rgnpjxo_T8I8LMwlq24OKqZiZBTE8-YnPg-YGUStM,171
|
102
102
|
prefect/deployments/flow_runs.py,sha256=YZ8Q1napmOyuGr4XKLWU1VcyZv1Gr48njOX_Qi8pkj4,6843
|
103
|
-
prefect/deployments/runner.py,sha256=
|
103
|
+
prefect/deployments/runner.py,sha256=2hO3PruCz65bKK__hnaHoZNlJJCuOSBzM34k_mDbdF4,42443
|
104
104
|
prefect/deployments/schedules.py,sha256=qFzYxPUYz8mYRPxG4dOXZC-6tdVprbK5Zw1fwBf42xI,1910
|
105
105
|
prefect/deployments/steps/__init__.py,sha256=Dlz9VqMRyG1Gal8dj8vfGpPr0LyQhZdvcciozkK8WoY,206
|
106
106
|
prefect/deployments/steps/core.py,sha256=8V_xrYfpF_LqX_uIvWMV_Fnx_EcO9ryVNZaL6peQdao,6882
|
@@ -111,7 +111,7 @@ prefect/docker/docker_image.py,sha256=Y84_ooCYA9NGl6FElJul9-FaW3teT-eia2SiNtZ1LG
|
|
111
111
|
prefect/events/__init__.py,sha256=GtKl2bE--pJduTxelH2xy7SadlLJmmis8WR1EYixhuA,2094
|
112
112
|
prefect/events/actions.py,sha256=A7jS8bo4zWGnrt3QfSoQs0uYC1xfKXio3IfU0XtTb5s,9129
|
113
113
|
prefect/events/clients.py,sha256=pxhq8o2N4pJUMvtg5lkzqP8_v4-HSybRgKkqxetOpRM,24681
|
114
|
-
prefect/events/filters.py,sha256=
|
114
|
+
prefect/events/filters.py,sha256=G1bkshD8mtVijIiHZ1lhyB_spGNXn1glZ8FmXCQIeuE,8056
|
115
115
|
prefect/events/related.py,sha256=A-1SVYwHtsxaDurRepnTsYbTWRBJSbtL5O_KffLaTwU,6534
|
116
116
|
prefect/events/utilities.py,sha256=gaJEC5mMK9XsCt8wbWzuFhZTRyYYmfnMoR-S4s79zg4,2648
|
117
117
|
prefect/events/worker.py,sha256=gW590T7xWIz-I3xatQea0ORvsXfsmyWquYeRpuZS96E,4549
|
@@ -122,8 +122,8 @@ prefect/events/schemas/automations.py,sha256=LHpZvI-5triEtgYsdEjADfEtgkpZgqzt3rs
|
|
122
122
|
prefect/events/schemas/deployment_triggers.py,sha256=OX9g9eHe0nqJ3PtVEzqs9Ub2LaOHMA4afLZSvSukKGU,3191
|
123
123
|
prefect/events/schemas/events.py,sha256=dfM5R6v5ZBM0Eb5FyDaw2gT9566LMFJpZmdPTdEewpc,9043
|
124
124
|
prefect/events/schemas/labelling.py,sha256=bU-XYaHXhI2MEBIHngth96R9D02m8HHb85KNcHZ_1Gc,3073
|
125
|
-
prefect/infrastructure/__init__.py,sha256=
|
126
|
-
prefect/infrastructure/base.py,sha256=
|
125
|
+
prefect/infrastructure/__init__.py,sha256=qyyUMdiv5ndUIk-O8uwamESJGXXDQ_BmhKiLlm31ue0,286
|
126
|
+
prefect/infrastructure/base.py,sha256=qyyUMdiv5ndUIk-O8uwamESJGXXDQ_BmhKiLlm31ue0,286
|
127
127
|
prefect/infrastructure/provisioners/__init__.py,sha256=wn240gHrQbien2g_g2A8Ujb2iFyjmDgMHLQ7tgQngf4,1706
|
128
128
|
prefect/infrastructure/provisioners/cloud_run.py,sha256=K6_8AO_fZRfuI0hGx_EwvlRkiNPcmR5yD9P8B-QSjuc,17745
|
129
129
|
prefect/infrastructure/provisioners/container_instance.py,sha256=ZaiaAOywMjbhZI6emzqsDQh-xBePajzjjMT_JY8lwNA,41281
|
@@ -133,9 +133,9 @@ prefect/input/__init__.py,sha256=Ue2h-YhYP71nEtsVJaslqMwO6C0ckjhjTYwwEgp-E3g,701
|
|
133
133
|
prefect/input/actions.py,sha256=IGdWjVcesnRjLmPCzB4ZM7FkRWXDKCku6yhE-7p0vKk,3777
|
134
134
|
prefect/input/run_input.py,sha256=2wG-0L3N0spwh61Z3xI0PM8AAjHEIQZcDN703Er_gLo,18728
|
135
135
|
prefect/locking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
136
|
-
prefect/locking/filesystem.py,sha256=
|
137
|
-
prefect/locking/memory.py,sha256=
|
138
|
-
prefect/locking/protocol.py,sha256=
|
136
|
+
prefect/locking/filesystem.py,sha256=zhNwdKroi2kLR6Cut6CMT-rWmFwtTtzuGKSwGH_Iw0s,8084
|
137
|
+
prefect/locking/memory.py,sha256=mFUgV750ywEL7aVQuxFjg9gxbjVU4esBQn7bGQYzeMY,7548
|
138
|
+
prefect/locking/protocol.py,sha256=RsfvlaHTTEJ0YvYWSqFGoZuT2w4FPPxyQlHqjoyNGuE,4240
|
139
139
|
prefect/logging/__init__.py,sha256=zx9f5_dWrR4DbcTOFBpNGOPoCZ1QcPFudr7zxb2XRpA,148
|
140
140
|
prefect/logging/configuration.py,sha256=t7EJrk7Jr4QMxopH3TP6gRN8kMg_LFBsIoiwXCihrso,3353
|
141
141
|
prefect/logging/filters.py,sha256=9keHLN4-cpnsWcii1qU0RITNi9-m7pOhkJ_t0MtCM4k,1117
|
@@ -150,7 +150,7 @@ prefect/records/filesystem.py,sha256=X-h7r5deiHH5IaaDk4ugOCmR5ZKnJeU2cLgp0AkMt0E
|
|
150
150
|
prefect/records/memory.py,sha256=YdzQvEfb-CX0sKxAZK5TaNxVvAlyYlZse9qdoer6Xbk,6447
|
151
151
|
prefect/records/result_store.py,sha256=3ZUFNHCCv_qBQhmIFdvlK_GMnPZcFacaI9dVdDKWdwA,2431
|
152
152
|
prefect/runner/__init__.py,sha256=7U-vAOXFkzMfRz1q8Uv6Otsvc0OrPYLLP44srwkJ_8s,89
|
153
|
-
prefect/runner/runner.py,sha256=
|
153
|
+
prefect/runner/runner.py,sha256=nk9rxxtAbejrUvnyST7VKk8AxcWU4weMVbuR6zQxp0E,54012
|
154
154
|
prefect/runner/server.py,sha256=UXlxugqV1SiC49aTnwCDsEdQS6AXyfstaJWukuOBVO8,11171
|
155
155
|
prefect/runner/storage.py,sha256=EkCnutcpcs4X0II81xBtZFGIwqfwRe00W9r6LLfZkQU,24754
|
156
156
|
prefect/runner/submit.py,sha256=DGhBUUIg-N3z788ZqaCcqpIPkvCzQtZeLqjKtQNV1IA,8137
|
@@ -198,10 +198,11 @@ prefect/settings/models/server/tasks.py,sha256=YzfRTcmiYnD_INezR_29rvO0M_YbAqT1b
|
|
198
198
|
prefect/settings/models/server/ui.py,sha256=6cTSC2RQsS4c2HpB1Se6qRms4RMEKSsaI40T2CTkobg,1780
|
199
199
|
prefect/telemetry/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
200
200
|
prefect/telemetry/bootstrap.py,sha256=b64UpBBo0Yo7Z8b_V9NQLAlFrpIuJoTs5opYTuB-R20,1550
|
201
|
-
prefect/telemetry/instrumentation.py,sha256=
|
201
|
+
prefect/telemetry/instrumentation.py,sha256=G8kDiN2N4l7A8on-BHbYnh8uqH71zuGr3t2JntxRv0Q,4183
|
202
202
|
prefect/telemetry/logging.py,sha256=yn5D4D2GGRrAv0y8wlHPN7PZDmQucGjQT_YauK9M9Yo,727
|
203
|
-
prefect/telemetry/processors.py,sha256=
|
203
|
+
prefect/telemetry/processors.py,sha256=jw6j6LviOVxw3IBJe7cSjsxFk0zzY43jUmy6C9pcfCE,2272
|
204
204
|
prefect/telemetry/run_telemetry.py,sha256=FfvcUJK6Sqcagp6rJ3vx4twCAkyYJYBhtNUUzjM0D7A,8135
|
205
|
+
prefect/telemetry/services.py,sha256=ek5KMSgCjUeIoNl9INPCfKkwlUwyFYp_dUiZd_rD0_8,2270
|
205
206
|
prefect/types/__init__.py,sha256=s-l0r8UiDs7GCEstOPMzbb9PvvF_0F4G8OcVy3_50Yk,4700
|
206
207
|
prefect/types/entrypoint.py,sha256=2FF03-wLPgtnqR_bKJDB2BsXXINPdu8ptY9ZYEZnXg8,328
|
207
208
|
prefect/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -214,10 +215,10 @@ prefect/utilities/compat.py,sha256=nnPA3lf2f4Y-l645tYFFNmj5NDPaYvjqa9pbGKZ3WKE,5
|
|
214
215
|
prefect/utilities/context.py,sha256=23SDMgdt07SjmB1qShiykHfGgiv55NBzdbMXM3fE9CI,1447
|
215
216
|
prefect/utilities/dispatch.py,sha256=ykPKflsgO4zIayzQK-ILmZe34ogRdfbDjm3I2r-fNME,6318
|
216
217
|
prefect/utilities/dockerutils.py,sha256=bzokKf8mFS0YcKl6Wg9rZUZAC8dIzH6TdRIwylraVrw,20851
|
217
|
-
prefect/utilities/engine.py,sha256=
|
218
|
+
prefect/utilities/engine.py,sha256=nqK6FnqQmsomrRTpo3JddPNWc470flwFEpzL8sA7VWA,29604
|
218
219
|
prefect/utilities/filesystem.py,sha256=W449XqS33-sIJs6FIc_McctzqhULK7uZDvW396E_YsA,5710
|
219
220
|
prefect/utilities/hashing.py,sha256=7jRy26s46IJAFRmVnCnoK9ek9N4p_UfXxQQvu2tW6dM,2589
|
220
|
-
prefect/utilities/importtools.py,sha256=
|
221
|
+
prefect/utilities/importtools.py,sha256=6_Y9yuqt2aoSSTtTj6QYMVjFIxzY14uONtGbWF8JRy4,20223
|
221
222
|
prefect/utilities/math.py,sha256=UPIdJMP13lCU3o0Yz98o4VDw3LTkkrsOAsvAdA3Xifc,2954
|
222
223
|
prefect/utilities/names.py,sha256=S_cmhrXybZpwcm9lwibDV2t9dRjPCvYYcJrGommaUt4,1743
|
223
224
|
prefect/utilities/processutils.py,sha256=YFvO8a_L3AeuJbwXcGR1pkBjEjvw7OPw2GCjT0AEkU0,16267
|
@@ -233,15 +234,15 @@ prefect/utilities/visualization.py,sha256=4MyQKLb00A1QZCvSrbPEbyqUNByQ_EkJ6wXKFC
|
|
233
234
|
prefect/utilities/schema_tools/__init__.py,sha256=At3rMHd2g_Em2P3_dFQlFgqR_EpBwrYtU2N2OJd0pDE,345
|
234
235
|
prefect/utilities/schema_tools/hydration.py,sha256=4yQMynZSloPFp0tlA7g8udWqE2TjZgfm19Y4R4F0s04,9415
|
235
236
|
prefect/utilities/schema_tools/validation.py,sha256=Wix26IVR-ZJ32-6MX2pHhrwm3reB-Q4iB6_phn85OKE,10743
|
236
|
-
prefect/workers/__init__.py,sha256=
|
237
|
-
prefect/workers/base.py,sha256=
|
238
|
-
prefect/workers/block.py,sha256=
|
239
|
-
prefect/workers/cloud.py,sha256=
|
237
|
+
prefect/workers/__init__.py,sha256=EaM1F0RZ-XIJaGeTKLsXDnfOPHzVWk5bk0_c4BVS44M,64
|
238
|
+
prefect/workers/base.py,sha256=nBv4pc51J1JRoSkgxvBDfQb4wIEN67D7cBVwT-jYHdI,49198
|
239
|
+
prefect/workers/block.py,sha256=qyyUMdiv5ndUIk-O8uwamESJGXXDQ_BmhKiLlm31ue0,286
|
240
|
+
prefect/workers/cloud.py,sha256=qyyUMdiv5ndUIk-O8uwamESJGXXDQ_BmhKiLlm31ue0,286
|
240
241
|
prefect/workers/process.py,sha256=tcJ3fbiraLCfpVGpv8dOHwMSfVzeD_kyguUOvPuIz6I,19796
|
241
242
|
prefect/workers/server.py,sha256=lgh2FfSuaNU7b6HPxSFm8JtKvAvHsZGkiOo4y4tW1Cw,2022
|
242
243
|
prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
|
243
|
-
prefect_client-3.1.
|
244
|
-
prefect_client-3.1.
|
245
|
-
prefect_client-3.1.
|
246
|
-
prefect_client-3.1.
|
247
|
-
prefect_client-3.1.
|
244
|
+
prefect_client-3.1.10.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
|
245
|
+
prefect_client-3.1.10.dist-info/METADATA,sha256=BbPdwx1OPrG1CxVh7OJNeBzquSMMMfOCBk4e-zilqhs,7287
|
246
|
+
prefect_client-3.1.10.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
247
|
+
prefect_client-3.1.10.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
|
248
|
+
prefect_client-3.1.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|