prefect-client 2.20.2__py3-none-any.whl → 3.0.0__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 +74 -110
- prefect/_internal/compatibility/deprecated.py +6 -115
- prefect/_internal/compatibility/experimental.py +4 -79
- prefect/_internal/compatibility/migration.py +166 -0
- prefect/_internal/concurrency/__init__.py +2 -2
- prefect/_internal/concurrency/api.py +1 -35
- prefect/_internal/concurrency/calls.py +0 -6
- prefect/_internal/concurrency/cancellation.py +0 -3
- prefect/_internal/concurrency/event_loop.py +0 -20
- prefect/_internal/concurrency/inspection.py +3 -3
- prefect/_internal/concurrency/primitives.py +1 -0
- prefect/_internal/concurrency/services.py +23 -0
- prefect/_internal/concurrency/threads.py +35 -0
- prefect/_internal/concurrency/waiters.py +0 -28
- prefect/_internal/integrations.py +7 -0
- prefect/_internal/pydantic/__init__.py +0 -45
- prefect/_internal/pydantic/annotations/pendulum.py +2 -2
- prefect/_internal/pydantic/v1_schema.py +21 -22
- prefect/_internal/pydantic/v2_schema.py +0 -2
- prefect/_internal/pydantic/v2_validated_func.py +18 -23
- prefect/_internal/pytz.py +1 -1
- prefect/_internal/retries.py +61 -0
- prefect/_internal/schemas/bases.py +45 -177
- prefect/_internal/schemas/fields.py +1 -43
- prefect/_internal/schemas/validators.py +47 -233
- prefect/agent.py +3 -695
- prefect/artifacts.py +173 -14
- prefect/automations.py +39 -4
- prefect/blocks/abstract.py +1 -1
- prefect/blocks/core.py +423 -164
- prefect/blocks/fields.py +2 -57
- prefect/blocks/notifications.py +43 -28
- prefect/blocks/redis.py +168 -0
- prefect/blocks/system.py +67 -20
- prefect/blocks/webhook.py +2 -9
- prefect/cache_policies.py +239 -0
- prefect/client/__init__.py +4 -0
- prefect/client/base.py +33 -27
- prefect/client/cloud.py +65 -20
- prefect/client/collections.py +1 -1
- prefect/client/orchestration.py +667 -440
- prefect/client/schemas/actions.py +115 -100
- prefect/client/schemas/filters.py +46 -52
- prefect/client/schemas/objects.py +228 -178
- prefect/client/schemas/responses.py +18 -36
- prefect/client/schemas/schedules.py +55 -36
- prefect/client/schemas/sorting.py +2 -0
- prefect/client/subscriptions.py +8 -7
- prefect/client/types/flexible_schedule_list.py +11 -0
- prefect/client/utilities.py +9 -6
- prefect/concurrency/asyncio.py +60 -11
- prefect/concurrency/context.py +24 -0
- prefect/concurrency/events.py +2 -2
- prefect/concurrency/services.py +46 -16
- prefect/concurrency/sync.py +51 -7
- prefect/concurrency/v1/asyncio.py +143 -0
- prefect/concurrency/v1/context.py +27 -0
- prefect/concurrency/v1/events.py +61 -0
- prefect/concurrency/v1/services.py +116 -0
- prefect/concurrency/v1/sync.py +92 -0
- prefect/context.py +246 -149
- prefect/deployments/__init__.py +33 -18
- prefect/deployments/base.py +10 -15
- prefect/deployments/deployments.py +2 -1048
- prefect/deployments/flow_runs.py +178 -0
- prefect/deployments/runner.py +72 -173
- prefect/deployments/schedules.py +31 -25
- prefect/deployments/steps/__init__.py +0 -1
- prefect/deployments/steps/core.py +7 -0
- prefect/deployments/steps/pull.py +15 -21
- prefect/deployments/steps/utility.py +2 -1
- prefect/docker/__init__.py +20 -0
- prefect/docker/docker_image.py +82 -0
- prefect/engine.py +15 -2466
- prefect/events/actions.py +17 -23
- prefect/events/cli/automations.py +20 -7
- prefect/events/clients.py +142 -80
- prefect/events/filters.py +14 -18
- prefect/events/related.py +74 -75
- prefect/events/schemas/__init__.py +0 -5
- prefect/events/schemas/automations.py +55 -46
- prefect/events/schemas/deployment_triggers.py +7 -197
- prefect/events/schemas/events.py +46 -65
- prefect/events/schemas/labelling.py +10 -14
- prefect/events/utilities.py +4 -5
- prefect/events/worker.py +23 -8
- prefect/exceptions.py +15 -0
- prefect/filesystems.py +30 -529
- prefect/flow_engine.py +827 -0
- prefect/flow_runs.py +379 -7
- prefect/flows.py +470 -360
- prefect/futures.py +382 -331
- prefect/infrastructure/__init__.py +5 -26
- prefect/infrastructure/base.py +3 -320
- prefect/infrastructure/provisioners/__init__.py +5 -3
- prefect/infrastructure/provisioners/cloud_run.py +13 -8
- prefect/infrastructure/provisioners/container_instance.py +14 -9
- prefect/infrastructure/provisioners/ecs.py +10 -8
- prefect/infrastructure/provisioners/modal.py +8 -5
- prefect/input/__init__.py +4 -0
- prefect/input/actions.py +2 -4
- prefect/input/run_input.py +9 -9
- prefect/logging/formatters.py +2 -4
- prefect/logging/handlers.py +9 -14
- prefect/logging/loggers.py +5 -5
- prefect/main.py +72 -0
- prefect/plugins.py +2 -64
- prefect/profiles.toml +16 -2
- prefect/records/__init__.py +1 -0
- prefect/records/base.py +223 -0
- prefect/records/filesystem.py +207 -0
- prefect/records/memory.py +178 -0
- prefect/records/result_store.py +64 -0
- prefect/results.py +577 -504
- prefect/runner/runner.py +124 -51
- prefect/runner/server.py +32 -34
- prefect/runner/storage.py +3 -12
- prefect/runner/submit.py +2 -10
- prefect/runner/utils.py +2 -2
- prefect/runtime/__init__.py +1 -0
- prefect/runtime/deployment.py +1 -0
- prefect/runtime/flow_run.py +40 -5
- prefect/runtime/task_run.py +1 -0
- prefect/serializers.py +28 -39
- prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
- prefect/settings.py +209 -332
- prefect/states.py +160 -63
- prefect/task_engine.py +1478 -57
- prefect/task_runners.py +383 -287
- prefect/task_runs.py +240 -0
- prefect/task_worker.py +463 -0
- prefect/tasks.py +684 -374
- prefect/transactions.py +410 -0
- prefect/types/__init__.py +72 -86
- prefect/types/entrypoint.py +13 -0
- prefect/utilities/annotations.py +4 -3
- prefect/utilities/asyncutils.py +227 -148
- prefect/utilities/callables.py +138 -48
- prefect/utilities/collections.py +134 -86
- prefect/utilities/dispatch.py +27 -14
- prefect/utilities/dockerutils.py +11 -4
- prefect/utilities/engine.py +186 -32
- prefect/utilities/filesystem.py +4 -5
- prefect/utilities/importtools.py +26 -27
- prefect/utilities/pydantic.py +128 -38
- prefect/utilities/schema_tools/hydration.py +18 -1
- prefect/utilities/schema_tools/validation.py +30 -0
- prefect/utilities/services.py +35 -9
- prefect/utilities/templating.py +12 -2
- prefect/utilities/timeout.py +20 -5
- prefect/utilities/urls.py +195 -0
- prefect/utilities/visualization.py +1 -0
- prefect/variables.py +78 -59
- prefect/workers/__init__.py +0 -1
- prefect/workers/base.py +237 -244
- prefect/workers/block.py +5 -226
- prefect/workers/cloud.py +6 -0
- prefect/workers/process.py +265 -12
- prefect/workers/server.py +29 -11
- {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/METADATA +30 -26
- prefect_client-3.0.0.dist-info/RECORD +201 -0
- {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/WHEEL +1 -1
- prefect/_internal/pydantic/_base_model.py +0 -51
- prefect/_internal/pydantic/_compat.py +0 -82
- prefect/_internal/pydantic/_flags.py +0 -20
- prefect/_internal/pydantic/_types.py +0 -8
- prefect/_internal/pydantic/utilities/config_dict.py +0 -72
- prefect/_internal/pydantic/utilities/field_validator.py +0 -150
- prefect/_internal/pydantic/utilities/model_construct.py +0 -56
- prefect/_internal/pydantic/utilities/model_copy.py +0 -55
- prefect/_internal/pydantic/utilities/model_dump.py +0 -136
- prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
- prefect/_internal/pydantic/utilities/model_fields.py +0 -50
- prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
- prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
- prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
- prefect/_internal/pydantic/utilities/model_validate.py +0 -75
- prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
- prefect/_internal/pydantic/utilities/model_validator.py +0 -87
- prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
- prefect/_vendor/fastapi/__init__.py +0 -25
- prefect/_vendor/fastapi/applications.py +0 -946
- prefect/_vendor/fastapi/background.py +0 -3
- prefect/_vendor/fastapi/concurrency.py +0 -44
- prefect/_vendor/fastapi/datastructures.py +0 -58
- prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
- prefect/_vendor/fastapi/dependencies/models.py +0 -64
- prefect/_vendor/fastapi/dependencies/utils.py +0 -877
- prefect/_vendor/fastapi/encoders.py +0 -177
- prefect/_vendor/fastapi/exception_handlers.py +0 -40
- prefect/_vendor/fastapi/exceptions.py +0 -46
- prefect/_vendor/fastapi/logger.py +0 -3
- prefect/_vendor/fastapi/middleware/__init__.py +0 -1
- prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
- prefect/_vendor/fastapi/middleware/cors.py +0 -3
- prefect/_vendor/fastapi/middleware/gzip.py +0 -3
- prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
- prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
- prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
- prefect/_vendor/fastapi/openapi/__init__.py +0 -0
- prefect/_vendor/fastapi/openapi/constants.py +0 -2
- prefect/_vendor/fastapi/openapi/docs.py +0 -203
- prefect/_vendor/fastapi/openapi/models.py +0 -480
- prefect/_vendor/fastapi/openapi/utils.py +0 -485
- prefect/_vendor/fastapi/param_functions.py +0 -340
- prefect/_vendor/fastapi/params.py +0 -453
- prefect/_vendor/fastapi/py.typed +0 -0
- prefect/_vendor/fastapi/requests.py +0 -4
- prefect/_vendor/fastapi/responses.py +0 -40
- prefect/_vendor/fastapi/routing.py +0 -1331
- prefect/_vendor/fastapi/security/__init__.py +0 -15
- prefect/_vendor/fastapi/security/api_key.py +0 -98
- prefect/_vendor/fastapi/security/base.py +0 -6
- prefect/_vendor/fastapi/security/http.py +0 -172
- prefect/_vendor/fastapi/security/oauth2.py +0 -227
- prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
- prefect/_vendor/fastapi/security/utils.py +0 -10
- prefect/_vendor/fastapi/staticfiles.py +0 -1
- prefect/_vendor/fastapi/templating.py +0 -3
- prefect/_vendor/fastapi/testclient.py +0 -1
- prefect/_vendor/fastapi/types.py +0 -3
- prefect/_vendor/fastapi/utils.py +0 -235
- prefect/_vendor/fastapi/websockets.py +0 -7
- prefect/_vendor/starlette/__init__.py +0 -1
- prefect/_vendor/starlette/_compat.py +0 -28
- prefect/_vendor/starlette/_exception_handler.py +0 -80
- prefect/_vendor/starlette/_utils.py +0 -88
- prefect/_vendor/starlette/applications.py +0 -261
- prefect/_vendor/starlette/authentication.py +0 -159
- prefect/_vendor/starlette/background.py +0 -43
- prefect/_vendor/starlette/concurrency.py +0 -59
- prefect/_vendor/starlette/config.py +0 -151
- prefect/_vendor/starlette/convertors.py +0 -87
- prefect/_vendor/starlette/datastructures.py +0 -707
- prefect/_vendor/starlette/endpoints.py +0 -130
- prefect/_vendor/starlette/exceptions.py +0 -60
- prefect/_vendor/starlette/formparsers.py +0 -276
- prefect/_vendor/starlette/middleware/__init__.py +0 -17
- prefect/_vendor/starlette/middleware/authentication.py +0 -52
- prefect/_vendor/starlette/middleware/base.py +0 -220
- prefect/_vendor/starlette/middleware/cors.py +0 -176
- prefect/_vendor/starlette/middleware/errors.py +0 -265
- prefect/_vendor/starlette/middleware/exceptions.py +0 -74
- prefect/_vendor/starlette/middleware/gzip.py +0 -113
- prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
- prefect/_vendor/starlette/middleware/sessions.py +0 -82
- prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
- prefect/_vendor/starlette/middleware/wsgi.py +0 -147
- prefect/_vendor/starlette/py.typed +0 -0
- prefect/_vendor/starlette/requests.py +0 -328
- prefect/_vendor/starlette/responses.py +0 -347
- prefect/_vendor/starlette/routing.py +0 -933
- prefect/_vendor/starlette/schemas.py +0 -154
- prefect/_vendor/starlette/staticfiles.py +0 -248
- prefect/_vendor/starlette/status.py +0 -199
- prefect/_vendor/starlette/templating.py +0 -231
- prefect/_vendor/starlette/testclient.py +0 -804
- prefect/_vendor/starlette/types.py +0 -30
- prefect/_vendor/starlette/websockets.py +0 -193
- prefect/blocks/kubernetes.py +0 -119
- prefect/deprecated/__init__.py +0 -0
- prefect/deprecated/data_documents.py +0 -350
- prefect/deprecated/packaging/__init__.py +0 -12
- prefect/deprecated/packaging/base.py +0 -96
- prefect/deprecated/packaging/docker.py +0 -146
- prefect/deprecated/packaging/file.py +0 -92
- prefect/deprecated/packaging/orion.py +0 -80
- prefect/deprecated/packaging/serializers.py +0 -171
- prefect/events/instrument.py +0 -135
- prefect/infrastructure/container.py +0 -824
- prefect/infrastructure/kubernetes.py +0 -920
- prefect/infrastructure/process.py +0 -289
- prefect/manifests.py +0 -20
- prefect/new_flow_engine.py +0 -449
- prefect/new_task_engine.py +0 -423
- prefect/pydantic/__init__.py +0 -76
- prefect/pydantic/main.py +0 -39
- prefect/software/__init__.py +0 -2
- prefect/software/base.py +0 -50
- prefect/software/conda.py +0 -199
- prefect/software/pip.py +0 -122
- prefect/software/python.py +0 -52
- prefect/task_server.py +0 -322
- prefect_client-2.20.2.dist-info/RECORD +0 -294
- /prefect/{_internal/pydantic/utilities → client/types}/__init__.py +0 -0
- /prefect/{_vendor → concurrency/v1}/__init__.py +0 -0
- {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/LICENSE +0 -0
- {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/top_level.txt +0 -0
@@ -1,44 +0,0 @@
|
|
1
|
-
from contextlib import AsyncExitStack as AsyncExitStack # noqa
|
2
|
-
from contextlib import asynccontextmanager as asynccontextmanager
|
3
|
-
from typing import AsyncGenerator, ContextManager, TypeVar
|
4
|
-
|
5
|
-
import anyio
|
6
|
-
from anyio import CapacityLimiter
|
7
|
-
from prefect._vendor.starlette.concurrency import (
|
8
|
-
iterate_in_threadpool as iterate_in_threadpool,
|
9
|
-
) # noqa
|
10
|
-
from prefect._vendor.starlette.concurrency import (
|
11
|
-
run_in_threadpool as run_in_threadpool,
|
12
|
-
) # noqa
|
13
|
-
from prefect._vendor.starlette.concurrency import ( # noqa
|
14
|
-
run_until_first_complete as run_until_first_complete,
|
15
|
-
)
|
16
|
-
|
17
|
-
_T = TypeVar("_T")
|
18
|
-
|
19
|
-
|
20
|
-
@asynccontextmanager
|
21
|
-
async def contextmanager_in_threadpool(
|
22
|
-
cm: ContextManager[_T],
|
23
|
-
) -> AsyncGenerator[_T, None]:
|
24
|
-
# blocking __exit__ from running waiting on a free thread
|
25
|
-
# can create race conditions/deadlocks if the context manager itself
|
26
|
-
# has it's own internal pool (e.g. a database connection pool)
|
27
|
-
# to avoid this we let __exit__ run without a capacity limit
|
28
|
-
# since we're creating a new limiter for each call, any non-zero limit
|
29
|
-
# works (1 is arbitrary)
|
30
|
-
exit_limiter = CapacityLimiter(1)
|
31
|
-
try:
|
32
|
-
yield await run_in_threadpool(cm.__enter__)
|
33
|
-
except Exception as e:
|
34
|
-
ok = bool(
|
35
|
-
await anyio.to_thread.run_sync(
|
36
|
-
cm.__exit__, type(e), e, None, limiter=exit_limiter
|
37
|
-
)
|
38
|
-
)
|
39
|
-
if not ok:
|
40
|
-
raise e
|
41
|
-
else:
|
42
|
-
await anyio.to_thread.run_sync(
|
43
|
-
cm.__exit__, None, None, None, limiter=exit_limiter
|
44
|
-
)
|
@@ -1,58 +0,0 @@
|
|
1
|
-
from typing import Any, Callable, Dict, Iterable, Type, TypeVar
|
2
|
-
|
3
|
-
from prefect._vendor.starlette.datastructures import URL as URL # noqa: F401
|
4
|
-
from prefect._vendor.starlette.datastructures import Address as Address # noqa: F401
|
5
|
-
from prefect._vendor.starlette.datastructures import FormData as FormData # noqa: F401
|
6
|
-
from prefect._vendor.starlette.datastructures import Headers as Headers # noqa: F401
|
7
|
-
from prefect._vendor.starlette.datastructures import (
|
8
|
-
QueryParams as QueryParams, # noqa: F401
|
9
|
-
)
|
10
|
-
from prefect._vendor.starlette.datastructures import State as State # noqa: F401
|
11
|
-
from prefect._vendor.starlette.datastructures import UploadFile as StarletteUploadFile
|
12
|
-
|
13
|
-
|
14
|
-
class UploadFile(StarletteUploadFile):
|
15
|
-
@classmethod
|
16
|
-
def __get_validators__(cls: Type["UploadFile"]) -> Iterable[Callable[..., Any]]:
|
17
|
-
yield cls.validate
|
18
|
-
|
19
|
-
@classmethod
|
20
|
-
def validate(cls: Type["UploadFile"], v: Any) -> Any:
|
21
|
-
if not isinstance(v, StarletteUploadFile):
|
22
|
-
raise ValueError(f"Expected UploadFile, received: {type(v)}")
|
23
|
-
return v
|
24
|
-
|
25
|
-
@classmethod
|
26
|
-
def __modify_schema__(cls, field_schema: Dict[str, Any]) -> None:
|
27
|
-
field_schema.update({"type": "string", "format": "binary"})
|
28
|
-
|
29
|
-
|
30
|
-
class DefaultPlaceholder:
|
31
|
-
"""
|
32
|
-
You shouldn't use this class directly.
|
33
|
-
|
34
|
-
It's used internally to recognize when a default value has been overwritten, even
|
35
|
-
if the overridden default value was truthy.
|
36
|
-
"""
|
37
|
-
|
38
|
-
def __init__(self, value: Any):
|
39
|
-
self.value = value
|
40
|
-
|
41
|
-
def __bool__(self) -> bool:
|
42
|
-
return bool(self.value)
|
43
|
-
|
44
|
-
def __eq__(self, o: object) -> bool:
|
45
|
-
return isinstance(o, DefaultPlaceholder) and o.value == self.value
|
46
|
-
|
47
|
-
|
48
|
-
DefaultType = TypeVar("DefaultType")
|
49
|
-
|
50
|
-
|
51
|
-
def Default(value: DefaultType) -> DefaultType:
|
52
|
-
"""
|
53
|
-
You shouldn't use this function directly.
|
54
|
-
|
55
|
-
It's used internally to recognize when a default value has been overwritten, even
|
56
|
-
if the overridden default value was truthy.
|
57
|
-
"""
|
58
|
-
return DefaultPlaceholder(value) # type: ignore
|
File without changes
|
@@ -1,64 +0,0 @@
|
|
1
|
-
from typing import Any, Callable, List, Optional, Sequence
|
2
|
-
|
3
|
-
from prefect._vendor.fastapi.security.base import SecurityBase
|
4
|
-
|
5
|
-
from prefect._internal.pydantic import HAS_PYDANTIC_V2
|
6
|
-
|
7
|
-
if HAS_PYDANTIC_V2:
|
8
|
-
from pydantic.v1.fields import ModelField
|
9
|
-
else:
|
10
|
-
from pydantic.fields import ModelField
|
11
|
-
|
12
|
-
|
13
|
-
class SecurityRequirement:
|
14
|
-
def __init__(
|
15
|
-
self, security_scheme: SecurityBase, scopes: Optional[Sequence[str]] = None
|
16
|
-
):
|
17
|
-
self.security_scheme = security_scheme
|
18
|
-
self.scopes = scopes
|
19
|
-
|
20
|
-
|
21
|
-
class Dependant:
|
22
|
-
def __init__(
|
23
|
-
self,
|
24
|
-
*,
|
25
|
-
path_params: Optional[List[ModelField]] = None,
|
26
|
-
query_params: Optional[List[ModelField]] = None,
|
27
|
-
header_params: Optional[List[ModelField]] = None,
|
28
|
-
cookie_params: Optional[List[ModelField]] = None,
|
29
|
-
body_params: Optional[List[ModelField]] = None,
|
30
|
-
dependencies: Optional[List["Dependant"]] = None,
|
31
|
-
security_schemes: Optional[List[SecurityRequirement]] = None,
|
32
|
-
name: Optional[str] = None,
|
33
|
-
call: Optional[Callable[..., Any]] = None,
|
34
|
-
request_param_name: Optional[str] = None,
|
35
|
-
websocket_param_name: Optional[str] = None,
|
36
|
-
http_connection_param_name: Optional[str] = None,
|
37
|
-
response_param_name: Optional[str] = None,
|
38
|
-
background_tasks_param_name: Optional[str] = None,
|
39
|
-
security_scopes_param_name: Optional[str] = None,
|
40
|
-
security_scopes: Optional[List[str]] = None,
|
41
|
-
use_cache: bool = True,
|
42
|
-
path: Optional[str] = None,
|
43
|
-
) -> None:
|
44
|
-
self.path_params = path_params or []
|
45
|
-
self.query_params = query_params or []
|
46
|
-
self.header_params = header_params or []
|
47
|
-
self.cookie_params = cookie_params or []
|
48
|
-
self.body_params = body_params or []
|
49
|
-
self.dependencies = dependencies or []
|
50
|
-
self.security_requirements = security_schemes or []
|
51
|
-
self.request_param_name = request_param_name
|
52
|
-
self.websocket_param_name = websocket_param_name
|
53
|
-
self.http_connection_param_name = http_connection_param_name
|
54
|
-
self.response_param_name = response_param_name
|
55
|
-
self.background_tasks_param_name = background_tasks_param_name
|
56
|
-
self.security_scopes = security_scopes
|
57
|
-
self.security_scopes_param_name = security_scopes_param_name
|
58
|
-
self.name = name
|
59
|
-
self.call = call
|
60
|
-
self.use_cache = use_cache
|
61
|
-
# Store the path to be able to re-generate a dependable from it in overrides
|
62
|
-
self.path = path
|
63
|
-
# Save the cache key at creation to optimize performance
|
64
|
-
self.cache_key = (self.call, tuple(sorted(set(self.security_scopes or []))))
|