prefect-client 3.8.4.dev7__tar.gz → 3.8.5.dev2__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.8.4.dev7 → prefect_client-3.8.5.dev2}/PKG-INFO +2 -2
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/pyproject.toml +1 -1
- prefect_client-3.8.5.dev2/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/attempt_control.py +1 -1
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/context.py +26 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/filters.py +11 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/worker.py +26 -3
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/AGENTS.md +7 -7
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_cancellation_manager.py +2 -2
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_flow_run_executor.py +19 -5
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_hook_runner.py +7 -1
- prefect_client-3.8.5.dev2/src/prefect/runner/_process_manager.py +446 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_starter_engine.py +23 -4
- prefect_client-3.8.5.dev2/src/prefect/runner/_workspace_hook_runner.py +80 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_workspace_resolver.py +8 -1
- prefect_client-3.8.5.dev2/src/prefect/runner/_workspace_runtime.py +53 -0
- prefect_client-3.8.5.dev2/src/prefect/runner/_workspace_runtime_bootstrap.py +200 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_workspace_starter.py +76 -146
- prefect_client-3.8.5.dev2/src/prefect/runner/_workspace_supervisor.py +212 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/automations.py +7 -1
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/AGENTS.md +2 -2
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/process.py +32 -46
- prefect_client-3.8.4.dev7/src/prefect/_build_info.py +0 -5
- prefect_client-3.8.4.dev7/src/prefect/runner/_process_manager.py +0 -264
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/.gitignore +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/LICENSE +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/README.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/hatch_build.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/main.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/results.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/states.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.5.dev2
|
|
4
4
|
Summary: Workflow orchestration and management.
|
|
5
5
|
Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
|
|
6
6
|
Project-URL: Documentation, https://docs.prefect.io
|
|
@@ -64,7 +64,7 @@ Requires-Dist: uvicorn!=0.29.0,>=0.14.0
|
|
|
64
64
|
Requires-Dist: websockets<17.0,>=15.0.1
|
|
65
65
|
Requires-Dist: whenever<0.11.0,>=0.7.3; python_version >= '3.13'
|
|
66
66
|
Provides-Extra: notifications
|
|
67
|
-
Requires-Dist: apprise<2.0.0,>=1.
|
|
67
|
+
Requires-Dist: apprise<2.0.0,>=1.13.0; extra == 'notifications'
|
|
68
68
|
Description-Content-Type: text/markdown
|
|
69
69
|
|
|
70
70
|
<p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
|
|
@@ -74,7 +74,7 @@ Documentation = "https://docs.prefect.io"
|
|
|
74
74
|
Source = "https://github.com/PrefectHQ/prefect"
|
|
75
75
|
Tracker = "https://github.com/PrefectHQ/prefect/issues"
|
|
76
76
|
[project.optional-dependencies]
|
|
77
|
-
notifications = ["apprise>=1.
|
|
77
|
+
notifications = ["apprise>=1.13.0, <2.0.0"]
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
[tool.hatch.version]
|
{prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/_internal/attempt_control.py
RENAMED
|
@@ -48,7 +48,7 @@ class EngineOutcomeReceipt:
|
|
|
48
48
|
state_name: str | None = None
|
|
49
49
|
|
|
50
50
|
def __post_init__(self) -> None:
|
|
51
|
-
if not isinstance(self.disposition, EngineDisposition):
|
|
51
|
+
if not isinstance(self.disposition, EngineDisposition): # pyright: ignore[reportUnnecessaryIsInstance]
|
|
52
52
|
raise TypeError("Receipt disposition must be an EngineDisposition")
|
|
53
53
|
state_fields = (self.state_id, self.state_type, self.state_name)
|
|
54
54
|
if self.disposition is EngineDisposition.STATE_REPORTED:
|
|
@@ -914,6 +914,32 @@ def get_settings_context() -> SettingsContext:
|
|
|
914
914
|
return settings_ctx
|
|
915
915
|
|
|
916
916
|
|
|
917
|
+
@contextmanager
|
|
918
|
+
def _temporary_global_settings_context(
|
|
919
|
+
settings_context: "SettingsContext",
|
|
920
|
+
) -> Generator[None, None, None]:
|
|
921
|
+
"""
|
|
922
|
+
Temporarily replace the process-global settings context.
|
|
923
|
+
|
|
924
|
+
`SettingsContext.get` returns the process-global settings context when the
|
|
925
|
+
current `contextvars` context does not contain one. Replacing the global
|
|
926
|
+
context makes the given settings visible to contexts that were copied before
|
|
927
|
+
the settings were applied, such as the context that
|
|
928
|
+
`unittest.IsolatedAsyncioTestCase` copies when it is constructed. Contexts
|
|
929
|
+
that contain their own settings context are not affected.
|
|
930
|
+
|
|
931
|
+
This is an internal utility for `prefect.testing.utilities.prefect_test_harness`.
|
|
932
|
+
"""
|
|
933
|
+
global GLOBAL_SETTINGS_CONTEXT
|
|
934
|
+
|
|
935
|
+
prior_global_settings_context = GLOBAL_SETTINGS_CONTEXT
|
|
936
|
+
GLOBAL_SETTINGS_CONTEXT = settings_context
|
|
937
|
+
try:
|
|
938
|
+
yield
|
|
939
|
+
finally:
|
|
940
|
+
GLOBAL_SETTINGS_CONTEXT = prior_global_settings_context
|
|
941
|
+
|
|
942
|
+
|
|
917
943
|
@contextmanager
|
|
918
944
|
def tags(*new_tags: str) -> Generator[set[str], None, None]:
|
|
919
945
|
"""
|
|
@@ -14,6 +14,14 @@ from prefect.utilities.collections import AutoEnum
|
|
|
14
14
|
from .schemas.events import Event, Resource, ResourceSpecification
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
class AutomationFilterId(PrefectBaseModel):
|
|
18
|
+
"""Filter by `Automation.id`."""
|
|
19
|
+
|
|
20
|
+
any_: Optional[list[UUID]] = Field(
|
|
21
|
+
default=None, description="A list of automation ids to include"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
17
25
|
class AutomationFilterCreated(PrefectBaseModel):
|
|
18
26
|
"""Filter by `Automation.created`."""
|
|
19
27
|
|
|
@@ -52,6 +60,9 @@ class AutomationFilterTags(PrefectBaseModel):
|
|
|
52
60
|
|
|
53
61
|
|
|
54
62
|
class AutomationFilter(PrefectBaseModel):
|
|
63
|
+
id: Optional[AutomationFilterId] = Field(
|
|
64
|
+
default=None, description="Filter criteria for `Automation.id`"
|
|
65
|
+
)
|
|
55
66
|
name: Optional[AutomationFilterName] = Field(
|
|
56
67
|
default=None, description="Filter criteria for `Automation.name`"
|
|
57
68
|
)
|
|
@@ -6,10 +6,12 @@ from uuid import UUID
|
|
|
6
6
|
from typing_extensions import Self
|
|
7
7
|
|
|
8
8
|
from prefect._internal.concurrency.services import QueueService
|
|
9
|
+
from prefect.logging import get_logger
|
|
9
10
|
from prefect.settings import (
|
|
10
11
|
PREFECT_API_KEY,
|
|
11
12
|
PREFECT_API_URL,
|
|
12
13
|
PREFECT_CLOUD_API_URL,
|
|
14
|
+
get_current_settings,
|
|
13
15
|
)
|
|
14
16
|
from prefect.utilities.context import temporary_context
|
|
15
17
|
|
|
@@ -23,8 +25,12 @@ from .related import related_resources_from_run_context
|
|
|
23
25
|
from .schemas.events import Event
|
|
24
26
|
|
|
25
27
|
if TYPE_CHECKING:
|
|
28
|
+
import logging
|
|
29
|
+
|
|
26
30
|
from prefect.client.orchestration import PrefectClient
|
|
27
31
|
|
|
32
|
+
logger: "logging.Logger" = get_logger(__name__)
|
|
33
|
+
|
|
28
34
|
|
|
29
35
|
class ProcessPoolForwardingEventsClient(EventsClient):
|
|
30
36
|
"""An events client that forwards events to a parent process queue."""
|
|
@@ -69,8 +75,6 @@ class EventsWorker(QueueService[Event]):
|
|
|
69
75
|
def __init__(
|
|
70
76
|
self, client_type: Type[EventsClient], client_options: Tuple[Tuple[str, Any]]
|
|
71
77
|
):
|
|
72
|
-
from prefect.settings import get_current_settings
|
|
73
|
-
|
|
74
78
|
self._max_queue_size = get_current_settings().events.worker_max_queue_size
|
|
75
79
|
super().__init__(client_type, client_options)
|
|
76
80
|
self.client_type = client_type
|
|
@@ -113,10 +117,29 @@ class EventsWorker(QueueService[Event]):
|
|
|
113
117
|
return
|
|
114
118
|
|
|
115
119
|
exclude = {resource.id for resource in event.involved_resources}
|
|
116
|
-
|
|
120
|
+
related = await related_resources_from_run_context(
|
|
117
121
|
client=self._orchestration_client, exclude=exclude
|
|
118
122
|
)
|
|
119
123
|
|
|
124
|
+
# The event was validated when it was created, before these resources were
|
|
125
|
+
# known, so only attach as many as keep the event within the same maximum that
|
|
126
|
+
# the Event schema validates. Otherwise the event is no longer valid to send.
|
|
127
|
+
maximum = get_current_settings().server.events.maximum_related_resources
|
|
128
|
+
room = max(maximum - len(event.related), 0)
|
|
129
|
+
if len(related) > room:
|
|
130
|
+
logger.warning(
|
|
131
|
+
"Attaching only %s of the %s related resources from the run context "
|
|
132
|
+
"to event %s, which already has %s of a maximum %s related resources",
|
|
133
|
+
room,
|
|
134
|
+
len(related),
|
|
135
|
+
event.id,
|
|
136
|
+
len(event.related),
|
|
137
|
+
maximum,
|
|
138
|
+
)
|
|
139
|
+
related = related[:room]
|
|
140
|
+
|
|
141
|
+
event.related += related
|
|
142
|
+
|
|
120
143
|
@classmethod
|
|
121
144
|
def set_client_override(
|
|
122
145
|
cls, client_type: Optional[Type[EventsClient]], **client_kwargs: Any
|
|
@@ -23,7 +23,7 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
|
|
|
23
23
|
| FlowRunExecutorContext | _flow_run_executor.py | Async context manager for one-shot execution outside Runner (workers, CLI, bundles) |
|
|
24
24
|
| DirectSubprocessStarter | _starter_direct.py | Runs Flow object via run_flow_in_subprocess |
|
|
25
25
|
| EngineCommandStarter | _starter_engine.py | Spawns `python -m prefect.engine` subprocess |
|
|
26
|
-
| WorkspaceResolvingEngineCommandStarter | _workspace_starter.py |
|
|
26
|
+
| WorkspaceResolvingEngineCommandStarter | _workspace_starter.py | Starts a managed supervisor that prepares the workspace, launches the selected engine command, and records the prepared runtime for hooks |
|
|
27
27
|
| BundleExecutionStarter | _starter_bundle.py | Executes serialized bundle in SpawnProcess |
|
|
28
28
|
|
|
29
29
|
## Key Contracts
|
|
@@ -45,7 +45,7 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
|
|
|
45
45
|
- `execute_bundle()` -- deprecated (Mar 2026); use `execute_bundle()` from `prefect.bundles.execute`
|
|
46
46
|
- `reschedule_current_flow_runs()` -- deprecated (Mar 2026); SIGTERM rescheduling is now handled inline by the CLI execute path
|
|
47
47
|
|
|
48
|
-
These will be removed once internal callers are migrated. Direct ProcessWorker flow runs already use `FlowRunExecutorContext`
|
|
48
|
+
These will be removed once internal callers are migrated. Direct ProcessWorker flow runs already use `FlowRunExecutorContext`; generated commands use `WorkspaceResolvingEngineCommandStarter`, while explicitly configured commands use `EngineCommandStarter`. Only the ad hoc bundle path still calls deprecated `Runner.execute_bundle()`. Keep lifecycle behavior in the extracted classes and do not route direct worker execution back through Runner.
|
|
49
49
|
|
|
50
50
|
## EventEmitter WebSocket Degradation
|
|
51
51
|
|
|
@@ -108,7 +108,7 @@ The cancelling precheck (step 1a) still runs unconditionally even when `propose_
|
|
|
108
108
|
|
|
109
109
|
## ProcessWorker Execution Paths
|
|
110
110
|
|
|
111
|
-
Direct ProcessWorker runs use `FlowRunExecutorContext` with `EngineCommandStarter` and
|
|
111
|
+
Direct ProcessWorker runs use `FlowRunExecutorContext` with `propose_submitting=False`. Generated commands use `WorkspaceResolvingEngineCommandStarter` so command selection follows workspace preparation; explicitly configured commands use `EngineCommandStarter` and retain their own pull-step semantics. The executor owns process tracking, cancellation, Attempt Control Session evidence, crash inference, and normalized infrastructure status. Ad hoc ProcessWorker submissions still call deprecated `Runner.execute_bundle()` and remain a migration target.
|
|
112
112
|
|
|
113
113
|
## BlockStorageAdapter Pull Behavior
|
|
114
114
|
|
|
@@ -133,19 +133,19 @@ These validations exist to prevent git argument injection. Do not bypass them wh
|
|
|
133
133
|
|
|
134
134
|
## Workspace Resolver Subprocess
|
|
135
135
|
|
|
136
|
-
`_workspace_resolver.py` prepares a flow run workspace
|
|
136
|
+
`_workspace_resolver.py` prepares a flow run workspace inside the managed workspace supervisor (storage pull, pull steps, and CWD/environment/sys.path capture).
|
|
137
137
|
|
|
138
138
|
**Stdout is reserved for the JSON `PreparedWorkspaceResult` payload only.** Pull step output (including inherited stdout from child processes) is redirected to stderr. Parse `process.stdout` for the result, `process.stderr` for diagnostics. Violating this breaks callers silently.
|
|
139
139
|
|
|
140
|
-
**Caller-facing API:** Use `WorkspaceResolvingEngineCommandStarter` (`_workspace_starter.py`) rather than calling the resolver directly
|
|
140
|
+
**Caller-facing API:** Use `WorkspaceResolvingEngineCommandStarter` (`_workspace_starter.py`) rather than calling the resolver directly when the caller owns workspace preparation. Pass `starter.hook_runner` as the `hook_runner` argument to `FlowRunExecutorContext.create_executor()`. The hook runner reads the prepared runtime manifest and loads hooks in a subprocess using the same command prefix, working directory, and environment as the engine. Treat explicitly configured commands as opaque; ProcessWorker launches them with `EngineCommandStarter` so their existing pull behavior is not duplicated.
|
|
141
141
|
|
|
142
|
-
**
|
|
142
|
+
**Environment isolation:** Workspace preparation, engine execution, and hook loading stay in child processes. Do not install a prepared workspace's environment, CWD, or `sys.path` in the long-lived runner process.
|
|
143
143
|
|
|
144
144
|
**Local path in-place execution:** When no pull steps are configured and the entrypoint file exists at `deployment.path` but not in the workspace root, `prepare_workspace` sets `working_directory` to the local path — not under `workspace_root`. The workspace directory is still created but is not the execution root. This is the "image-baked" pattern: code lives at a fixed local path (e.g., inside a container), not in object storage.
|
|
145
145
|
|
|
146
146
|
**Pull-step directory fallback:** When pull steps run but none produces a `directory` output or changes CWD, `_ensure_entrypoint_in_workspace` copies storage into the workspace root as a fallback. This handles setup-only pull steps (e.g., `run_shell_script` for environment prep) that do not control the working directory themselves.
|
|
147
147
|
|
|
148
|
-
**Automatic dependency installation:** By default, `WorkspaceResolvingEngineCommandStarter` does not install dependencies before starting a flow run. When no explicit command is passed and `PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES` is true, it auto-selects `uv run --no-default-groups --project <project_root
|
|
148
|
+
**Automatic dependency installation:** By default, `WorkspaceResolvingEngineCommandStarter` does not install dependencies before starting a flow run. When no explicit command is passed and `PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES` is true, it auto-selects `uv run --no-default-groups --project <project_root>` with the worker-supplied workspace bootstrap — but only when all three conditions hold: `pyproject.toml` exists at `project_root`, the `project.dependencies` list includes `prefect`, and `uv` is found via the workspace's `PATH` env var (not the system PATH). The bootstrap uses the prepared entrypoint with `prefect.flow_engine` when that module exposes its executable `_main`; older selected runtimes fall back to `prefect.engine` with `PREFECT__FLOW_ENTRYPOINT`, preserving the prepared workspace. If the setting is false or any condition fails, the command falls back to `None`. Explicit commands always take precedence.
|
|
149
149
|
|
|
150
150
|
## Reference
|
|
151
151
|
|
{prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_cancellation_manager.py
RENAMED
|
@@ -19,7 +19,7 @@ if TYPE_CHECKING:
|
|
|
19
19
|
from prefect.client.schemas.objects import FlowRun
|
|
20
20
|
from prefect.runner._control_channel import ControlChannel
|
|
21
21
|
from prefect.runner._event_emitter import EventEmitter
|
|
22
|
-
from prefect.runner._hook_runner import
|
|
22
|
+
from prefect.runner._hook_runner import FlowRunHookRunner
|
|
23
23
|
from prefect.runner._process_manager import ProcessManager
|
|
24
24
|
from prefect.runner._state_proposer import StateProposer
|
|
25
25
|
|
|
@@ -42,7 +42,7 @@ class CancellationManager:
|
|
|
42
42
|
self,
|
|
43
43
|
*,
|
|
44
44
|
process_manager: ProcessManager,
|
|
45
|
-
hook_runner:
|
|
45
|
+
hook_runner: FlowRunHookRunner,
|
|
46
46
|
state_proposer: StateProposer,
|
|
47
47
|
event_emitter: EventEmitter,
|
|
48
48
|
client: PrefectClient,
|
{prefect_client-3.8.4.dev7 → prefect_client-3.8.5.dev2}/src/prefect/runner/_flow_run_executor.py
RENAMED
|
@@ -18,7 +18,7 @@ from prefect.logging import get_logger
|
|
|
18
18
|
from prefect.runner._cancellation_manager import CancellationManager
|
|
19
19
|
from prefect.runner._control_channel import ControlChannel
|
|
20
20
|
from prefect.runner._event_emitter import EventEmitter
|
|
21
|
-
from prefect.runner._hook_runner import HookRunner
|
|
21
|
+
from prefect.runner._hook_runner import FlowRunHookRunner, HookRunner
|
|
22
22
|
from prefect.runner._process_manager import ProcessHandle, ProcessManager
|
|
23
23
|
from prefect.runner._state_proposer import StateProposer
|
|
24
24
|
from prefect.settings.context import get_current_settings
|
|
@@ -94,7 +94,7 @@ class FlowRunExecutor:
|
|
|
94
94
|
starter: ProcessStarter,
|
|
95
95
|
process_manager: ProcessManager,
|
|
96
96
|
state_proposer: StateProposer,
|
|
97
|
-
hook_runner:
|
|
97
|
+
hook_runner: FlowRunHookRunner,
|
|
98
98
|
get_attempt_conclusion: Callable[[UUID], AttemptConclusion | None],
|
|
99
99
|
propose_submitting: bool = True,
|
|
100
100
|
) -> None:
|
|
@@ -267,6 +267,7 @@ class FlowRunExecutorContext:
|
|
|
267
267
|
async def __aenter__(self) -> FlowRunExecutorContext:
|
|
268
268
|
self._stack = AsyncExitStack()
|
|
269
269
|
await self._stack.__aenter__()
|
|
270
|
+
self._after_exit_callbacks: list[Callable[[], object]] = []
|
|
270
271
|
self._logger = get_logger("runner.executor_context")
|
|
271
272
|
|
|
272
273
|
# Step 1: client
|
|
@@ -339,7 +340,15 @@ class FlowRunExecutorContext:
|
|
|
339
340
|
exc_value: BaseException | None,
|
|
340
341
|
traceback: TracebackType | None,
|
|
341
342
|
) -> bool | None:
|
|
342
|
-
|
|
343
|
+
try:
|
|
344
|
+
return await self._stack.__aexit__(exc_type, exc_value, traceback)
|
|
345
|
+
finally:
|
|
346
|
+
for callback in reversed(self._after_exit_callbacks):
|
|
347
|
+
callback()
|
|
348
|
+
|
|
349
|
+
def call_after_exit(self, callback: Callable[[], object]) -> None:
|
|
350
|
+
"""Keep attempt resources alive until cancellation work has drained."""
|
|
351
|
+
self._after_exit_callbacks.append(callback)
|
|
343
352
|
|
|
344
353
|
def _handle_cancellation_observer_failure(self, flow_run_ids: set) -> None:
|
|
345
354
|
"""Handle failure of both cancellation observer mechanisms.
|
|
@@ -369,10 +378,15 @@ class FlowRunExecutorContext:
|
|
|
369
378
|
self,
|
|
370
379
|
flow_run: FlowRun,
|
|
371
380
|
starter: ProcessStarter,
|
|
372
|
-
resolve_flow: Callable[[FlowRun], Awaitable[Flow[Any, Any]]],
|
|
381
|
+
resolve_flow: Callable[[FlowRun], Awaitable[Flow[Any, Any]]] | None = None,
|
|
373
382
|
propose_submitting: bool = True,
|
|
383
|
+
hook_runner: FlowRunHookRunner | None = None,
|
|
374
384
|
) -> FlowRunExecutor:
|
|
375
|
-
|
|
385
|
+
if (resolve_flow is None) == (hook_runner is None):
|
|
386
|
+
raise ValueError("Provide exactly one of resolve_flow or hook_runner.")
|
|
387
|
+
if hook_runner is None:
|
|
388
|
+
assert resolve_flow is not None
|
|
389
|
+
hook_runner = HookRunner(resolve_flow=resolve_flow)
|
|
376
390
|
# Wire the real resolver into CancellationManager for on_cancellation hooks
|
|
377
391
|
self._cancellation_manager._hook_runner = hook_runner
|
|
378
392
|
return FlowRunExecutor(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Awaitable, Callable
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Protocol
|
|
4
4
|
|
|
5
5
|
from prefect._internal.concurrency.api import create_call, from_async
|
|
6
6
|
from prefect._internal.engine import get_hook_name
|
|
@@ -13,6 +13,12 @@ if TYPE_CHECKING:
|
|
|
13
13
|
from prefect.states import State
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
class FlowRunHookRunner(Protocol):
|
|
17
|
+
async def run_cancellation_hooks(self, flow_run: FlowRun, state: State) -> None: ...
|
|
18
|
+
|
|
19
|
+
async def run_crashed_hooks(self, flow_run: FlowRun, state: State) -> None: ...
|
|
20
|
+
|
|
21
|
+
|
|
16
22
|
async def _run_hooks(
|
|
17
23
|
hooks: list[Any],
|
|
18
24
|
flow_run: FlowRun,
|