prefect-client 3.4.24.dev3__tar.gz → 3.4.24.dev4__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-3.4.24.dev3 → prefect_client-3.4.24.dev4}/PKG-INFO +1 -1
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/__init__.py +51 -0
- prefect_client-3.4.24.dev4/src/prefect/_build_info.py +5 -0
- prefect_client-3.4.24.dev4/src/prefect/_experimental/plugins/__init__.py +139 -0
- prefect_client-3.4.24.dev4/src/prefect/_experimental/plugins/apply.py +62 -0
- prefect_client-3.4.24.dev4/src/prefect/_experimental/plugins/diagnostics.py +25 -0
- prefect_client-3.4.24.dev4/src/prefect/_experimental/plugins/manager.py +133 -0
- prefect_client-3.4.24.dev4/src/prefect/_experimental/plugins/spec.py +85 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/cli/automations.py +30 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/input/run_input.py +4 -1
- prefect_client-3.4.24.dev4/src/prefect/settings/models/experiments.py +77 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/task_runners.py +120 -16
- prefect_client-3.4.24.dev3/src/prefect/_build_info.py +0 -5
- prefect_client-3.4.24.dev3/src/prefect/settings/models/experiments.py +0 -24
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/.gitignore +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/LICENSE +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/README.md +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/pyproject.toml +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/__main__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/agent.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/automations.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/context.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/engine.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/related.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/flows.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/futures.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/main.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/plugins.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/py.typed +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/results.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/_observers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/submit.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runner/utils.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/schedules.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/serializers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/states.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/tasks.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/transactions.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/_schema.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/types/names.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/variables.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/workers/utilities.py +0 -0
|
@@ -65,6 +65,57 @@ __ui_static_path__: pathlib.Path = __module_path__ / "server" / "ui"
|
|
|
65
65
|
|
|
66
66
|
del _build_info, pathlib
|
|
67
67
|
|
|
68
|
+
|
|
69
|
+
def _initialize_plugins() -> None:
|
|
70
|
+
"""
|
|
71
|
+
Initialize the experimental plugin system if enabled.
|
|
72
|
+
|
|
73
|
+
This runs automatically when Prefect is imported and plugins are enabled
|
|
74
|
+
via experiments.plugins.enabled setting. Errors are logged but don't prevent
|
|
75
|
+
Prefect from loading.
|
|
76
|
+
"""
|
|
77
|
+
try:
|
|
78
|
+
# Import here to avoid circular imports and defer cost until needed
|
|
79
|
+
from prefect.settings import get_current_settings
|
|
80
|
+
|
|
81
|
+
if not get_current_settings().experiments.plugins.enabled:
|
|
82
|
+
return
|
|
83
|
+
|
|
84
|
+
import anyio
|
|
85
|
+
|
|
86
|
+
from prefect._experimental.plugins import run_startup_hooks
|
|
87
|
+
from prefect._experimental.plugins.spec import HookContext
|
|
88
|
+
from prefect.logging import get_logger
|
|
89
|
+
from prefect.settings import get_current_settings
|
|
90
|
+
|
|
91
|
+
ctx = HookContext(
|
|
92
|
+
prefect_version=__version__,
|
|
93
|
+
api_url=get_current_settings().api.url,
|
|
94
|
+
logger_factory=get_logger,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Run plugin hooks synchronously during import
|
|
98
|
+
anyio.run(run_startup_hooks, ctx)
|
|
99
|
+
except SystemExit:
|
|
100
|
+
# Re-raise SystemExit from strict mode
|
|
101
|
+
raise
|
|
102
|
+
except Exception as e:
|
|
103
|
+
# Log but don't crash on plugin errors
|
|
104
|
+
try:
|
|
105
|
+
from prefect.logging import get_logger
|
|
106
|
+
|
|
107
|
+
logger = get_logger("prefect.plugins")
|
|
108
|
+
logger.exception("Failed to initialize plugins: %s", e)
|
|
109
|
+
except Exception:
|
|
110
|
+
# If even logging fails, print to stderr and continue
|
|
111
|
+
import sys
|
|
112
|
+
|
|
113
|
+
print(f"Failed to initialize plugins: {e}", file=sys.stderr)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Initialize plugins on import if enabled
|
|
117
|
+
_initialize_plugins()
|
|
118
|
+
|
|
68
119
|
_public_api: dict[str, tuple[Optional[str], str]] = {
|
|
69
120
|
"allow_failure": (__spec__.parent, ".main"),
|
|
70
121
|
"aserve": (__spec__.parent, ".main"),
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Experimental plugin system for Prefect.
|
|
3
|
+
|
|
4
|
+
This module provides a startup hook system that allows third-party packages
|
|
5
|
+
to run initialization code before Prefect CLI commands, workers, or agents
|
|
6
|
+
start their main work.
|
|
7
|
+
|
|
8
|
+
**Note: This is an experimental API and is subject to change.**
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
import anyio
|
|
15
|
+
|
|
16
|
+
from prefect._experimental.plugins.apply import apply_setup_result, summarize_env
|
|
17
|
+
from prefect._experimental.plugins.diagnostics import SetupSummary
|
|
18
|
+
from prefect._experimental.plugins.manager import (
|
|
19
|
+
build_manager,
|
|
20
|
+
call_async_hook,
|
|
21
|
+
load_entry_point_plugins,
|
|
22
|
+
register_hook,
|
|
23
|
+
)
|
|
24
|
+
from prefect._experimental.plugins.spec import (
|
|
25
|
+
PREFECT_PLUGIN_API_VERSION,
|
|
26
|
+
HookContext,
|
|
27
|
+
HookSpec,
|
|
28
|
+
SetupResult,
|
|
29
|
+
)
|
|
30
|
+
from prefect.settings import get_current_settings
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
"run_startup_hooks",
|
|
34
|
+
"HookContext",
|
|
35
|
+
"SetupResult",
|
|
36
|
+
"HookSpec",
|
|
37
|
+
"SetupSummary",
|
|
38
|
+
"PREFECT_PLUGIN_API_VERSION",
|
|
39
|
+
"register_hook",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
async def run_startup_hooks(ctx: HookContext) -> list[SetupSummary]:
|
|
44
|
+
"""
|
|
45
|
+
Run all registered plugin startup hooks.
|
|
46
|
+
|
|
47
|
+
This is the main entry point for the plugin system. It:
|
|
48
|
+
1. Checks if plugins are enabled via configuration
|
|
49
|
+
2. Discovers and loads plugins from entry points
|
|
50
|
+
3. Calls setup_environment hooks (respecting timeouts)
|
|
51
|
+
4. Applies environment changes from successful hooks
|
|
52
|
+
5. Returns diagnostic summaries
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
ctx: Context object with Prefect version, API URL, and logger factory
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
List of SetupSummary objects describing what each plugin did
|
|
59
|
+
|
|
60
|
+
Raises:
|
|
61
|
+
SystemExit: In strict mode, if a required plugin fails
|
|
62
|
+
"""
|
|
63
|
+
logger = ctx.logger_factory("prefect.plugins")
|
|
64
|
+
settings = get_current_settings().experiments.plugins
|
|
65
|
+
|
|
66
|
+
if not settings.enabled:
|
|
67
|
+
logger.debug("Experimental plugins not enabled")
|
|
68
|
+
return []
|
|
69
|
+
|
|
70
|
+
logger.debug("Initializing experimental plugin system")
|
|
71
|
+
pm = build_manager(HookSpec)
|
|
72
|
+
allow = settings.allow
|
|
73
|
+
deny = settings.deny
|
|
74
|
+
load_entry_point_plugins(pm, allow=allow, deny=deny, logger=logger)
|
|
75
|
+
|
|
76
|
+
summaries: list[SetupSummary] = []
|
|
77
|
+
|
|
78
|
+
if settings.safe_mode:
|
|
79
|
+
logger.info("Safe mode enabled - plugins loaded but hooks not called")
|
|
80
|
+
return summaries
|
|
81
|
+
|
|
82
|
+
# Call all hooks with timeout
|
|
83
|
+
timeout = settings.setup_timeout_seconds
|
|
84
|
+
results: list[tuple[str, Any, Exception | None]] = []
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
with anyio.move_on_after(timeout) as cancel_scope:
|
|
88
|
+
results = await call_async_hook(pm, "setup_environment", ctx=ctx)
|
|
89
|
+
|
|
90
|
+
if cancel_scope.cancel_called:
|
|
91
|
+
logger.warning("Plugin setup timed out after %.1fs", timeout)
|
|
92
|
+
except Exception as e:
|
|
93
|
+
logger.exception("Unexpected error during plugin setup: %s", e)
|
|
94
|
+
|
|
95
|
+
# Process results
|
|
96
|
+
for name, res, err in results:
|
|
97
|
+
if err:
|
|
98
|
+
logger.error("Plugin %s failed: %s", name, err)
|
|
99
|
+
summaries.append(
|
|
100
|
+
SetupSummary(plugin=name, env_preview={}, note=None, error=str(err))
|
|
101
|
+
)
|
|
102
|
+
continue
|
|
103
|
+
|
|
104
|
+
if res is None:
|
|
105
|
+
logger.debug("Plugin %s returned no changes", name)
|
|
106
|
+
summaries.append(
|
|
107
|
+
SetupSummary(plugin=name, env_preview={}, note=None, error=None)
|
|
108
|
+
)
|
|
109
|
+
continue
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
apply_setup_result(res, logger)
|
|
113
|
+
summaries.append(
|
|
114
|
+
SetupSummary(
|
|
115
|
+
name,
|
|
116
|
+
summarize_env(dict(res.env)),
|
|
117
|
+
res.note,
|
|
118
|
+
error=None,
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
logger.debug("Plugin %s completed successfully", name)
|
|
122
|
+
except Exception as e:
|
|
123
|
+
logger.exception("Failed to apply result from plugin %s", name)
|
|
124
|
+
summaries.append(SetupSummary(name, {}, None, None, error=str(e)))
|
|
125
|
+
|
|
126
|
+
# Strict failure policy
|
|
127
|
+
if settings.strict:
|
|
128
|
+
for name, res, err in results:
|
|
129
|
+
if err:
|
|
130
|
+
raise SystemExit(f"[plugins] required plugin '{name}' failed: {err}")
|
|
131
|
+
if res and getattr(res, "required", False) and not res.env:
|
|
132
|
+
raise SystemExit(
|
|
133
|
+
f"[plugins] required plugin '{name}' returned SetupResult with "
|
|
134
|
+
f"required=True but empty env. If no changes are needed, return "
|
|
135
|
+
f"None instead of SetupResult."
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
logger.info("Plugin system initialization complete (%d plugins)", len(summaries))
|
|
139
|
+
return summaries
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Safe application of plugin setup results with secret redaction.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
from prefect._experimental.plugins.spec import SetupResult
|
|
11
|
+
|
|
12
|
+
REDACT_KEYS = ("SECRET", "TOKEN", "PASSWORD", "KEY")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def redact(key: str, value: str) -> str:
|
|
16
|
+
"""
|
|
17
|
+
Redact sensitive values based on key name heuristics.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
key: Environment variable name
|
|
21
|
+
value: Environment variable value
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
Redacted value if the key appears sensitive, otherwise truncated value
|
|
25
|
+
"""
|
|
26
|
+
k = key.upper()
|
|
27
|
+
if any(tag in k for tag in REDACT_KEYS):
|
|
28
|
+
return "••••••"
|
|
29
|
+
return value if len(value) <= 64 else value[:20] + "…"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def apply_setup_result(result: SetupResult, logger: logging.Logger) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Apply environment changes to the current process.
|
|
35
|
+
|
|
36
|
+
This function never logs secrets - all values are redacted based on key name
|
|
37
|
+
heuristics.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
result: The SetupResult containing environment variables to set
|
|
41
|
+
logger: Logger to use for informational messages
|
|
42
|
+
"""
|
|
43
|
+
for k, v in (result.env or {}).items():
|
|
44
|
+
os.environ[str(k)] = str(v)
|
|
45
|
+
note = result.note or ""
|
|
46
|
+
logger.info(
|
|
47
|
+
"plugin env applied%s",
|
|
48
|
+
f" — {note}" if note else "",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def summarize_env(env: dict[str, str]) -> dict[str, str]:
|
|
53
|
+
"""
|
|
54
|
+
Create a safe summary of environment variables with redacted values.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
env: Dictionary of environment variables
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Dictionary with same keys but redacted values
|
|
61
|
+
"""
|
|
62
|
+
return {k: redact(k, v) for k, v in env.items()}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Diagnostic data structures for plugin system.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class SetupSummary:
|
|
12
|
+
"""
|
|
13
|
+
Summary of a plugin's setup_environment execution.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
plugin: Name of the plugin
|
|
17
|
+
env_preview: Preview of environment variables set (with redacted values)
|
|
18
|
+
note: Human-readable note from the plugin, if any
|
|
19
|
+
error: Error message if the plugin failed, or None if successful
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
plugin: str
|
|
23
|
+
env_preview: dict[str, str]
|
|
24
|
+
note: str | None
|
|
25
|
+
error: str | None
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Plugin manager using pluggy with async bridge.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import importlib.metadata as md
|
|
8
|
+
import inspect
|
|
9
|
+
import logging
|
|
10
|
+
import sys
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
import pluggy
|
|
14
|
+
from packaging.specifiers import InvalidSpecifier, SpecifierSet
|
|
15
|
+
|
|
16
|
+
from prefect._experimental.plugins.spec import PREFECT_PLUGIN_API_VERSION
|
|
17
|
+
|
|
18
|
+
PM_PROJECT_NAME = "prefect-experimental"
|
|
19
|
+
ENTRYPOINTS_GROUP = "prefect.plugins"
|
|
20
|
+
|
|
21
|
+
register_hook = pluggy.HookimplMarker(PM_PROJECT_NAME)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def build_manager(hookspecs: type) -> pluggy.PluginManager:
|
|
25
|
+
"""
|
|
26
|
+
Create a pluggy PluginManager and register hook specifications.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
hookspecs: The hook specification class/protocol
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Configured PluginManager instance
|
|
33
|
+
"""
|
|
34
|
+
pm = pluggy.PluginManager(PM_PROJECT_NAME)
|
|
35
|
+
pm.add_hookspecs(hookspecs)
|
|
36
|
+
return pm
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def load_entry_point_plugins(
|
|
40
|
+
pm: pluggy.PluginManager,
|
|
41
|
+
*,
|
|
42
|
+
allow: set[str] | None,
|
|
43
|
+
deny: set[str] | None,
|
|
44
|
+
logger: logging.Logger,
|
|
45
|
+
) -> None:
|
|
46
|
+
"""
|
|
47
|
+
Discover and load plugins from entry points.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
pm: The PluginManager to register plugins with
|
|
51
|
+
allow: If set, only load plugins with names in this set
|
|
52
|
+
deny: If set, skip plugins with names in this set
|
|
53
|
+
logger: Logger for reporting load failures
|
|
54
|
+
"""
|
|
55
|
+
# Python 3.10+ supports group parameter, 3.9 requires dict access
|
|
56
|
+
if sys.version_info >= (3, 10):
|
|
57
|
+
entry_points_list = md.entry_points(group=ENTRYPOINTS_GROUP)
|
|
58
|
+
else:
|
|
59
|
+
# Python 3.9 returns a dict-like object
|
|
60
|
+
entry_points_list = md.entry_points().get(ENTRYPOINTS_GROUP, [])
|
|
61
|
+
|
|
62
|
+
for ep in entry_points_list:
|
|
63
|
+
if allow and ep.name not in allow:
|
|
64
|
+
logger.debug("Skipping plugin %s (not in allow list)", ep.name)
|
|
65
|
+
continue
|
|
66
|
+
if deny and ep.name in deny:
|
|
67
|
+
logger.debug("Skipping plugin %s (in deny list)", ep.name)
|
|
68
|
+
continue
|
|
69
|
+
try:
|
|
70
|
+
plugin = ep.load()
|
|
71
|
+
# Version fence (best effort)
|
|
72
|
+
requires = getattr(plugin, "PREFECT_PLUGIN_API_REQUIRES", ">=0.1,<1")
|
|
73
|
+
|
|
74
|
+
# Validate plugin API version requirement
|
|
75
|
+
try:
|
|
76
|
+
spec = SpecifierSet(requires)
|
|
77
|
+
if PREFECT_PLUGIN_API_VERSION not in spec:
|
|
78
|
+
logger.warning(
|
|
79
|
+
"Skipping plugin %s: requires API version %s, current version is %s",
|
|
80
|
+
ep.name,
|
|
81
|
+
requires,
|
|
82
|
+
PREFECT_PLUGIN_API_VERSION,
|
|
83
|
+
)
|
|
84
|
+
continue
|
|
85
|
+
except InvalidSpecifier:
|
|
86
|
+
logger.debug(
|
|
87
|
+
"Plugin %s has invalid version specifier %r, ignoring version check",
|
|
88
|
+
ep.name,
|
|
89
|
+
requires,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
pm.register(plugin, name=ep.name)
|
|
93
|
+
logger.debug(
|
|
94
|
+
"Loaded plugin %s (requires API %s, current %s)",
|
|
95
|
+
ep.name,
|
|
96
|
+
requires,
|
|
97
|
+
PREFECT_PLUGIN_API_VERSION,
|
|
98
|
+
)
|
|
99
|
+
except Exception:
|
|
100
|
+
logger.exception("Failed to load plugin %s", ep.name)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
async def call_async_hook(
|
|
104
|
+
pm: pluggy.PluginManager, hook_name: str, **kwargs: Any
|
|
105
|
+
) -> list[tuple[str, Any, Exception | None]]:
|
|
106
|
+
"""
|
|
107
|
+
Call a hook that may return coroutines.
|
|
108
|
+
|
|
109
|
+
This function handles both sync and async hook implementations, gathering
|
|
110
|
+
results and exceptions per plugin.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
pm: The PluginManager
|
|
114
|
+
hook_name: Name of the hook to call
|
|
115
|
+
**kwargs: Arguments to pass to the hook
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
List of tuples: (plugin_name, result, exception)
|
|
119
|
+
- If successful: (name, result, None)
|
|
120
|
+
- If failed: (name, None, exception)
|
|
121
|
+
"""
|
|
122
|
+
hook = getattr(pm.hook, hook_name)
|
|
123
|
+
results: list[tuple[str, Any, Exception | None]] = []
|
|
124
|
+
for impl in hook.get_hookimpls():
|
|
125
|
+
fn = impl.function
|
|
126
|
+
try:
|
|
127
|
+
res = fn(**kwargs)
|
|
128
|
+
if inspect.iscoroutine(res):
|
|
129
|
+
res = await res
|
|
130
|
+
results.append((impl.plugin_name, res, None))
|
|
131
|
+
except Exception as exc:
|
|
132
|
+
results.append((impl.plugin_name, None, exc))
|
|
133
|
+
return results
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Experimental plugin API specification.
|
|
3
|
+
|
|
4
|
+
This module defines the hook specification and data structures for Prefect's
|
|
5
|
+
experimental plugin system.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from typing import Callable, Mapping, Optional
|
|
13
|
+
|
|
14
|
+
import pluggy
|
|
15
|
+
|
|
16
|
+
# Bump this when breaking the hook contract
|
|
17
|
+
PREFECT_PLUGIN_API_VERSION = "0.1"
|
|
18
|
+
|
|
19
|
+
hookspec = pluggy.HookspecMarker("prefect-experimental")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class HookContext:
|
|
24
|
+
"""
|
|
25
|
+
Context provided to plugin hooks at startup.
|
|
26
|
+
|
|
27
|
+
Attributes:
|
|
28
|
+
prefect_version: The version of Prefect running
|
|
29
|
+
api_url: The configured Prefect API URL, if any
|
|
30
|
+
logger_factory: Factory function to create a stdlib logger for the plugin
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
prefect_version: str
|
|
34
|
+
api_url: str | None
|
|
35
|
+
# Logger factory returns a stdlib logger; plugins should use this.
|
|
36
|
+
logger_factory: Callable[[str], logging.Logger]
|
|
37
|
+
# Future: async Prefect client getter, settings snapshot, etc.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class SetupResult:
|
|
42
|
+
"""
|
|
43
|
+
Result returned by a plugin's setup_environment hook.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
env: Environment variables to set (e.g., AWS_* variables)
|
|
47
|
+
note: Short, non-secret human-readable hint about what was configured
|
|
48
|
+
required: If True and hook fails, abort in strict mode
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
env: Mapping[str, str] # e.g. AWS_* variables
|
|
52
|
+
note: Optional[str] = None # short, non-secret human hint
|
|
53
|
+
required: bool = False # if True and hook fails -> abort (in strict mode)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class HookSpec:
|
|
57
|
+
"""
|
|
58
|
+
Plugin hook specification.
|
|
59
|
+
|
|
60
|
+
Plugins should implement the methods defined here to provide startup hooks.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
@hookspec
|
|
64
|
+
def setup_environment(self, *, ctx: HookContext) -> Optional[SetupResult]:
|
|
65
|
+
"""
|
|
66
|
+
Prepare process environment for Prefect and its children.
|
|
67
|
+
|
|
68
|
+
This hook is called before Prefect CLI commands, workers, or agents
|
|
69
|
+
start their main work. It allows plugins to configure environment
|
|
70
|
+
variables, authenticate with external services, or perform other
|
|
71
|
+
setup tasks.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
ctx: Context object with Prefect version, API URL, and logger factory
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
SetupResult with environment variables to set, or None to indicate
|
|
78
|
+
no changes are needed.
|
|
79
|
+
|
|
80
|
+
Important:
|
|
81
|
+
- Must not print secrets or write sensitive data to disk by default
|
|
82
|
+
- Should be idempotent
|
|
83
|
+
- May be async or sync
|
|
84
|
+
- Exceptions are caught and logged unless required=True in strict mode
|
|
85
|
+
"""
|
{prefect_client-3.4.24.dev3 → prefect_client-3.4.24.dev4}/src/prefect/events/cli/automations.py
RENAMED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Command line interface for working with automations.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import asyncio
|
|
5
6
|
import functools
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from typing import Any, Callable, Optional, Type
|
|
@@ -301,6 +302,7 @@ async def pause(
|
|
|
301
302
|
async def delete(
|
|
302
303
|
name: Optional[str] = typer.Argument(None, help="An automation's name"),
|
|
303
304
|
id: Optional[str] = typer.Option(None, "--id", help="An automation's id"),
|
|
305
|
+
_all: bool = typer.Option(False, "--all", help="Delete all automations"),
|
|
304
306
|
):
|
|
305
307
|
"""Delete an automation.
|
|
306
308
|
|
|
@@ -311,9 +313,37 @@ async def delete(
|
|
|
311
313
|
Examples:
|
|
312
314
|
`$ prefect automation delete "my-automation"`
|
|
313
315
|
`$ prefect automation delete --id "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"`
|
|
316
|
+
`$ prefect automation delete --all`
|
|
314
317
|
"""
|
|
315
318
|
|
|
316
319
|
async with get_client() as client:
|
|
320
|
+
if _all:
|
|
321
|
+
if name is not None or id is not None:
|
|
322
|
+
exit_with_error(
|
|
323
|
+
"Cannot provide an automation name or id when deleting all automations."
|
|
324
|
+
)
|
|
325
|
+
automations = await client.read_automations()
|
|
326
|
+
if len(automations) == 0:
|
|
327
|
+
exit_with_success("No automations found.")
|
|
328
|
+
if is_interactive() and not typer.confirm(
|
|
329
|
+
f"Are you sure you want to delete all {len(automations)} automations?",
|
|
330
|
+
default=False,
|
|
331
|
+
):
|
|
332
|
+
exit_with_error("Deletion aborted.")
|
|
333
|
+
|
|
334
|
+
semaphore = asyncio.Semaphore(10)
|
|
335
|
+
|
|
336
|
+
async def limited_delete(automation_id):
|
|
337
|
+
async with semaphore:
|
|
338
|
+
await client.delete_automation(automation_id)
|
|
339
|
+
|
|
340
|
+
await asyncio.gather(
|
|
341
|
+
*[limited_delete(automation.id) for automation in automations]
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
plural = "" if len(automations) == 1 else "s"
|
|
345
|
+
exit_with_success(f"Deleted {len(automations)} automation{plural}.")
|
|
346
|
+
|
|
317
347
|
if not id and not name:
|
|
318
348
|
exit_with_error("Please provide either a name or an id.")
|
|
319
349
|
|
|
@@ -249,7 +249,10 @@ class BaseRunInput(pydantic.BaseModel):
|
|
|
249
249
|
"""
|
|
250
250
|
fields: Dict[str, Any] = {}
|
|
251
251
|
for key, value in kwargs.items():
|
|
252
|
-
|
|
252
|
+
original_field = cls.model_fields.get(key)
|
|
253
|
+
# Use the original field annotation if it exists, otherwise infer from value
|
|
254
|
+
field_type = original_field.annotation if original_field else type(value)
|
|
255
|
+
fields[key] = (field_type, value)
|
|
253
256
|
model = pydantic.create_model(cls.__name__, **fields, __base__=cls)
|
|
254
257
|
|
|
255
258
|
if description is not None:
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from functools import partial
|
|
4
|
+
from typing import Annotated, ClassVar, Union
|
|
5
|
+
|
|
6
|
+
from pydantic import AliasChoices, AliasPath, BeforeValidator, Field
|
|
7
|
+
from pydantic_settings import SettingsConfigDict
|
|
8
|
+
|
|
9
|
+
from prefect.settings.base import PrefectBaseSettings, build_settings_config
|
|
10
|
+
from prefect.types import validate_set_T_from_delim_string
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PluginsSettings(PrefectBaseSettings):
|
|
14
|
+
"""
|
|
15
|
+
Settings for configuring the experimental plugin system
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
model_config: ClassVar[SettingsConfigDict] = build_settings_config(
|
|
19
|
+
("experiments", "plugins")
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
enabled: bool = Field(
|
|
23
|
+
default=False,
|
|
24
|
+
description="Enable the experimental plugin system.",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
allow: Annotated[
|
|
28
|
+
Union[set[str], None],
|
|
29
|
+
BeforeValidator(partial(validate_set_T_from_delim_string, type_=str)),
|
|
30
|
+
] = Field(
|
|
31
|
+
default=None,
|
|
32
|
+
description="Comma-separated list of plugin names to allow. If set, only these plugins will be loaded.",
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
deny: Annotated[
|
|
36
|
+
Union[set[str], None],
|
|
37
|
+
BeforeValidator(partial(validate_set_T_from_delim_string, type_=str)),
|
|
38
|
+
] = Field(
|
|
39
|
+
default=None,
|
|
40
|
+
description="Comma-separated list of plugin names to deny. These plugins will not be loaded.",
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
setup_timeout_seconds: float = Field(
|
|
44
|
+
default=20.0,
|
|
45
|
+
description="Maximum time in seconds for all plugins to complete their setup hooks.",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
strict: bool = Field(
|
|
49
|
+
default=False,
|
|
50
|
+
description="If True, exit if a required plugin fails during setup.",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
safe_mode: bool = Field(
|
|
54
|
+
default=False,
|
|
55
|
+
description="If True, load plugins but do not execute their hooks. Useful for testing.",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class ExperimentsSettings(PrefectBaseSettings):
|
|
60
|
+
"""
|
|
61
|
+
Settings for configuring experimental features
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
model_config: ClassVar[SettingsConfigDict] = build_settings_config(("experiments",))
|
|
65
|
+
|
|
66
|
+
warn: bool = Field(
|
|
67
|
+
default=True,
|
|
68
|
+
description="If `True`, warn on usage of experimental features.",
|
|
69
|
+
validation_alias=AliasChoices(
|
|
70
|
+
AliasPath("warn"), "prefect_experiments_warn", "prefect_experimental_warn"
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
plugins: PluginsSettings = Field(
|
|
75
|
+
default_factory=PluginsSettings,
|
|
76
|
+
description="Settings for the experimental plugin system",
|
|
77
|
+
)
|