prefect-client 3.8.1.dev5__tar.gz → 3.8.2.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.1.dev5 → prefect_client-3.8.2.dev2}/PKG-INFO +2 -2
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/pyproject.toml +1 -1
- prefect_client-3.8.2.dev2/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/control_listener.py +4 -2
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/core.py +8 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/runner.py +67 -7
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/engine.py +6 -8
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flow_engine.py +16 -22
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/AGENTS.md +2 -2
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_control_channel.py +9 -8
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_process_manager.py +33 -2
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_engine.py +5 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_workspace_starter.py +3 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/processutils/__init__.py +24 -3
- prefect_client-3.8.1.dev5/src/prefect/_build_info.py +0 -5
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/.gitignore +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/LICENSE +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/README.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/hatch_build.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/context.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/main.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/results.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/states.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.2.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
|
|
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
23
|
Requires-Python: <3.15,>=3.10
|
|
24
24
|
Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
|
|
25
|
-
Requires-Dist: anyio
|
|
25
|
+
Requires-Dist: anyio<5.0.0,>=4.4.0
|
|
26
26
|
Requires-Dist: asgi-lifespan<3.0,>=1.0
|
|
27
27
|
Requires-Dist: cachetools<8.0,>=5.3
|
|
28
28
|
Requires-Dist: cloudpickle<4.0,>=2.0
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/control_listener.py
RENAMED
|
@@ -13,7 +13,7 @@ Protocol:
|
|
|
13
13
|
one-shot env vars without connecting yet.
|
|
14
14
|
3. The outermost `capture_sigterm()` calls `start()`, which connects back to
|
|
15
15
|
the runner and spawns a daemon thread blocked on the socket.
|
|
16
|
-
4. The runner writes a single-byte intent (`b"c"`
|
|
16
|
+
4. The runner writes a single-byte intent (`b"c"`, `b"r"` or `b"q"`).
|
|
17
17
|
5. If Prefect still owns the live SIGTERM bridge, the child writes `b"a"`,
|
|
18
18
|
commits the intent for engine dispatch, and on Windows triggers
|
|
19
19
|
`_thread.interrupt_main(SIGTERM)`.
|
|
@@ -37,10 +37,12 @@ from typing import Literal
|
|
|
37
37
|
|
|
38
38
|
from prefect.utilities.engine import commit_control_intent_and_ack
|
|
39
39
|
|
|
40
|
-
Intent = Literal["cancel"]
|
|
40
|
+
Intent = Literal["cancel", "reschedule", "relinquish"]
|
|
41
41
|
|
|
42
42
|
_INTENT_FOR_BYTE: dict[bytes, Intent] = {
|
|
43
43
|
b"c": "cancel",
|
|
44
|
+
b"r": "reschedule",
|
|
45
|
+
b"q": "relinquish",
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
_intent: Intent | None = None
|
|
@@ -424,6 +424,14 @@ class Block(BaseModel, ABC):
|
|
|
424
424
|
def ser_model(
|
|
425
425
|
self, handler: SerializerFunctionWrapHandler, info: SerializationInfo
|
|
426
426
|
) -> Any:
|
|
427
|
+
if info.context and info.context.get("serialize_blocks_as_references"):
|
|
428
|
+
if self._block_document_id is None:
|
|
429
|
+
raise BlockNotSavedError(
|
|
430
|
+
"Block must be saved with `.save()` before it can be used as a "
|
|
431
|
+
"deployment parameter."
|
|
432
|
+
)
|
|
433
|
+
return {"$ref": {"block_document_id": str(self._block_document_id)}}
|
|
434
|
+
|
|
427
435
|
jsonable_self = handler(self)
|
|
428
436
|
if (ctx := info.context) and ctx.get("include_secrets") is True:
|
|
429
437
|
# Add serialization mode to context so handle_secret_render knows how to process nested models
|
|
@@ -53,6 +53,8 @@ from pydantic import (
|
|
|
53
53
|
ConfigDict,
|
|
54
54
|
Field,
|
|
55
55
|
PrivateAttr,
|
|
56
|
+
TypeAdapter,
|
|
57
|
+
field_serializer,
|
|
56
58
|
field_validator,
|
|
57
59
|
model_validator,
|
|
58
60
|
)
|
|
@@ -69,6 +71,7 @@ from prefect._internal.schemas.validators import (
|
|
|
69
71
|
reconcile_schedules_runner,
|
|
70
72
|
)
|
|
71
73
|
from prefect._internal.versioning import VersionType, get_inferred_version_info
|
|
74
|
+
from prefect.blocks.core import Block, BlockNotSavedError
|
|
72
75
|
from prefect.client.base import ServerType
|
|
73
76
|
from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_client
|
|
74
77
|
from prefect.client.schemas.actions import (
|
|
@@ -106,7 +109,12 @@ from prefect.types.entrypoint import EntrypointType
|
|
|
106
109
|
from prefect.utilities.annotations import freeze
|
|
107
110
|
from prefect.utilities.asyncutils import run_coro_as_sync
|
|
108
111
|
from prefect.utilities.callables import ParameterSchema, parameter_schema
|
|
109
|
-
from prefect.utilities.collections import
|
|
112
|
+
from prefect.utilities.collections import (
|
|
113
|
+
StopVisiting,
|
|
114
|
+
get_from_dict,
|
|
115
|
+
isiterable,
|
|
116
|
+
visit_collection,
|
|
117
|
+
)
|
|
110
118
|
from prefect.utilities.dockerutils import (
|
|
111
119
|
parse_image_tag,
|
|
112
120
|
)
|
|
@@ -117,6 +125,11 @@ if TYPE_CHECKING:
|
|
|
117
125
|
|
|
118
126
|
__all__ = ["RunnerDeployment"]
|
|
119
127
|
|
|
128
|
+
_DEPLOYMENT_PARAMETER_SERIALIZER = TypeAdapter(
|
|
129
|
+
dict[str, Any],
|
|
130
|
+
config=ConfigDict(ser_json_timedelta="float"),
|
|
131
|
+
)
|
|
132
|
+
|
|
120
133
|
|
|
121
134
|
def _extract_concurrency_options(
|
|
122
135
|
concurrency_limit: Union[int, ConcurrencyLimitConfig, None],
|
|
@@ -296,6 +309,47 @@ class RunnerDeployment(BaseModel):
|
|
|
296
309
|
def full_name(self) -> str:
|
|
297
310
|
return f"{self.flow_name}/{self.name}"
|
|
298
311
|
|
|
312
|
+
@field_validator("parameters", "schedules", mode="before")
|
|
313
|
+
@classmethod
|
|
314
|
+
def validate_block_parameters(cls, value: Any) -> Any:
|
|
315
|
+
def ensure_block_is_saved(value: Any) -> Any:
|
|
316
|
+
if isinstance(value, Block):
|
|
317
|
+
if value._block_document_id is None:
|
|
318
|
+
raise BlockNotSavedError(
|
|
319
|
+
"Block must be saved with `.save()` before it can be used as a "
|
|
320
|
+
"deployment parameter."
|
|
321
|
+
)
|
|
322
|
+
raise StopVisiting()
|
|
323
|
+
return value
|
|
324
|
+
|
|
325
|
+
visit_collection(value, ensure_block_is_saved)
|
|
326
|
+
return value
|
|
327
|
+
|
|
328
|
+
@field_serializer("parameters", when_used="json")
|
|
329
|
+
def serialize_block_parameters(self, parameters: dict[str, Any]) -> dict[str, Any]:
|
|
330
|
+
return _DEPLOYMENT_PARAMETER_SERIALIZER.dump_python(
|
|
331
|
+
parameters,
|
|
332
|
+
mode="json",
|
|
333
|
+
context={"serialize_blocks_as_references": True},
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
def _schedules_with_serialized_block_parameters(
|
|
337
|
+
self,
|
|
338
|
+
) -> Optional[List[Union[DeploymentScheduleCreate, DeploymentScheduleUpdate]]]:
|
|
339
|
+
if self.schedules is None:
|
|
340
|
+
return None
|
|
341
|
+
|
|
342
|
+
return [
|
|
343
|
+
schedule.model_copy(
|
|
344
|
+
update={
|
|
345
|
+
"parameters": self.serialize_block_parameters(schedule.parameters)
|
|
346
|
+
}
|
|
347
|
+
)
|
|
348
|
+
if schedule.parameters
|
|
349
|
+
else schedule
|
|
350
|
+
for schedule in self.schedules
|
|
351
|
+
]
|
|
352
|
+
|
|
299
353
|
def _get_deployment_version_info(
|
|
300
354
|
self, version_type: Optional[VersionType] = None
|
|
301
355
|
) -> VersionInfo:
|
|
@@ -378,6 +432,9 @@ class RunnerDeployment(BaseModel):
|
|
|
378
432
|
" with a work pool."
|
|
379
433
|
)
|
|
380
434
|
|
|
435
|
+
parameters = self.model_dump(mode="json", include={"parameters"})["parameters"]
|
|
436
|
+
schedules = self._schedules_with_serialized_block_parameters()
|
|
437
|
+
|
|
381
438
|
async with get_client() as client:
|
|
382
439
|
flow_id = await client.create_flow_from_name(self.flow_name)
|
|
383
440
|
|
|
@@ -389,10 +446,10 @@ class RunnerDeployment(BaseModel):
|
|
|
389
446
|
version=self.version,
|
|
390
447
|
version_info=version_info,
|
|
391
448
|
paused=self.paused,
|
|
392
|
-
schedules=
|
|
449
|
+
schedules=schedules,
|
|
393
450
|
concurrency_limit=self.concurrency_limit,
|
|
394
451
|
concurrency_options=self.concurrency_options,
|
|
395
|
-
parameters=
|
|
452
|
+
parameters=parameters,
|
|
396
453
|
description=self.description,
|
|
397
454
|
tags=self.tags,
|
|
398
455
|
path=self._path,
|
|
@@ -481,6 +538,9 @@ class RunnerDeployment(BaseModel):
|
|
|
481
538
|
" with a work pool."
|
|
482
539
|
)
|
|
483
540
|
|
|
541
|
+
parameters = self.model_dump(mode="json", include={"parameters"})["parameters"]
|
|
542
|
+
schedules = self._schedules_with_serialized_block_parameters()
|
|
543
|
+
|
|
484
544
|
with get_client(sync_client=True) as client:
|
|
485
545
|
flow_id = client.create_flow_from_name(self.flow_name)
|
|
486
546
|
|
|
@@ -492,10 +552,10 @@ class RunnerDeployment(BaseModel):
|
|
|
492
552
|
version=self.version,
|
|
493
553
|
version_info=version_info,
|
|
494
554
|
paused=self.paused,
|
|
495
|
-
schedules=
|
|
555
|
+
schedules=schedules,
|
|
496
556
|
concurrency_limit=self.concurrency_limit,
|
|
497
557
|
concurrency_options=self.concurrency_options,
|
|
498
|
-
parameters=
|
|
558
|
+
parameters=parameters,
|
|
499
559
|
description=self.description,
|
|
500
560
|
tags=self.tags,
|
|
501
561
|
path=self._path,
|
|
@@ -579,7 +639,7 @@ class RunnerDeployment(BaseModel):
|
|
|
579
639
|
if self.schedules:
|
|
580
640
|
update_payload["schedules"] = [
|
|
581
641
|
schedule.model_dump(mode="json", exclude_unset=True)
|
|
582
|
-
for schedule in self.
|
|
642
|
+
for schedule in self._schedules_with_serialized_block_parameters() or []
|
|
583
643
|
]
|
|
584
644
|
|
|
585
645
|
await client.update_deployment(
|
|
@@ -631,7 +691,7 @@ class RunnerDeployment(BaseModel):
|
|
|
631
691
|
if self.schedules:
|
|
632
692
|
update_payload["schedules"] = [
|
|
633
693
|
schedule.model_dump(mode="json", exclude_unset=True)
|
|
634
|
-
for schedule in self.
|
|
694
|
+
for schedule in self._schedules_with_serialized_block_parameters() or []
|
|
635
695
|
]
|
|
636
696
|
|
|
637
697
|
client.update_deployment(
|
|
@@ -100,16 +100,14 @@ def handle_engine_signals(flow_run_id: UUID | None = None):
|
|
|
100
100
|
engine_logger.info(msg)
|
|
101
101
|
exit(0)
|
|
102
102
|
except TerminationSignal:
|
|
103
|
-
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
106
|
-
|
|
107
|
-
# Only the first case should translate to a clean process exit.
|
|
108
|
-
if get_intent() == "cancel":
|
|
103
|
+
# An intent means the runner or the `prefect flow-run execute` supervisor
|
|
104
|
+
# drove this termination and owns the flow run's next state, so exit cleanly.
|
|
105
|
+
# A raw external termination has no intent and must keep propagating.
|
|
106
|
+
if get_intent() is not None:
|
|
109
107
|
if flow_run_id:
|
|
110
|
-
msg = f"Execution of flow run '{flow_run_id}' was
|
|
108
|
+
msg = f"Execution of flow run '{flow_run_id}' was terminated."
|
|
111
109
|
else:
|
|
112
|
-
msg = "Execution was
|
|
110
|
+
msg = "Execution was terminated."
|
|
113
111
|
engine_logger.info(msg)
|
|
114
112
|
clear_intent()
|
|
115
113
|
exit(0)
|
|
@@ -195,26 +195,17 @@ def _termination_intent() -> Intent | None:
|
|
|
195
195
|
for the outermost flow run as well as nested subflows running in the
|
|
196
196
|
same process.
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
`except TerminationSignal` dispatch below will gain a matching branch.
|
|
198
|
+
Adding an intent means extending `Intent` in
|
|
199
|
+
`prefect._internal.control_listener` and the `except TerminationSignal`
|
|
200
|
+
dispatch below with a matching branch.
|
|
202
201
|
"""
|
|
203
202
|
return get_intent()
|
|
204
203
|
|
|
205
204
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
process proposes `AwaitingRetry` and then sends a plain SIGTERM to the
|
|
211
|
-
child. That path does not use the control channel, so the child must not
|
|
212
|
-
reinterpret the resulting `TerminationSignal` as a crash.
|
|
213
|
-
"""
|
|
214
|
-
return (
|
|
215
|
-
os.environ.get("PREFECT_FLOW_RUN_EXECUTE_SIGTERM_BEHAVIOR", "").lower()
|
|
216
|
-
== "reschedule"
|
|
217
|
-
)
|
|
205
|
+
# Intents where the `prefect flow-run execute` supervisor owns the run's next state
|
|
206
|
+
# (`reschedule` proposes it; `relinquish` leaves it to retrying infrastructure), so
|
|
207
|
+
# the engine must exit without proposing one.
|
|
208
|
+
_SUPERVISOR_OWNED_INTENTS: frozenset[Intent] = frozenset({"reschedule", "relinquish"})
|
|
218
209
|
|
|
219
210
|
|
|
220
211
|
def _is_async_runtime_cancellation(exc: BaseException) -> bool:
|
|
@@ -1198,10 +1189,8 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1198
1189
|
if intent == "cancel":
|
|
1199
1190
|
self.handle_cancellation(exc)
|
|
1200
1191
|
elif intent is None:
|
|
1201
|
-
if _should_bubble_raw_sigterm_for_reschedule():
|
|
1202
|
-
raise
|
|
1203
1192
|
self.handle_crash(exc)
|
|
1204
|
-
|
|
1193
|
+
elif intent not in _SUPERVISOR_OWNED_INTENTS:
|
|
1205
1194
|
# Defensive: an unknown intent means the control
|
|
1206
1195
|
# listener was extended (e.g. "suspend" in a
|
|
1207
1196
|
# follow-up PR) without extending this dispatch.
|
|
@@ -1896,10 +1885,8 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1896
1885
|
if intent == "cancel":
|
|
1897
1886
|
await self.handle_cancellation(exc)
|
|
1898
1887
|
elif intent is None:
|
|
1899
|
-
if _should_bubble_raw_sigterm_for_reschedule():
|
|
1900
|
-
raise
|
|
1901
1888
|
await self.handle_crash(exc)
|
|
1902
|
-
|
|
1889
|
+
elif intent not in _SUPERVISOR_OWNED_INTENTS:
|
|
1903
1890
|
# Defensive: see sync engine's dispatch for why.
|
|
1904
1891
|
self.logger.error(
|
|
1905
1892
|
"Unhandled termination intent %r; treating as"
|
|
@@ -1936,6 +1923,13 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1936
1923
|
exc_info=exc,
|
|
1937
1924
|
)
|
|
1938
1925
|
raise
|
|
1926
|
+
if (
|
|
1927
|
+
_is_async_runtime_cancellation(exc)
|
|
1928
|
+
and _termination_intent() in _SUPERVISOR_OWNED_INTENTS
|
|
1929
|
+
):
|
|
1930
|
+
# A supervisor-driven SIGTERM can surface here as a cancellation
|
|
1931
|
+
# rather than a TerminationSignal.
|
|
1932
|
+
raise TerminationSignal(signal.SIGTERM) from exc
|
|
1939
1933
|
# We don't want to crash a flow run if the user code finished executing
|
|
1940
1934
|
if self.flow_run.state and not self.flow_run.state.is_final():
|
|
1941
1935
|
# BaseExceptions are caught and handled as crashes
|
|
@@ -77,9 +77,9 @@ This ordering is a hard constraint. Getting it wrong causes ClosedResourceError
|
|
|
77
77
|
- POSIX: ack only means "SIGTERM bridge is armed and intent is seeded." The runner's real `SIGTERM` is still the only trigger that interrupts blocking code. Kill happens immediately after ack.
|
|
78
78
|
- Windows: ack means the child has queued `_thread.interrupt_main(SIGTERM)`. The runner gives the child a 30 s grace window to self-exit before falling back to an external kill.
|
|
79
79
|
|
|
80
|
-
**Failure modes:** If the child never connects or never acks within 1 s, `signal()` returns `False`
|
|
80
|
+
**Failure modes:** If the child never connects or never acks within 1 s, `signal()` returns `False`. `CancellationManager` falls through to the normal graceful kill and the engine treats the termination as a crash. The `prefect flow-run execute` supervisor instead calls `ProcessManager.kill(force=True)` (SIGKILL, no grace), because an unacked engine would propose `Crashed` and undo a `reschedule`/`relinquish`.
|
|
81
81
|
|
|
82
|
-
**Extending intents:** The
|
|
82
|
+
**Extending intents:** The intents today are `"cancel"`, `"reschedule"` and `"relinquish"`. The byte map (`_BYTE_FOR_INTENT` in `_control_channel.py` and `_INTENT_FOR_BYTE` in `_internal/control_listener.py`) must stay in sync when adding new intents.
|
|
83
83
|
|
|
84
84
|
## ProcessStarter Strategy Pattern
|
|
85
85
|
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_control_channel.py
RENAMED
|
@@ -29,13 +29,13 @@ period. What the channel adds is a pre-seeded intent on the child side: by
|
|
|
29
29
|
the time the child's `SIGTERM` handler runs, `control_listener.get_intent()`
|
|
30
30
|
already returns the pre-seeded intent, so the engine's
|
|
31
31
|
`except TerminationSignal` block can dispatch on it (`on_cancellation` vs
|
|
32
|
-
`on_crashed
|
|
32
|
+
`on_crashed`, or leaving the state alone for `"reschedule"`/`"relinquish"`).
|
|
33
33
|
|
|
34
34
|
The channel is loopback-only, per-token authenticated, and best-effort: if
|
|
35
|
-
the child never connects or never acks, `signal` returns `False
|
|
36
|
-
|
|
37
|
-
the
|
|
38
|
-
|
|
35
|
+
the child never connects or never acks, `signal` returns `False`. Callers
|
|
36
|
+
decide what that means: cancellation falls through to a graceful kill and lets
|
|
37
|
+
the engine crash the run, while `prefect flow-run execute` kills without a
|
|
38
|
+
grace period so an unacked engine cannot crash a run it is about to retry.
|
|
39
39
|
|
|
40
40
|
This module is deliberately generic. The set of valid intents lives in
|
|
41
41
|
`prefect._internal.control_listener` as `Intent`; the wire
|
|
@@ -68,6 +68,8 @@ _DEFAULT_ACK_TIMEOUT = 1.0
|
|
|
68
68
|
# intent is a matched one-line change on each side.
|
|
69
69
|
_BYTE_FOR_INTENT: dict[Intent, bytes] = {
|
|
70
70
|
"cancel": b"c",
|
|
71
|
+
"reschedule": b"r",
|
|
72
|
+
"relinquish": b"q",
|
|
71
73
|
}
|
|
72
74
|
|
|
73
75
|
|
|
@@ -92,9 +94,8 @@ class ControlChannel:
|
|
|
92
94
|
Use as an async context manager. Inside the context, `port` is the
|
|
93
95
|
listener's bound port (suitable for injecting into child env vars).
|
|
94
96
|
|
|
95
|
-
|
|
96
|
-
`
|
|
97
|
-
the engine's `except TerminationSignal` dispatch.
|
|
97
|
+
Adding an intent means extending the `Intent` literal, the byte map, and the
|
|
98
|
+
engine's `except TerminationSignal` dispatch.
|
|
98
99
|
"""
|
|
99
100
|
|
|
100
101
|
def __init__(
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_process_manager.py
RENAMED
|
@@ -69,6 +69,18 @@ def _pid_is_alive(pid: int) -> bool:
|
|
|
69
69
|
kernel32.CloseHandle(handle)
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
def _hard_kill(pid: int) -> None:
|
|
73
|
+
"""Stop `pid` immediately, taking its process group when it leads one so a
|
|
74
|
+
wrapper command cannot leave the real process running orphaned."""
|
|
75
|
+
if sys.platform == "win32":
|
|
76
|
+
# Any signal other than the CTRL_* events is a TerminateProcess here.
|
|
77
|
+
os.kill(pid, signal.SIGTERM)
|
|
78
|
+
elif os.getpgid(pid) == pid:
|
|
79
|
+
os.killpg(pid, signal.SIGKILL)
|
|
80
|
+
else:
|
|
81
|
+
os.kill(pid, signal.SIGKILL)
|
|
82
|
+
|
|
83
|
+
|
|
72
84
|
@dataclass
|
|
73
85
|
class ProcessHandle:
|
|
74
86
|
_process: anyio.abc.Process | multiprocessing.context.SpawnProcess
|
|
@@ -197,7 +209,14 @@ class ProcessManager:
|
|
|
197
209
|
|
|
198
210
|
await anyio.sleep(min(check_interval, remaining))
|
|
199
211
|
|
|
200
|
-
async def kill(
|
|
212
|
+
async def kill(
|
|
213
|
+
self, flow_run_id: UUID, grace_seconds: float = 30, *, force: bool = False
|
|
214
|
+
) -> None:
|
|
215
|
+
"""Stop the process for `flow_run_id`.
|
|
216
|
+
|
|
217
|
+
`force` skips the graceful signal, for callers that must not let the process
|
|
218
|
+
run any more code; `grace_seconds` is unused in that case.
|
|
219
|
+
"""
|
|
201
220
|
handle = self._process_map.get(flow_run_id)
|
|
202
221
|
if handle is None:
|
|
203
222
|
self._logger.warning(
|
|
@@ -214,10 +233,22 @@ class ProcessManager:
|
|
|
214
233
|
)
|
|
215
234
|
return
|
|
216
235
|
|
|
236
|
+
if force:
|
|
237
|
+
try:
|
|
238
|
+
_hard_kill(pid)
|
|
239
|
+
except ProcessLookupError:
|
|
240
|
+
pass
|
|
241
|
+
return
|
|
242
|
+
|
|
217
243
|
if sys.platform == "win32":
|
|
218
244
|
os.kill(pid, signal.CTRL_BREAK_EVENT)
|
|
219
245
|
else:
|
|
220
|
-
|
|
246
|
+
try:
|
|
247
|
+
os.kill(pid, signal.SIGTERM)
|
|
248
|
+
except ProcessLookupError:
|
|
249
|
+
# Already reaped, e.g. re-killed from `__aexit__` after a cancelled
|
|
250
|
+
# executor skipped its cleanup.
|
|
251
|
+
return
|
|
221
252
|
|
|
222
253
|
check_interval = max(grace_seconds / 10, 1)
|
|
223
254
|
with anyio.move_on_after(grace_seconds):
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_engine.py
RENAMED
|
@@ -47,6 +47,7 @@ class EngineCommandStarter:
|
|
|
47
47
|
stream_output: bool = True,
|
|
48
48
|
heartbeat_seconds: int | None = None,
|
|
49
49
|
control_channel: ControlChannel | None = None,
|
|
50
|
+
isolate_process_group: bool = False,
|
|
50
51
|
) -> None:
|
|
51
52
|
self._tmp_dir = tmp_dir
|
|
52
53
|
self._storage = storage
|
|
@@ -58,6 +59,7 @@ class EngineCommandStarter:
|
|
|
58
59
|
self._stream_output = stream_output
|
|
59
60
|
self._heartbeat_seconds = heartbeat_seconds
|
|
60
61
|
self._control_channel = control_channel
|
|
62
|
+
self._isolate_process_group = isolate_process_group
|
|
61
63
|
|
|
62
64
|
async def start(
|
|
63
65
|
self,
|
|
@@ -76,6 +78,9 @@ class EngineCommandStarter:
|
|
|
76
78
|
kwargs: dict[str, object] = {}
|
|
77
79
|
if sys.platform == "win32":
|
|
78
80
|
kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP
|
|
81
|
+
elif self._isolate_process_group:
|
|
82
|
+
# So a group-wide SIGTERM cannot beat the caller's intent to the child.
|
|
83
|
+
kwargs["start_new_session"] = True
|
|
79
84
|
|
|
80
85
|
# Register the flow run with the control channel before spawning so
|
|
81
86
|
# the child can connect back as soon as it starts. Returned port +
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_workspace_starter.py
RENAMED
|
@@ -333,6 +333,7 @@ class WorkspaceResolvingEngineCommandStarter:
|
|
|
333
333
|
heartbeat_seconds: int | None = None,
|
|
334
334
|
deployment_name: str | None = None,
|
|
335
335
|
control_channel: ControlChannel | None = None,
|
|
336
|
+
isolate_process_group: bool = False,
|
|
336
337
|
) -> None:
|
|
337
338
|
self._workspace_root = workspace_root
|
|
338
339
|
self._command = command
|
|
@@ -340,6 +341,7 @@ class WorkspaceResolvingEngineCommandStarter:
|
|
|
340
341
|
self._heartbeat_seconds = heartbeat_seconds
|
|
341
342
|
self._deployment_name = deployment_name
|
|
342
343
|
self._control_channel = control_channel
|
|
344
|
+
self._isolate_process_group = isolate_process_group
|
|
343
345
|
self._workspace: PreparedWorkspace | None = None
|
|
344
346
|
|
|
345
347
|
@property
|
|
@@ -368,6 +370,7 @@ class WorkspaceResolvingEngineCommandStarter:
|
|
|
368
370
|
heartbeat_seconds=self._heartbeat_seconds,
|
|
369
371
|
deployment_name=self._deployment_name,
|
|
370
372
|
control_channel=self._control_channel,
|
|
373
|
+
isolate_process_group=self._isolate_process_group,
|
|
371
374
|
)
|
|
372
375
|
await starter.start(flow_run, task_status=task_status)
|
|
373
376
|
|
|
@@ -423,15 +423,36 @@ async def run_process(
|
|
|
423
423
|
task_status.started(value)
|
|
424
424
|
|
|
425
425
|
if stream_output:
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
426
|
+
try:
|
|
427
|
+
await consume_process_output(
|
|
428
|
+
process, stdout_sink=stream_output[0], stderr_sink=stream_output[1]
|
|
429
|
+
)
|
|
430
|
+
except Exception:
|
|
431
|
+
# Keep draining both pipes after an output sink fails so the process
|
|
432
|
+
# can finish without blocking on a full stdout or stderr buffer.
|
|
433
|
+
await _drain_process_output(process)
|
|
434
|
+
await process.wait()
|
|
435
|
+
raise
|
|
429
436
|
|
|
430
437
|
await process.wait()
|
|
431
438
|
|
|
432
439
|
return process
|
|
433
440
|
|
|
434
441
|
|
|
442
|
+
async def _drain_process_output(process: anyio.abc.Process) -> None:
|
|
443
|
+
async with anyio.create_task_group() as tg:
|
|
444
|
+
if process.stdout is not None:
|
|
445
|
+
tg.start_soon(
|
|
446
|
+
stream_text,
|
|
447
|
+
TextReceiveStream(process.stdout, errors="replace"),
|
|
448
|
+
)
|
|
449
|
+
if process.stderr is not None:
|
|
450
|
+
tg.start_soon(
|
|
451
|
+
stream_text,
|
|
452
|
+
TextReceiveStream(process.stderr, errors="replace"),
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
|
|
435
456
|
async def consume_process_output(
|
|
436
457
|
process: anyio.abc.Process,
|
|
437
458
|
stdout_sink: Optional[TextSink[str]] = None,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/_launchers.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/bundles/execute.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/manager.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/objects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/device_id.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/emit.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|