prefect-client 3.6.23.dev3__tar.gz → 3.6.24.dev1__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.6.23.dev3 → prefect_client-3.6.24.dev1}/PKG-INFO +1 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/AGENTS.md +3 -0
- prefect_client-3.6.24.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/core.py +1 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/_version_checking.py +6 -6
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/__init__.py +77 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_work_pools/client.py +86 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/routes.py +2 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/objects.py +14 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/responses.py +64 -2
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/AGENTS.md +1 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_sync.py +11 -1
- prefect_client-3.6.24.dev1/src/prefect/deployments/AGENTS.md +39 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/runner.py +41 -10
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/utility.py +91 -17
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/docker/docker_image.py +13 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flow_engine.py +8 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flows.py +37 -11
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/futures.py +11 -1
- prefect_client-3.6.24.dev1/src/prefect/runner/AGENTS.md +67 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/runner.py +1 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/work_queues.py +115 -19
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/workers.py +168 -16
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/tasks.py +1 -1
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/_metrics.py +1 -1
- prefect_client-3.6.23.dev3/src/prefect/_build_info.py +0 -5
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/.gitignore +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/LICENSE +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/README.md +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/pyproject.toml +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_observers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_states.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/context.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/tasks.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_schema.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/names.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/utilities.py +0 -0
|
@@ -46,4 +46,7 @@ Use `get_logger()` from `prefect.logging` instead of raw `logging.getLogger()`
|
|
|
46
46
|
- `settings/` → Configuration system (see settings/AGENTS.md)
|
|
47
47
|
- `concurrency/` → Concurrency slot acquisition and lease management (see concurrency/AGENTS.md)
|
|
48
48
|
- `logging/` → Logging handlers, API log shipping, and run-context loggers (see logging/AGENTS.md)
|
|
49
|
+
- `runner/` → Thin facade over extracted single-responsibility classes for local flow run execution (see runner/AGENTS.md)
|
|
50
|
+
- `deployments/` → YAML-driven deployment lifecycle: project init, build/push/pull steps, and triggering remote flow runs (see deployments/AGENTS.md)
|
|
51
|
+
- `docker/` → `DockerImage` class for building and pushing Docker images during deployment
|
|
49
52
|
- `telemetry/` → OS-level resource metric collection and run telemetry
|
|
@@ -609,7 +609,7 @@ class Block(BaseModel, ABC):
|
|
|
609
609
|
# reported from https://github.com/PrefectHQ/prefect-dbt/issues/54
|
|
610
610
|
data_keys = self.model_json_schema(by_alias=False)["properties"].keys()
|
|
611
611
|
|
|
612
|
-
# `block_document_data
|
|
612
|
+
# `block_document_data` must return the aliased version for it to show in the UI
|
|
613
613
|
block_document_data = self.model_dump(
|
|
614
614
|
by_alias=True,
|
|
615
615
|
include=data_keys,
|
{prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/_version_checking.py
RENAMED
|
@@ -81,20 +81,20 @@ async def check_server_version(
|
|
|
81
81
|
"""Perform a one-shot server version compatibility check.
|
|
82
82
|
|
|
83
83
|
The check is skipped when:
|
|
84
|
-
* The
|
|
84
|
+
* The `server_version_check_enabled` setting is `False`.
|
|
85
85
|
* The *api_url* points at Prefect Cloud (Cloud is always compatible).
|
|
86
86
|
* A check for this *(api_url, client_version)* pair has already passed.
|
|
87
87
|
|
|
88
|
-
On a major-version mismatch a
|
|
88
|
+
On a major-version mismatch a `RuntimeError` is raised (regardless of
|
|
89
89
|
*raise_on_error*). When the server is simply older than the client a
|
|
90
90
|
warning is logged.
|
|
91
91
|
|
|
92
92
|
Args:
|
|
93
|
-
api_url: The base Prefect API URL (e.g.
|
|
93
|
+
api_url: The base Prefect API URL (e.g. `http://localhost:4200/api`).
|
|
94
94
|
logger: Logger used for warnings and debug messages.
|
|
95
|
-
raise_on_error: When
|
|
96
|
-
raise
|
|
97
|
-
When
|
|
95
|
+
raise_on_error: When `True` (the default, used by HTTP clients),
|
|
96
|
+
raise `RuntimeError` if the version endpoint cannot be reached.
|
|
97
|
+
When `False` (used by WebSocket clients), log a debug message
|
|
98
98
|
and return silently so that the caller can still attempt its
|
|
99
99
|
connection.
|
|
100
100
|
"""
|
|
@@ -143,6 +143,7 @@ from prefect.client._version_checking import (
|
|
|
143
143
|
)
|
|
144
144
|
|
|
145
145
|
if TYPE_CHECKING:
|
|
146
|
+
from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
|
|
146
147
|
from prefect.tasks import Task as TaskObject
|
|
147
148
|
|
|
148
149
|
from prefect.client.base import (
|
|
@@ -713,6 +714,44 @@ class PrefectClient(
|
|
|
713
714
|
raise
|
|
714
715
|
return WorkQueueStatusDetail.model_validate(response.json())
|
|
715
716
|
|
|
717
|
+
async def read_work_queue_concurrency_status(
|
|
718
|
+
self,
|
|
719
|
+
id: UUID,
|
|
720
|
+
page: int = 1,
|
|
721
|
+
limit: Optional[int] = None,
|
|
722
|
+
) -> "WorkQueueConcurrencyStatus":
|
|
723
|
+
"""
|
|
724
|
+
Read concurrency status for a work queue.
|
|
725
|
+
|
|
726
|
+
Args:
|
|
727
|
+
id: the id of the work queue
|
|
728
|
+
page: Page number (1-indexed).
|
|
729
|
+
limit: Max flow runs per page (server default if None).
|
|
730
|
+
|
|
731
|
+
Raises:
|
|
732
|
+
prefect.exceptions.ObjectNotFound: If request returns 404
|
|
733
|
+
httpx.RequestError: If request fails
|
|
734
|
+
|
|
735
|
+
Returns:
|
|
736
|
+
Paginated WorkQueueConcurrencyStatus with flow run summaries
|
|
737
|
+
"""
|
|
738
|
+
from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
|
|
739
|
+
|
|
740
|
+
body: dict = {"page": page}
|
|
741
|
+
if limit is not None:
|
|
742
|
+
body["limit"] = limit
|
|
743
|
+
|
|
744
|
+
try:
|
|
745
|
+
response = await self._client.post(
|
|
746
|
+
f"/work_queues/{id}/concurrency_status", json=body
|
|
747
|
+
)
|
|
748
|
+
except httpx.HTTPStatusError as e:
|
|
749
|
+
if e.response.status_code == status.HTTP_404_NOT_FOUND:
|
|
750
|
+
raise prefect.exceptions.ObjectNotFound(http_exc=e) from e
|
|
751
|
+
else:
|
|
752
|
+
raise
|
|
753
|
+
return WorkQueueConcurrencyStatus.model_validate(response.json())
|
|
754
|
+
|
|
716
755
|
async def match_work_queues(
|
|
717
756
|
self,
|
|
718
757
|
prefixes: list[str],
|
|
@@ -1882,6 +1921,44 @@ class SyncPrefectClient(
|
|
|
1882
1921
|
raise
|
|
1883
1922
|
return WorkQueueStatusDetail.model_validate(response.json())
|
|
1884
1923
|
|
|
1924
|
+
def read_work_queue_concurrency_status(
|
|
1925
|
+
self,
|
|
1926
|
+
id: UUID,
|
|
1927
|
+
page: int = 1,
|
|
1928
|
+
limit: Optional[int] = None,
|
|
1929
|
+
) -> "WorkQueueConcurrencyStatus":
|
|
1930
|
+
"""
|
|
1931
|
+
Read concurrency status for a work queue.
|
|
1932
|
+
|
|
1933
|
+
Args:
|
|
1934
|
+
id: the id of the work queue
|
|
1935
|
+
page: Page number (1-indexed).
|
|
1936
|
+
limit: Max flow runs per page (server default if None).
|
|
1937
|
+
|
|
1938
|
+
Raises:
|
|
1939
|
+
prefect.exceptions.ObjectNotFound: If request returns 404
|
|
1940
|
+
httpx.RequestError: If request fails
|
|
1941
|
+
|
|
1942
|
+
Returns:
|
|
1943
|
+
Paginated WorkQueueConcurrencyStatus with flow run summaries
|
|
1944
|
+
"""
|
|
1945
|
+
from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
|
|
1946
|
+
|
|
1947
|
+
body: dict = {"page": page}
|
|
1948
|
+
if limit is not None:
|
|
1949
|
+
body["limit"] = limit
|
|
1950
|
+
|
|
1951
|
+
try:
|
|
1952
|
+
response = self._client.post(
|
|
1953
|
+
f"/work_queues/{id}/concurrency_status", json=body
|
|
1954
|
+
)
|
|
1955
|
+
except httpx.HTTPStatusError as e:
|
|
1956
|
+
if e.response.status_code == status.HTTP_404_NOT_FOUND:
|
|
1957
|
+
raise prefect.exceptions.ObjectNotFound(http_exc=e) from e
|
|
1958
|
+
else:
|
|
1959
|
+
raise
|
|
1960
|
+
return WorkQueueConcurrencyStatus.model_validate(response.json())
|
|
1961
|
+
|
|
1885
1962
|
def match_work_queues(
|
|
1886
1963
|
self,
|
|
1887
1964
|
prefixes: list[str],
|
|
@@ -25,7 +25,10 @@ if TYPE_CHECKING:
|
|
|
25
25
|
WorkerMetadata,
|
|
26
26
|
WorkPool,
|
|
27
27
|
)
|
|
28
|
-
from prefect.client.schemas.responses import
|
|
28
|
+
from prefect.client.schemas.responses import (
|
|
29
|
+
WorkerFlowRunResponse,
|
|
30
|
+
WorkPoolConcurrencyStatus,
|
|
31
|
+
)
|
|
29
32
|
|
|
30
33
|
from prefect.exceptions import ObjectAlreadyExists, ObjectNotFound, ObjectUnsupported
|
|
31
34
|
|
|
@@ -316,6 +319,47 @@ class WorkPoolClient(BaseClient):
|
|
|
316
319
|
|
|
317
320
|
return WorkerFlowRunResponse.model_validate_list(response.json())
|
|
318
321
|
|
|
322
|
+
def read_work_pool_concurrency_status(
|
|
323
|
+
self,
|
|
324
|
+
work_pool_name: str,
|
|
325
|
+
page: int = 1,
|
|
326
|
+
limit: int | None = None,
|
|
327
|
+
flow_run_limit: int = 10,
|
|
328
|
+
) -> "WorkPoolConcurrencyStatus":
|
|
329
|
+
"""
|
|
330
|
+
Reads concurrency status for a work pool.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
work_pool_name: The name of the work pool.
|
|
334
|
+
page: Page number (1-indexed).
|
|
335
|
+
limit: Max queues per page (server default if None).
|
|
336
|
+
flow_run_limit: Max flow runs per queue (0-200).
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
Paginated concurrency status with per-queue breakdown.
|
|
340
|
+
"""
|
|
341
|
+
from prefect.client.schemas.responses import WorkPoolConcurrencyStatus
|
|
342
|
+
|
|
343
|
+
body: dict[str, Any] = {"page": page}
|
|
344
|
+
if limit is not None:
|
|
345
|
+
body["limit"] = limit
|
|
346
|
+
body["flow_run_limit"] = flow_run_limit
|
|
347
|
+
|
|
348
|
+
try:
|
|
349
|
+
response = self.request(
|
|
350
|
+
"POST",
|
|
351
|
+
"/work_pools/{name}/concurrency_status",
|
|
352
|
+
path_params={"name": work_pool_name},
|
|
353
|
+
json=body,
|
|
354
|
+
)
|
|
355
|
+
except HTTPStatusError as e:
|
|
356
|
+
if e.response.status_code == 404:
|
|
357
|
+
raise ObjectNotFound(http_exc=e) from e
|
|
358
|
+
else:
|
|
359
|
+
raise
|
|
360
|
+
|
|
361
|
+
return WorkPoolConcurrencyStatus.model_validate(response.json())
|
|
362
|
+
|
|
319
363
|
|
|
320
364
|
class WorkPoolAsyncClient(BaseAsyncClient):
|
|
321
365
|
async def send_worker_heartbeat(
|
|
@@ -599,3 +643,44 @@ class WorkPoolAsyncClient(BaseAsyncClient):
|
|
|
599
643
|
raise
|
|
600
644
|
|
|
601
645
|
return WorkerFlowRunResponse.model_validate_list(response.json())
|
|
646
|
+
|
|
647
|
+
async def read_work_pool_concurrency_status(
|
|
648
|
+
self,
|
|
649
|
+
work_pool_name: str,
|
|
650
|
+
page: int = 1,
|
|
651
|
+
limit: int | None = None,
|
|
652
|
+
flow_run_limit: int = 10,
|
|
653
|
+
) -> "WorkPoolConcurrencyStatus":
|
|
654
|
+
"""
|
|
655
|
+
Reads concurrency status for a work pool.
|
|
656
|
+
|
|
657
|
+
Args:
|
|
658
|
+
work_pool_name: The name of the work pool.
|
|
659
|
+
page: Page number (1-indexed).
|
|
660
|
+
limit: Max queues per page (server default if None).
|
|
661
|
+
flow_run_limit: Max flow runs per queue (0-200).
|
|
662
|
+
|
|
663
|
+
Returns:
|
|
664
|
+
Paginated concurrency status with per-queue breakdown.
|
|
665
|
+
"""
|
|
666
|
+
from prefect.client.schemas.responses import WorkPoolConcurrencyStatus
|
|
667
|
+
|
|
668
|
+
body: dict[str, Any] = {"page": page}
|
|
669
|
+
if limit is not None:
|
|
670
|
+
body["limit"] = limit
|
|
671
|
+
body["flow_run_limit"] = flow_run_limit
|
|
672
|
+
|
|
673
|
+
try:
|
|
674
|
+
response = await self.request(
|
|
675
|
+
"POST",
|
|
676
|
+
"/work_pools/{name}/concurrency_status",
|
|
677
|
+
path_params={"name": work_pool_name},
|
|
678
|
+
json=body,
|
|
679
|
+
)
|
|
680
|
+
except HTTPStatusError as e:
|
|
681
|
+
if e.response.status_code == 404:
|
|
682
|
+
raise ObjectNotFound(http_exc=e) from e
|
|
683
|
+
else:
|
|
684
|
+
raise
|
|
685
|
+
|
|
686
|
+
return WorkPoolConcurrencyStatus.model_validate(response.json())
|
{prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/routes.py
RENAMED
|
@@ -125,6 +125,7 @@ ServerRoutes = Literal[
|
|
|
125
125
|
"/version",
|
|
126
126
|
"/work_pools/",
|
|
127
127
|
"/work_pools/{name}",
|
|
128
|
+
"/work_pools/{name}/concurrency_status",
|
|
128
129
|
"/work_pools/{name}/get_scheduled_flow_runs",
|
|
129
130
|
"/work_pools/{work_pool_name}/queues",
|
|
130
131
|
"/work_pools/{work_pool_name}/queues/{name}",
|
|
@@ -137,6 +138,7 @@ ServerRoutes = Literal[
|
|
|
137
138
|
"/work_queues/",
|
|
138
139
|
"/work_queues/{id}",
|
|
139
140
|
"/work_queues/{id}/get_runs",
|
|
141
|
+
"/work_queues/{id}/concurrency_status",
|
|
140
142
|
"/work_queues/{id}/status",
|
|
141
143
|
"/work_queues/filter",
|
|
142
144
|
"/work_queues/name/{name}",
|
{prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/objects.py
RENAMED
|
@@ -1433,6 +1433,13 @@ class WorkQueue(ObjectBaseModel):
|
|
|
1433
1433
|
status: Optional[WorkQueueStatus] = Field(
|
|
1434
1434
|
default=None, description="The queue status."
|
|
1435
1435
|
)
|
|
1436
|
+
active_slots: Optional[int] = Field(
|
|
1437
|
+
default=None,
|
|
1438
|
+
description=(
|
|
1439
|
+
"The number of concurrency slots currently in use. "
|
|
1440
|
+
"None when concurrency_limit is not set."
|
|
1441
|
+
),
|
|
1442
|
+
)
|
|
1436
1443
|
|
|
1437
1444
|
|
|
1438
1445
|
class WorkQueueHealthPolicy(PrefectBaseModel):
|
|
@@ -1554,6 +1561,13 @@ class WorkPool(ObjectBaseModel):
|
|
|
1554
1561
|
status: Optional[WorkPoolStatus] = Field(
|
|
1555
1562
|
default=None, description="The current status of the work pool."
|
|
1556
1563
|
)
|
|
1564
|
+
active_slots: Optional[int] = Field(
|
|
1565
|
+
default=None,
|
|
1566
|
+
description=(
|
|
1567
|
+
"The number of concurrency slots occupied by pending or running "
|
|
1568
|
+
"flow runs. None when concurrency_limit is not set."
|
|
1569
|
+
),
|
|
1570
|
+
)
|
|
1557
1571
|
|
|
1558
1572
|
storage_configuration: WorkPoolStorageConfiguration = Field(
|
|
1559
1573
|
default_factory=WorkPoolStorageConfiguration,
|
{prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/responses.py
RENAMED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import datetime
|
|
2
|
-
from
|
|
2
|
+
from datetime import timedelta
|
|
3
|
+
from typing import (
|
|
4
|
+
TYPE_CHECKING,
|
|
5
|
+
Annotated,
|
|
6
|
+
Any,
|
|
7
|
+
ClassVar,
|
|
8
|
+
Generic,
|
|
9
|
+
Optional,
|
|
10
|
+
TypeVar,
|
|
11
|
+
Union,
|
|
12
|
+
)
|
|
3
13
|
from uuid import UUID
|
|
4
14
|
|
|
5
|
-
from pydantic import ConfigDict, Field
|
|
15
|
+
from pydantic import BeforeValidator, ConfigDict, Field
|
|
6
16
|
from typing_extensions import Literal
|
|
7
17
|
|
|
8
18
|
import prefect.client.schemas.objects as objects
|
|
@@ -501,3 +511,55 @@ class GlobalConcurrencyLimitResponse(ObjectBaseModel):
|
|
|
501
511
|
default=2.0,
|
|
502
512
|
description="The decay rate for active slots when used as a rate limit.",
|
|
503
513
|
)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
class FlowRunSlotSummary(PrefectBaseModel):
|
|
517
|
+
"""Summary of a flow run occupying a concurrency slot."""
|
|
518
|
+
|
|
519
|
+
id: UUID
|
|
520
|
+
name: str
|
|
521
|
+
state_type: Optional[objects.StateType] = None
|
|
522
|
+
state_name: Optional[str] = None
|
|
523
|
+
start_time: Optional[DateTime] = None
|
|
524
|
+
state_timestamp: Optional[DateTime] = None
|
|
525
|
+
time_in_current_state: Optional[timedelta] = None
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
def _coerce_active_slots(v: int | None) -> int:
|
|
529
|
+
"""Cloud may return null for active_slots; coerce to 0."""
|
|
530
|
+
return v if v is not None else 0
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
class WorkQueueConcurrencyStatusDetail(PrefectBaseModel):
|
|
534
|
+
"""Per-queue concurrency status with flow run details."""
|
|
535
|
+
|
|
536
|
+
queue_id: UUID
|
|
537
|
+
queue_name: str
|
|
538
|
+
active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
|
|
539
|
+
concurrency_limit: Optional[int] = None
|
|
540
|
+
flow_runs: list[FlowRunSlotSummary] = Field(default_factory=list)
|
|
541
|
+
flow_run_count: Optional[int] = None
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
class WorkPoolConcurrencyStatus(PrefectBaseModel):
|
|
545
|
+
"""Paginated pool-level concurrency status with per-queue breakdown."""
|
|
546
|
+
|
|
547
|
+
active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
|
|
548
|
+
concurrency_limit: Optional[int] = None
|
|
549
|
+
queues: list[WorkQueueConcurrencyStatusDetail] = Field(default_factory=list)
|
|
550
|
+
count: int
|
|
551
|
+
limit: int
|
|
552
|
+
pages: int
|
|
553
|
+
page: int
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
class WorkQueueConcurrencyStatus(PrefectBaseModel):
|
|
557
|
+
"""Paginated queue-level concurrency status with flow run details."""
|
|
558
|
+
|
|
559
|
+
active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
|
|
560
|
+
concurrency_limit: Optional[int] = None
|
|
561
|
+
flow_runs: list[FlowRunSlotSummary] = Field(default_factory=list)
|
|
562
|
+
count: int
|
|
563
|
+
limit: int
|
|
564
|
+
pages: int
|
|
565
|
+
page: int
|
|
@@ -38,5 +38,5 @@ Layered — public → internal → services, with leases and events as cross-cu
|
|
|
38
38
|
|
|
39
39
|
- **Service singleton is keyed on `frozenset(names)`.** Passing the same names in different order reuses the same singleton; passing a strict subset creates a different singleton. Each unique name-set gets its own queue.
|
|
40
40
|
- **Lease renewal runs on the global event loop** (sync path). If the global loop is blocked or torn down, renewal silently fails — you'll see the renewal failure callback fire after `max_attempts` retries are exhausted.
|
|
41
|
-
- **Cancellation during acquire** —
|
|
41
|
+
- **Cancellation during acquire or release** — if a `CancelledError` is raised either during slot acquisition or during `release_concurrency_slots_with_lease` in the `finally` block, the lease ID is appended to `ConcurrencyContext.cleanup_lease_ids`. `ConcurrencyContext.__exit__` releases them via a sync client. If `ConcurrencyContext` is not active, those leases are abandoned until server-side expiry.
|
|
42
42
|
- **`v1/` subdirectory** contains the legacy slot API (no lease model). New code should use the top-level `concurrency()` / `rate_limit()` APIs.
|
|
@@ -4,6 +4,7 @@ from contextlib import contextmanager
|
|
|
4
4
|
from typing import Generator, Literal, Optional
|
|
5
5
|
from uuid import UUID
|
|
6
6
|
|
|
7
|
+
from prefect._internal.concurrency.cancellation import CancelledError
|
|
7
8
|
from prefect.client.schemas.objects import ConcurrencyLeaseHolder
|
|
8
9
|
from prefect.client.schemas.responses import (
|
|
9
10
|
ConcurrencyLimitWithLeaseResponse,
|
|
@@ -19,6 +20,7 @@ from prefect.concurrency._events import (
|
|
|
19
20
|
emit_concurrency_release_events,
|
|
20
21
|
)
|
|
21
22
|
from prefect.concurrency._leases import maintain_concurrency_lease
|
|
23
|
+
from prefect.concurrency.context import ConcurrencyContext
|
|
22
24
|
from prefect.utilities.asyncutils import run_coro_as_sync
|
|
23
25
|
|
|
24
26
|
|
|
@@ -146,7 +148,15 @@ def concurrency(
|
|
|
146
148
|
):
|
|
147
149
|
yield
|
|
148
150
|
finally:
|
|
149
|
-
|
|
151
|
+
try:
|
|
152
|
+
release_concurrency_slots_with_lease(acquisition_response.lease_id)
|
|
153
|
+
except CancelledError:
|
|
154
|
+
# The task was cancelled before it could release the lease. Add the
|
|
155
|
+
# lease ID to the cleanup list so it can be released when the
|
|
156
|
+
# concurrency context is exited.
|
|
157
|
+
if ctx := ConcurrencyContext.get():
|
|
158
|
+
ctx.cleanup_lease_ids.append(acquisition_response.lease_id)
|
|
159
|
+
|
|
150
160
|
emit_concurrency_release_events(
|
|
151
161
|
acquisition_response.limits, occupy, emitted_events
|
|
152
162
|
)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Deployments
|
|
2
|
+
|
|
3
|
+
YAML-driven configuration for packaging, publishing, and triggering flow runs from infrastructure.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Handles deployment lifecycle: initializing projects, building/pushing deployment artifacts, and triggering remote flow runs. Does NOT manage flow execution itself — that lives in `flow_engine.py` and `task_engine.py`.
|
|
8
|
+
|
|
9
|
+
## Entry Points & Contracts
|
|
10
|
+
|
|
11
|
+
- `runner.py` → `deploy()` — programmatic deployment creation from `Flow` objects
|
|
12
|
+
- `flow_runs.py` → `run_deployment()` / `arun_deployment()` — trigger a run of an existing deployment
|
|
13
|
+
- `base.py` → `initialize_project()` — scaffold `prefect.yaml` in a project directory
|
|
14
|
+
- `steps/core.py` → `run_step()` / `run_steps()` — execute lifecycle steps defined in `prefect.yaml`
|
|
15
|
+
|
|
16
|
+
## Steps System
|
|
17
|
+
|
|
18
|
+
Steps are YAML entries in `build`, `push`, or `pull` blocks of `prefect.yaml`. Each step maps to a Python function imported at runtime. The `requires` keyword auto-installs missing packages before import.
|
|
19
|
+
|
|
20
|
+
Step outputs are templated into subsequent steps via `{{ step-id.key }}`.
|
|
21
|
+
|
|
22
|
+
Built-in steps:
|
|
23
|
+
- `steps/pull.py` — `git_clone`, `set_working_directory`, `pull_from_remote_storage`
|
|
24
|
+
- `steps/utility.py` — `run_shell_script`, `pip_install_requirements`
|
|
25
|
+
|
|
26
|
+
## Entrypoint Formats
|
|
27
|
+
|
|
28
|
+
`runner.py`'s `from_storage` / `afrom_storage` (and `Flow.from_source`) support two entrypoint formats:
|
|
29
|
+
- **File path**: `path/to/file.py:flow_func_name` — detected by presence of `:`
|
|
30
|
+
- **Module path**: `my_package.flows.flow_func` — detected by absence of `:`
|
|
31
|
+
|
|
32
|
+
For module path entrypoints, the storage destination is temporarily prepended to `sys.path` so the module can be imported, then removed in a `finally` block. Any new code that loads flows from module paths must follow this same pattern to avoid polluting `sys.path`.
|
|
33
|
+
|
|
34
|
+
## Pitfalls
|
|
35
|
+
|
|
36
|
+
- **Windows shell mode**: `run_shell_script` always uses `asyncio.create_subprocess_shell` on Windows (`sys.platform == "win32"`), regardless of the `shell` parameter. This ensures cmd.exe built-ins (`echo`, `dir`, `set`, etc.) work. On non-Windows, `shell=False` (default) uses `create_subprocess_exec` with `shlex.split`.
|
|
37
|
+
- **Step ID namespace**: `id` and `requires` are reserved keywords — do not use them as step output keys.
|
|
38
|
+
- **Step import side effects**: steps are imported dynamically; packages listed in `requires` are installed into the current environment at execution time.
|
|
39
|
+
- **String `image` argument suppresses build/push output.** When `deploy()` / `adeploy()` receives `image` as a plain string, it constructs `DockerImage(stream_progress_to=None)`, silencing all build and push progress. `DockerImage` itself defaults to `sys.stdout`, so users who pass a string get no output. To see build/push progress, pass a `DockerImage` object explicitly: `DockerImage("registry/image:tag", stream_progress_to=sys.stdout)`.
|
|
@@ -32,6 +32,7 @@ Example:
|
|
|
32
32
|
from __future__ import annotations
|
|
33
33
|
|
|
34
34
|
import importlib
|
|
35
|
+
import sys
|
|
35
36
|
import tempfile
|
|
36
37
|
from datetime import datetime, timedelta
|
|
37
38
|
from pathlib import Path
|
|
@@ -1160,7 +1161,8 @@ class RunnerDeployment(BaseModel):
|
|
|
1160
1161
|
|
|
1161
1162
|
Args:
|
|
1162
1163
|
entrypoint: The path to a file containing a flow and the name of the flow function in
|
|
1163
|
-
the format `./path/to/file.py:flow_func_name
|
|
1164
|
+
the format `./path/to/file.py:flow_func_name`, or a module path to a flow function
|
|
1165
|
+
in the format `module.path.flow_func_name`.
|
|
1164
1166
|
name: A name for the deployment
|
|
1165
1167
|
flow_name: The name of the flow to deploy
|
|
1166
1168
|
storage: A storage object to use for retrieving flow code. If not provided, a
|
|
@@ -1213,10 +1215,19 @@ class RunnerDeployment(BaseModel):
|
|
|
1213
1215
|
storage.set_base_path(Path(tmpdir))
|
|
1214
1216
|
await storage.pull_code()
|
|
1215
1217
|
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1218
|
+
if ":" in entrypoint:
|
|
1219
|
+
full_entrypoint = str(storage.destination / entrypoint)
|
|
1220
|
+
else:
|
|
1221
|
+
sys.path.insert(0, str(storage.destination))
|
|
1222
|
+
full_entrypoint = entrypoint
|
|
1223
|
+
|
|
1224
|
+
try:
|
|
1225
|
+
flow = await from_async.wait_for_call_in_new_thread(
|
|
1226
|
+
create_call(load_flow_from_entrypoint, full_entrypoint)
|
|
1227
|
+
)
|
|
1228
|
+
finally:
|
|
1229
|
+
if ":" not in entrypoint:
|
|
1230
|
+
sys.path.remove(str(storage.destination))
|
|
1220
1231
|
|
|
1221
1232
|
deployment = cls(
|
|
1222
1233
|
name=name,
|
|
@@ -1239,6 +1250,11 @@ class RunnerDeployment(BaseModel):
|
|
|
1239
1250
|
job_variables=job_variables,
|
|
1240
1251
|
)
|
|
1241
1252
|
deployment._sla = _sla
|
|
1253
|
+
deployment._entrypoint_type = (
|
|
1254
|
+
EntrypointType.FILE_PATH
|
|
1255
|
+
if ":" in entrypoint
|
|
1256
|
+
else EntrypointType.MODULE_PATH
|
|
1257
|
+
)
|
|
1242
1258
|
deployment._path = str(storage.destination).replace(
|
|
1243
1259
|
tmpdir, "$STORAGE_BASE_PATH"
|
|
1244
1260
|
)
|
|
@@ -1282,7 +1298,8 @@ class RunnerDeployment(BaseModel):
|
|
|
1282
1298
|
|
|
1283
1299
|
Args:
|
|
1284
1300
|
entrypoint: The path to a file containing a flow and the name of the flow function in
|
|
1285
|
-
the format `./path/to/file.py:flow_func_name
|
|
1301
|
+
the format `./path/to/file.py:flow_func_name`, or a module path to a flow function
|
|
1302
|
+
in the format `module.path.flow_func_name`.
|
|
1286
1303
|
name: A name for the deployment
|
|
1287
1304
|
flow_name: The name of the flow to deploy
|
|
1288
1305
|
storage: A storage object to use for retrieving flow code. If not provided, a
|
|
@@ -1335,8 +1352,17 @@ class RunnerDeployment(BaseModel):
|
|
|
1335
1352
|
storage.set_base_path(Path(tmpdir))
|
|
1336
1353
|
run_coro_as_sync(storage.pull_code())
|
|
1337
1354
|
|
|
1338
|
-
|
|
1339
|
-
|
|
1355
|
+
if ":" in entrypoint:
|
|
1356
|
+
full_entrypoint = str(storage.destination / entrypoint)
|
|
1357
|
+
else:
|
|
1358
|
+
sys.path.insert(0, str(storage.destination))
|
|
1359
|
+
full_entrypoint = entrypoint
|
|
1360
|
+
|
|
1361
|
+
try:
|
|
1362
|
+
flow = load_flow_from_entrypoint(full_entrypoint)
|
|
1363
|
+
finally:
|
|
1364
|
+
if ":" not in entrypoint:
|
|
1365
|
+
sys.path.remove(str(storage.destination))
|
|
1340
1366
|
|
|
1341
1367
|
deployment = cls(
|
|
1342
1368
|
name=name,
|
|
@@ -1359,6 +1385,11 @@ class RunnerDeployment(BaseModel):
|
|
|
1359
1385
|
job_variables=job_variables,
|
|
1360
1386
|
)
|
|
1361
1387
|
deployment._sla = _sla
|
|
1388
|
+
deployment._entrypoint_type = (
|
|
1389
|
+
EntrypointType.FILE_PATH
|
|
1390
|
+
if ":" in entrypoint
|
|
1391
|
+
else EntrypointType.MODULE_PATH
|
|
1392
|
+
)
|
|
1362
1393
|
deployment._path = str(storage.destination).replace(
|
|
1363
1394
|
tmpdir, "$STORAGE_BASE_PATH"
|
|
1364
1395
|
)
|
|
@@ -1448,7 +1479,7 @@ async def adeploy(
|
|
|
1448
1479
|
|
|
1449
1480
|
if image and isinstance(image, str):
|
|
1450
1481
|
image_name, image_tag = parse_image_tag(image)
|
|
1451
|
-
image = DockerImage(name=image_name, tag=image_tag)
|
|
1482
|
+
image = DockerImage(name=image_name, tag=image_tag, stream_progress_to=None)
|
|
1452
1483
|
|
|
1453
1484
|
try:
|
|
1454
1485
|
async with get_client() as client:
|
|
@@ -1687,7 +1718,7 @@ def deploy(
|
|
|
1687
1718
|
|
|
1688
1719
|
if image and isinstance(image, str):
|
|
1689
1720
|
image_name, image_tag = parse_image_tag(image)
|
|
1690
|
-
image = DockerImage(name=image_name, tag=image_tag)
|
|
1721
|
+
image = DockerImage(name=image_name, tag=image_tag, stream_progress_to=None)
|
|
1691
1722
|
|
|
1692
1723
|
try:
|
|
1693
1724
|
with get_client(sync_client=True) as client:
|