prefect-client 2.19.4__tar.gz → 2.19.6__tar.gz
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-client-2.19.4/src/prefect_client.egg-info → prefect-client-2.19.6}/PKG-INFO +1 -1
- {prefect-client-2.19.4 → prefect-client-2.19.6}/requirements.txt +1 -1
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/actions.py +1 -1
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/concurrency/asyncio.py +14 -4
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/concurrency/services.py +29 -22
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/concurrency/sync.py +3 -5
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/flows.py +33 -8
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/container.py +6 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/storage.py +79 -6
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/importtools.py +29 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6/src/prefect_client.egg-info}/PKG-INFO +1 -1
- {prefect-client-2.19.4 → prefect-client-2.19.6}/LICENSE +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/MANIFEST.in +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/README.md +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/requirements-client.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/requirements-dev.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/setup.cfg +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/setup.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/.prefectignore +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/_logging.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/experimental.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/_base_model.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/_compat.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/_flags.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/_types.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/annotations/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/annotations/pendulum.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/config_dict.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/field_validator.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_construct.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_copy.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_dump.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_dump_json.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_fields.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_fields_set.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_json_schema.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_rebuild.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_validate.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_validate_json.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/model_validator.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/type_adapter.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pytz.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/applications.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/background.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/concurrency.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/datastructures.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/models.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/encoders.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/exception_handlers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/exceptions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/logger.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/cors.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/gzip.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/trustedhost.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/wsgi.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/constants.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/docs.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/models.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/param_functions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/params.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/requests.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/responses.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/routing.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/api_key.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/http.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/oauth2.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/security/utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/staticfiles.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/templating.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/testclient.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/types.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/websockets.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/_compat.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/_exception_handler.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/_utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/applications.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/authentication.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/background.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/concurrency.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/config.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/convertors.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/datastructures.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/endpoints.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/exceptions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/formparsers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/authentication.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/cors.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/errors.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/exceptions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/gzip.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/httpsredirect.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/sessions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/trustedhost.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/middleware/wsgi.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/requests.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/responses.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/routing.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/schemas.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/staticfiles.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/status.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/templating.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/testclient.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/types.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/starlette/websockets.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_version.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/agent.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/artifacts.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/automations.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/abstract.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/core.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/fields.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/kubernetes.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/notifications.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/system.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/blocks/webhook.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/cloud.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/collections.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/constants.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/orchestration.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/filters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/objects.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/responses.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/subscriptions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/client/utilities.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/concurrency/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/concurrency/events.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/context.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/deployments.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/runner.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/schedules.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/steps/core.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/data_documents.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/docker.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/file.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/orion.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/deprecated/packaging/serializers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/engine.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/actions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/cli/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/cli/automations.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/clients.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/filters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/instrument.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/related.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/schemas/automations.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/schemas/events.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/utilities.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/events/worker.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/exceptions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/filesystems.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/flow_runs.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/futures.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/kubernetes.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/process.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/input/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/input/actions.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/input/run_input.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/configuration.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/filters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/formatters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/handlers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/highlighters.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/loggers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/logging/logging.yml +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/manifests.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/new_flow_engine.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/new_task_engine.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/plugins.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/profiles.toml +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/py.typed +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/pydantic/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/pydantic/main.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/results.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/runner.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/server.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/submit.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runner/utils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runtime/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runtime/deployment.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runtime/flow_run.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/runtime/task_run.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/serializers.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/settings.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/software/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/software/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/software/conda.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/software/pip.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/software/python.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/states.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/task_engine.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/task_runners.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/task_server.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/tasks.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/types/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/annotations.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/callables.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/collections.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/compat.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/context.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/dispatch.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/engine.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/filesystem.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/hashing.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/math.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/names.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/processutils.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/pydantic.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/services.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/slugify.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/templating.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/text.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/timeout.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/utilities/visualization.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/variables.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/__init__.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/base.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/block.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/process.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/server.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/workers/utilities.py +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect_client.egg-info/SOURCES.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect_client.egg-info/dependency_links.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect_client.egg-info/requires.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect_client.egg-info/top_level.txt +0 -0
- {prefect-client-2.19.4 → prefect-client-2.19.6}/versioneer.py +0 -0
@@ -778,7 +778,7 @@ class GlobalConcurrencyLimitUpdate(ActionBaseModel):
|
|
778
778
|
|
779
779
|
name: Optional[str] = Field(None)
|
780
780
|
limit: Optional[NonNegativeInteger] = Field(None)
|
781
|
-
active: Optional[
|
781
|
+
active: Optional[bool] = Field(None)
|
782
782
|
active_slots: Optional[NonNegativeInteger] = Field(None)
|
783
783
|
slot_decay_per_second: Optional[NonNegativeFloat] = Field(None)
|
784
784
|
|
@@ -13,7 +13,6 @@ except ImportError:
|
|
13
13
|
|
14
14
|
from prefect import get_client
|
15
15
|
from prefect.client.schemas.responses import MinimalConcurrencyLimitResponse
|
16
|
-
from prefect.utilities.timeout import timeout_async
|
17
16
|
|
18
17
|
from .events import (
|
19
18
|
_emit_concurrency_acquisition_events,
|
@@ -26,6 +25,10 @@ class ConcurrencySlotAcquisitionError(Exception):
|
|
26
25
|
"""Raised when an unhandlable occurs while acquiring concurrency slots."""
|
27
26
|
|
28
27
|
|
28
|
+
class AcquireConcurrencySlotTimeoutError(TimeoutError):
|
29
|
+
"""Raised when acquiring a concurrency slot times out."""
|
30
|
+
|
31
|
+
|
29
32
|
@asynccontextmanager
|
30
33
|
async def concurrency(
|
31
34
|
names: Union[str, List[str]],
|
@@ -58,8 +61,9 @@ async def concurrency(
|
|
58
61
|
```
|
59
62
|
"""
|
60
63
|
names = names if isinstance(names, list) else [names]
|
61
|
-
|
62
|
-
|
64
|
+
limits = await _acquire_concurrency_slots(
|
65
|
+
names, occupy, timeout_seconds=timeout_seconds
|
66
|
+
)
|
63
67
|
acquisition_time = pendulum.now("UTC")
|
64
68
|
emitted_events = _emit_concurrency_acquisition_events(limits, occupy)
|
65
69
|
|
@@ -91,12 +95,18 @@ async def _acquire_concurrency_slots(
|
|
91
95
|
names: List[str],
|
92
96
|
slots: int,
|
93
97
|
mode: Union[Literal["concurrency"], Literal["rate_limit"]] = "concurrency",
|
98
|
+
timeout_seconds: Optional[float] = None,
|
94
99
|
) -> List[MinimalConcurrencyLimitResponse]:
|
95
100
|
service = ConcurrencySlotAcquisitionService.instance(frozenset(names))
|
96
|
-
future = service.send((slots, mode))
|
101
|
+
future = service.send((slots, mode, timeout_seconds))
|
97
102
|
response_or_exception = await asyncio.wrap_future(future)
|
98
103
|
|
99
104
|
if isinstance(response_or_exception, Exception):
|
105
|
+
if isinstance(response_or_exception, TimeoutError):
|
106
|
+
raise AcquireConcurrencySlotTimeoutError(
|
107
|
+
f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
|
108
|
+
) from response_or_exception
|
109
|
+
|
100
110
|
raise ConcurrencySlotAcquisitionError(
|
101
111
|
f"Unable to acquire concurrency slots on {names!r}"
|
102
112
|
) from response_or_exception
|
@@ -3,6 +3,7 @@ import concurrent.futures
|
|
3
3
|
from contextlib import asynccontextmanager
|
4
4
|
from typing import (
|
5
5
|
FrozenSet,
|
6
|
+
Optional,
|
6
7
|
Tuple,
|
7
8
|
)
|
8
9
|
|
@@ -13,6 +14,7 @@ from prefect import get_client
|
|
13
14
|
from prefect._internal.concurrency import logger
|
14
15
|
from prefect._internal.concurrency.services import QueueService
|
15
16
|
from prefect.client.orchestration import PrefectClient
|
17
|
+
from prefect.utilities.timeout import timeout_async
|
16
18
|
|
17
19
|
|
18
20
|
class ConcurrencySlotAcquisitionService(QueueService):
|
@@ -27,10 +29,12 @@ class ConcurrencySlotAcquisitionService(QueueService):
|
|
27
29
|
self._client = client
|
28
30
|
yield
|
29
31
|
|
30
|
-
async def _handle(
|
31
|
-
|
32
|
+
async def _handle(
|
33
|
+
self, item: Tuple[int, str, Optional[float], concurrent.futures.Future]
|
34
|
+
):
|
35
|
+
occupy, mode, timeout_seconds, future = item
|
32
36
|
try:
|
33
|
-
response = await self.acquire_slots(occupy, mode)
|
37
|
+
response = await self.acquire_slots(occupy, mode, timeout_seconds)
|
34
38
|
except Exception as exc:
|
35
39
|
# If the request to the increment endpoint fails in a non-standard
|
36
40
|
# way, we need to set the future's result so that the caller can
|
@@ -40,25 +44,28 @@ class ConcurrencySlotAcquisitionService(QueueService):
|
|
40
44
|
else:
|
41
45
|
future.set_result(response)
|
42
46
|
|
43
|
-
async def acquire_slots(
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
47
|
+
async def acquire_slots(
|
48
|
+
self, slots: int, mode: str, timeout_seconds: Optional[float] = None
|
49
|
+
):
|
50
|
+
with timeout_async(timeout_seconds):
|
51
|
+
while True:
|
52
|
+
try:
|
53
|
+
response = await self._client.increment_concurrency_slots(
|
54
|
+
names=self.concurrency_limit_names, slots=slots, mode=mode
|
55
|
+
)
|
56
|
+
except Exception as exc:
|
57
|
+
if (
|
58
|
+
isinstance(exc, httpx.HTTPStatusError)
|
59
|
+
and exc.response.status_code == status.HTTP_423_LOCKED
|
60
|
+
):
|
61
|
+
retry_after = float(exc.response.headers["Retry-After"])
|
62
|
+
await asyncio.sleep(retry_after)
|
63
|
+
else:
|
64
|
+
raise exc
|
56
65
|
else:
|
57
|
-
|
58
|
-
else:
|
59
|
-
return response
|
66
|
+
return response
|
60
67
|
|
61
|
-
def send(self, item: Tuple[int, str]):
|
68
|
+
def send(self, item: Tuple[int, str, Optional[float]]) -> concurrent.futures.Future:
|
62
69
|
with self._lock:
|
63
70
|
if self._stopped:
|
64
71
|
raise RuntimeError("Cannot put items in a stopped service instance.")
|
@@ -66,7 +73,7 @@ class ConcurrencySlotAcquisitionService(QueueService):
|
|
66
73
|
logger.debug("Service %r enqueuing item %r", self, item)
|
67
74
|
future: concurrent.futures.Future = concurrent.futures.Future()
|
68
75
|
|
69
|
-
occupy, mode = item
|
70
|
-
self._queue.put_nowait((occupy, mode, future))
|
76
|
+
occupy, mode, timeout_seconds = item
|
77
|
+
self._queue.put_nowait((occupy, mode, timeout_seconds, future))
|
71
78
|
|
72
79
|
return future
|
@@ -12,7 +12,6 @@ except ImportError:
|
|
12
12
|
from prefect._internal.concurrency.api import create_call, from_sync
|
13
13
|
from prefect._internal.concurrency.event_loop import get_running_loop
|
14
14
|
from prefect.client.schemas.responses import MinimalConcurrencyLimitResponse
|
15
|
-
from prefect.utilities.timeout import timeout
|
16
15
|
|
17
16
|
from .asyncio import (
|
18
17
|
_acquire_concurrency_slots,
|
@@ -57,10 +56,9 @@ def concurrency(
|
|
57
56
|
"""
|
58
57
|
names = names if isinstance(names, list) else [names]
|
59
58
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
)
|
59
|
+
limits: List[MinimalConcurrencyLimitResponse] = _call_async_function_from_sync(
|
60
|
+
_acquire_concurrency_slots, names, occupy, timeout_seconds=timeout_seconds
|
61
|
+
)
|
64
62
|
acquisition_time = pendulum.now("UTC")
|
65
63
|
emitted_events = _emit_concurrency_acquisition_events(limits, occupy)
|
66
64
|
|
@@ -83,8 +83,9 @@ from prefect.logging import get_logger
|
|
83
83
|
from prefect.results import ResultSerializer, ResultStorage
|
84
84
|
from prefect.runner.storage import (
|
85
85
|
BlockStorageAdapter,
|
86
|
+
LocalStorage,
|
86
87
|
RunnerStorage,
|
87
|
-
|
88
|
+
create_storage_from_source,
|
88
89
|
)
|
89
90
|
from prefect.settings import (
|
90
91
|
PREFECT_DEFAULT_WORK_POOL_NAME,
|
@@ -106,7 +107,7 @@ from prefect.utilities.callables import (
|
|
106
107
|
)
|
107
108
|
from prefect.utilities.collections import listrepr
|
108
109
|
from prefect.utilities.hashing import file_hash
|
109
|
-
from prefect.utilities.importtools import import_object
|
110
|
+
from prefect.utilities.importtools import import_object, safe_load_namespace
|
110
111
|
from prefect.utilities.visualization import (
|
111
112
|
FlowVisualizationError,
|
112
113
|
GraphvizExecutableNotFoundError,
|
@@ -910,7 +911,7 @@ class Flow(Generic[P, R]):
|
|
910
911
|
```
|
911
912
|
"""
|
912
913
|
if isinstance(source, str):
|
913
|
-
storage =
|
914
|
+
storage = create_storage_from_source(source)
|
914
915
|
elif isinstance(source, RunnerStorage):
|
915
916
|
storage = source
|
916
917
|
elif hasattr(source, "get_directory"):
|
@@ -920,9 +921,11 @@ class Flow(Generic[P, R]):
|
|
920
921
|
f"Unsupported source type {type(source).__name__!r}. Please provide a"
|
921
922
|
" URL to remote storage or a storage object."
|
922
923
|
)
|
924
|
+
|
923
925
|
with tempfile.TemporaryDirectory() as tmpdir:
|
924
|
-
storage
|
925
|
-
|
926
|
+
if not isinstance(storage, LocalStorage):
|
927
|
+
storage.set_base_path(Path(tmpdir))
|
928
|
+
await storage.pull_code()
|
926
929
|
|
927
930
|
full_entrypoint = str(storage.destination / entrypoint)
|
928
931
|
flow: "Flow" = await from_async.wait_for_call_in_new_thread(
|
@@ -1850,11 +1853,33 @@ def load_flow_argument_from_entrypoint(
|
|
1850
1853
|
):
|
1851
1854
|
for keyword in decorator.keywords:
|
1852
1855
|
if keyword.arg == arg:
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
+
if isinstance(keyword.value, ast.Constant):
|
1857
|
+
return (
|
1858
|
+
keyword.value.value
|
1859
|
+
) # Return the string value of the argument
|
1860
|
+
|
1861
|
+
# if the arg value is not a raw str (i.e. a variable or expression),
|
1862
|
+
# then attempt to evaluate it
|
1863
|
+
namespace = safe_load_namespace(source_code)
|
1864
|
+
literal_arg_value = ast.get_source_segment(
|
1865
|
+
source_code, keyword.value
|
1866
|
+
)
|
1867
|
+
try:
|
1868
|
+
evaluated_value = eval(literal_arg_value, namespace) # type: ignore
|
1869
|
+
except Exception as e:
|
1870
|
+
logger.info(
|
1871
|
+
"Failed to parse @flow argument: `%s=%s` due to the following error. Ignoring and falling back to default behavior.",
|
1872
|
+
arg,
|
1873
|
+
literal_arg_value,
|
1874
|
+
exc_info=e,
|
1875
|
+
)
|
1876
|
+
# ignore the decorator arg and fallback to default behavior
|
1877
|
+
break
|
1878
|
+
return str(evaluated_value)
|
1856
1879
|
|
1857
1880
|
if arg == "name":
|
1858
1881
|
return func_name.replace(
|
1859
1882
|
"_", "-"
|
1860
1883
|
) # If no matching decorator or keyword argument is found
|
1884
|
+
|
1885
|
+
return None
|
@@ -124,6 +124,12 @@ class BaseDockerLogin(Block, ABC):
|
|
124
124
|
)
|
125
125
|
class DockerRegistry(BaseDockerLogin):
|
126
126
|
"""
|
127
|
+
DEPRECATION WARNING:
|
128
|
+
|
129
|
+
This class is deprecated as of March 2024 and will not be available after September 2024.
|
130
|
+
It has been replaced by `DockerRegistryCredentials` from the `prefect-docker` package, which
|
131
|
+
offers enhanced functionality and better a better user experience.
|
132
|
+
|
127
133
|
Connects to a Docker registry.
|
128
134
|
|
129
135
|
Requires a Docker Engine to be connectable.
|
@@ -564,8 +564,74 @@ class BlockStorageAdapter:
|
|
564
564
|
return False
|
565
565
|
|
566
566
|
|
567
|
-
|
568
|
-
|
567
|
+
class LocalStorage:
|
568
|
+
"""
|
569
|
+
Sets the working directory in the local filesystem.
|
570
|
+
|
571
|
+
Parameters:
|
572
|
+
Path: Local file path to set the working directory for the flow
|
573
|
+
|
574
|
+
Examples:
|
575
|
+
Sets the working directory for the local path to the flow:
|
576
|
+
|
577
|
+
```python
|
578
|
+
from prefect.runner.storage import Localstorage
|
579
|
+
|
580
|
+
storage = LocalStorage(
|
581
|
+
path="/path/to/local/flow_directory",
|
582
|
+
)
|
583
|
+
```
|
584
|
+
"""
|
585
|
+
|
586
|
+
def __init__(
|
587
|
+
self,
|
588
|
+
path: str,
|
589
|
+
pull_interval: Optional[int] = None,
|
590
|
+
):
|
591
|
+
self._path = Path(path).resolve()
|
592
|
+
self._logger = get_logger("runner.storage.local-storage")
|
593
|
+
self._storage_base_path = Path.cwd()
|
594
|
+
self._pull_interval = pull_interval
|
595
|
+
|
596
|
+
@property
|
597
|
+
def destination(self) -> Path:
|
598
|
+
return self._path
|
599
|
+
|
600
|
+
def set_base_path(self, path: Path):
|
601
|
+
self._storage_base_path = path
|
602
|
+
|
603
|
+
@property
|
604
|
+
def pull_interval(self) -> Optional[int]:
|
605
|
+
return self._pull_interval
|
606
|
+
|
607
|
+
async def pull_code(self):
|
608
|
+
# Local storage assumes the code already exists on the local filesystem
|
609
|
+
# and does not need to be pulled from a remote location
|
610
|
+
pass
|
611
|
+
|
612
|
+
def to_pull_step(self) -> dict:
|
613
|
+
"""
|
614
|
+
Returns a dictionary representation of the storage object that can be
|
615
|
+
used as a deployment pull step.
|
616
|
+
"""
|
617
|
+
step = {
|
618
|
+
"prefect.deployments.steps.set_working_directory": {
|
619
|
+
"directory": str(self.destination)
|
620
|
+
}
|
621
|
+
}
|
622
|
+
return step
|
623
|
+
|
624
|
+
def __eq__(self, __value) -> bool:
|
625
|
+
if isinstance(__value, LocalStorage):
|
626
|
+
return self._path == __value._path
|
627
|
+
return False
|
628
|
+
|
629
|
+
def __repr__(self) -> str:
|
630
|
+
return f"LocalStorage(path={self._path!r})"
|
631
|
+
|
632
|
+
|
633
|
+
def create_storage_from_source(
|
634
|
+
source: str, pull_interval: Optional[int] = 60
|
569
635
|
) -> RunnerStorage:
|
570
636
|
"""
|
571
637
|
Creates a storage object from a URL.
|
@@ -579,11 +645,18 @@ def create_storage_from_url(
|
|
579
645
|
Returns:
|
580
646
|
RunnerStorage: A runner storage compatible object
|
581
647
|
"""
|
582
|
-
|
583
|
-
|
584
|
-
|
648
|
+
logger = get_logger("runner.storage")
|
649
|
+
parsed_source = urlparse(source)
|
650
|
+
if parsed_source.scheme == "git" or parsed_source.path.endswith(".git"):
|
651
|
+
return GitRepository(url=source, pull_interval=pull_interval)
|
652
|
+
elif parsed_source.scheme in ("file", "local"):
|
653
|
+
source_path = source.split("://", 1)[-1]
|
654
|
+
return LocalStorage(path=source_path, pull_interval=pull_interval)
|
655
|
+
elif parsed_source.scheme in fsspec.available_protocols():
|
656
|
+
return RemoteStorage(url=source, pull_interval=pull_interval)
|
585
657
|
else:
|
586
|
-
|
658
|
+
logger.debug("No valid fsspec protocol found for URL, assuming local storage.")
|
659
|
+
return LocalStorage(path=source, pull_interval=pull_interval)
|
587
660
|
|
588
661
|
|
589
662
|
def _format_token_from_credentials(netloc: str, credentials: dict) -> str:
|
@@ -381,6 +381,15 @@ def safe_load_namespace(source_code: str):
|
|
381
381
|
|
382
382
|
namespace = {"__name__": "prefect_safe_namespace_loader"}
|
383
383
|
|
384
|
+
# Remove the body of the if __name__ == "__main__": block from the AST to prevent
|
385
|
+
# execution of guarded code
|
386
|
+
new_body = []
|
387
|
+
for node in parsed_code.body:
|
388
|
+
if _is_main_block(node):
|
389
|
+
continue
|
390
|
+
new_body.append(node)
|
391
|
+
parsed_code.body = new_body
|
392
|
+
|
384
393
|
# Walk through the AST and find all import statements
|
385
394
|
for node in ast.walk(parsed_code):
|
386
395
|
if isinstance(node, ast.Import):
|
@@ -427,3 +436,23 @@ def safe_load_namespace(source_code: str):
|
|
427
436
|
except Exception as e:
|
428
437
|
logger.debug("Failed to compile: %s", e)
|
429
438
|
return namespace
|
439
|
+
|
440
|
+
|
441
|
+
def _is_main_block(node: ast.AST):
|
442
|
+
"""
|
443
|
+
Check if the node is an `if __name__ == "__main__":` block.
|
444
|
+
"""
|
445
|
+
if isinstance(node, ast.If):
|
446
|
+
try:
|
447
|
+
# Check if the condition is `if __name__ == "__main__":`
|
448
|
+
if (
|
449
|
+
isinstance(node.test, ast.Compare)
|
450
|
+
and isinstance(node.test.left, ast.Name)
|
451
|
+
and node.test.left.id == "__name__"
|
452
|
+
and isinstance(node.test.comparators[0], ast.Constant)
|
453
|
+
and node.test.comparators[0].value == "__main__"
|
454
|
+
):
|
455
|
+
return True
|
456
|
+
except AttributeError:
|
457
|
+
pass
|
458
|
+
return False
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/__init__.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/deprecated.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/compatibility/experimental.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/cancellation.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/event_loop.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/inspection.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/primitives.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/services.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/threads.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/concurrency/waiters.py
RENAMED
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/_base_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/utilities/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/pydantic/v2_validated_func.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_internal/schemas/serializers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/datastructures.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/__init__.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/models.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/dependencies/utils.py
RENAMED
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/exception_handlers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/__init__.py
RENAMED
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/cors.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/gzip.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/middleware/wsgi.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/__init__.py
RENAMED
File without changes
|
{prefect-client-2.19.4 → prefect-client-2.19.6}/src/prefect/_vendor/fastapi/openapi/constants.py
RENAMED
File without changes
|