prefect-client 3.8.1.dev2__tar.gz → 3.8.1.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/PKG-INFO +1 -1
- prefect_client-3.8.1.dev4/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/futures.py +42 -20
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/base.py +111 -47
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/process.py +1 -102
- prefect_client-3.8.1.dev2/src/prefect/_build_info.py +0 -5
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/.gitignore +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/LICENSE +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/README.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/hatch_build.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/pyproject.toml +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/context.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/main.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/results.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/states.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/workers/utilities.py +0 -0
|
@@ -14,6 +14,7 @@ from typing import TYPE_CHECKING, Any, Callable, Generic
|
|
|
14
14
|
from typing_extensions import NamedTuple, Self, TypeVar
|
|
15
15
|
|
|
16
16
|
from prefect._flow_run_suspension import raise_if_flow_run_suspension_requested
|
|
17
|
+
from prefect._internal.concurrency.cancellation import CancelledError
|
|
17
18
|
from prefect._internal.waiters import FlowRunWaiter
|
|
18
19
|
from prefect.client.orchestration import get_client
|
|
19
20
|
from prefect.exceptions import ObjectNotFound
|
|
@@ -34,6 +35,14 @@ if TYPE_CHECKING:
|
|
|
34
35
|
logger: "logging.Logger" = get_logger(__name__)
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
class _WaitTimeoutError(TimeoutError):
|
|
39
|
+
"""Raised when Prefect's own waiting on futures times out.
|
|
40
|
+
|
|
41
|
+
Distinguishes a timeout produced by Prefect from a `TimeoutError` raised by
|
|
42
|
+
user code inside a task, which must be surfaced unchanged.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
37
46
|
class PrefectFuture(abc.ABC, Generic[R]):
|
|
38
47
|
"""
|
|
39
48
|
Abstract base class for Prefect futures. A Prefect future is a handle to the
|
|
@@ -570,25 +579,38 @@ class PrefectFutureList(list[PrefectFuture[R]], Iterator[PrefectFuture[R]]):
|
|
|
570
579
|
future_to_indices.setdefault(future, []).append(idx)
|
|
571
580
|
|
|
572
581
|
results: list[R] = [None] * len(self) # type: ignore[list-item]
|
|
582
|
+
timeout_message = (
|
|
583
|
+
f"Timed out waiting for all futures to complete within {timeout} seconds"
|
|
584
|
+
)
|
|
585
|
+
deadline = time.monotonic() + timeout if timeout is not None else None
|
|
573
586
|
|
|
574
587
|
try:
|
|
575
|
-
#
|
|
576
|
-
#
|
|
577
|
-
#
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
for
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
+
# `as_completed` de-duplicates internally; each unique future is
|
|
589
|
+
# yielded exactly once, in completion order. Its timeout scope stays
|
|
590
|
+
# entered while the loop body runs, so slow result retrieval (e.g.
|
|
591
|
+
# large data deserialization) is bounded by the caller's timeout too.
|
|
592
|
+
for future in as_completed(list(self), timeout=timeout):
|
|
593
|
+
result = future.result(raise_on_failure=raise_on_failure)
|
|
594
|
+
for i in future_to_indices[future]:
|
|
595
|
+
results[i] = result
|
|
596
|
+
# Retrieval can overrun the deadline without cancellation
|
|
597
|
+
# arriving, e.g. on Windows where no sync cancel scope arms.
|
|
598
|
+
if deadline is not None and time.monotonic() >= deadline:
|
|
599
|
+
raise TimeoutError(timeout_message)
|
|
600
|
+
# A `TimeoutError` from inside a task is not a `_WaitTimeoutError` and
|
|
601
|
+
# propagates unchanged.
|
|
602
|
+
except _WaitTimeoutError as exc:
|
|
603
|
+
raise TimeoutError(timeout_message) from exc
|
|
604
|
+
except CancelledError as exc:
|
|
605
|
+
# Cancel scopes deliver cancellation to the frame the supervised
|
|
606
|
+
# thread is currently in. While `as_completed` is suspended at its
|
|
607
|
+
# `yield`, that frame is this one, so its `timeout_context` never
|
|
608
|
+
# sees the error and cannot convert it. Only claim the cancellation
|
|
609
|
+
# if our own deadline has passed; otherwise it belongs to an
|
|
610
|
+
# enclosing scope, such as a flow run timeout.
|
|
611
|
+
if deadline is None or time.monotonic() < deadline:
|
|
588
612
|
raise
|
|
589
|
-
raise TimeoutError(
|
|
590
|
-
f"Timed out waiting for all futures to complete within {timeout} seconds"
|
|
591
|
-
) from exc
|
|
613
|
+
raise TimeoutError(timeout_message) from exc
|
|
592
614
|
|
|
593
615
|
return results
|
|
594
616
|
|
|
@@ -612,7 +634,7 @@ def as_completed(
|
|
|
612
634
|
pending = unique_futures
|
|
613
635
|
deadline: float | None = None
|
|
614
636
|
try:
|
|
615
|
-
with timeout_context(timeout):
|
|
637
|
+
with timeout_context(timeout, timeout_exc_type=_WaitTimeoutError):
|
|
616
638
|
done = {f for f in unique_futures if f._final_state} # type: ignore[privateUsage]
|
|
617
639
|
pending = unique_futures - done
|
|
618
640
|
yield from done
|
|
@@ -638,7 +660,7 @@ def as_completed(
|
|
|
638
660
|
assert deadline is not None
|
|
639
661
|
remaining = deadline - time.monotonic()
|
|
640
662
|
if not finished_event.wait(timeout=max(remaining, 0.0)):
|
|
641
|
-
raise
|
|
663
|
+
raise _WaitTimeoutError
|
|
642
664
|
|
|
643
665
|
with finished_lock:
|
|
644
666
|
done = finished_futures
|
|
@@ -649,8 +671,8 @@ def as_completed(
|
|
|
649
671
|
pending.remove(future)
|
|
650
672
|
yield future
|
|
651
673
|
|
|
652
|
-
except
|
|
653
|
-
raise
|
|
674
|
+
except _WaitTimeoutError:
|
|
675
|
+
raise _WaitTimeoutError(
|
|
654
676
|
"%d (of %d) futures unfinished" % (len(pending), total_futures)
|
|
655
677
|
)
|
|
656
678
|
|
|
@@ -26,6 +26,7 @@ from zoneinfo import ZoneInfo
|
|
|
26
26
|
|
|
27
27
|
import anyio
|
|
28
28
|
import anyio.abc
|
|
29
|
+
import httpx
|
|
29
30
|
from exceptiongroup import BaseExceptionGroup, ExceptionGroup
|
|
30
31
|
from pydantic import BaseModel, Field, PrivateAttr, field_validator
|
|
31
32
|
from pydantic.json_schema import GenerateJsonSchema
|
|
@@ -118,6 +119,13 @@ if TYPE_CHECKING:
|
|
|
118
119
|
from prefect.flows import Flow
|
|
119
120
|
|
|
120
121
|
|
|
122
|
+
def _is_transient_api_error(exc: httpx.HTTPError) -> bool:
|
|
123
|
+
"""Whether an API error is likely to resolve itself if retried."""
|
|
124
|
+
if isinstance(exc, httpx.HTTPStatusError):
|
|
125
|
+
return exc.response.status_code >= 500
|
|
126
|
+
return isinstance(exc, httpx.TransportError)
|
|
127
|
+
|
|
128
|
+
|
|
121
129
|
class BaseJobConfiguration(BaseModel):
|
|
122
130
|
command: Optional[str] = Field(
|
|
123
131
|
default=None,
|
|
@@ -681,6 +689,7 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
681
689
|
self._submitting_flow_run_ids: set[UUID] = set()
|
|
682
690
|
self._scheduled_task_scopes: set[anyio.CancelScope] = set()
|
|
683
691
|
self._worker_channel: Optional[WorkerChannel] = None
|
|
692
|
+
self._has_successfully_synced = False
|
|
684
693
|
|
|
685
694
|
# Cancellation handling
|
|
686
695
|
self._cancelling_observer: Optional[FlowRunCancellingObserver] = None
|
|
@@ -836,29 +845,36 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
836
845
|
healthcheck_thread = None
|
|
837
846
|
try:
|
|
838
847
|
async with self as worker:
|
|
839
|
-
|
|
848
|
+
polling_service = partial(
|
|
849
|
+
critical_service_loop,
|
|
850
|
+
workload=self.get_and_submit_flow_runs,
|
|
851
|
+
interval=PREFECT_WORKER_QUERY_SECONDS.value(),
|
|
852
|
+
run_once=run_once,
|
|
853
|
+
jitter_range=0.3,
|
|
854
|
+
backoff=4, # Up to ~1 minute interval during backoff
|
|
855
|
+
)
|
|
856
|
+
sync_service = partial(
|
|
857
|
+
critical_service_loop,
|
|
858
|
+
workload=self._sync_and_initialize,
|
|
859
|
+
interval=self.heartbeat_interval_seconds,
|
|
860
|
+
run_once=run_once,
|
|
861
|
+
jitter_range=0.3,
|
|
862
|
+
backoff=4,
|
|
863
|
+
)
|
|
864
|
+
|
|
840
865
|
async with anyio.create_task_group() as loops_task_group:
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
)
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
partial(
|
|
854
|
-
critical_service_loop,
|
|
855
|
-
workload=self.sync_with_backend,
|
|
856
|
-
interval=self.heartbeat_interval_seconds,
|
|
857
|
-
run_once=run_once,
|
|
858
|
-
jitter_range=0.3,
|
|
859
|
-
backoff=4,
|
|
860
|
-
)
|
|
861
|
-
)
|
|
866
|
+
if run_once:
|
|
867
|
+
|
|
868
|
+
async def run_once_services() -> None:
|
|
869
|
+
# A one-shot poll needs the work-pool configuration
|
|
870
|
+
# produced by the one-shot synchronization attempt.
|
|
871
|
+
await sync_service()
|
|
872
|
+
await polling_service()
|
|
873
|
+
|
|
874
|
+
loops_task_group.start_soon(run_once_services)
|
|
875
|
+
else:
|
|
876
|
+
loops_task_group.start_soon(polling_service)
|
|
877
|
+
loops_task_group.start_soon(sync_service)
|
|
862
878
|
|
|
863
879
|
self._started_event = await self._emit_worker_started_event()
|
|
864
880
|
|
|
@@ -1193,6 +1209,7 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1193
1209
|
async def setup(self) -> None:
|
|
1194
1210
|
"""Prepares the worker to run."""
|
|
1195
1211
|
self._logger.debug("Setting up worker...")
|
|
1212
|
+
self._has_successfully_synced = False
|
|
1196
1213
|
self._runs_task_group = anyio.create_task_group()
|
|
1197
1214
|
self._limiter = (
|
|
1198
1215
|
anyio.CapacityLimiter(self._limit) if self._limit is not None else None
|
|
@@ -1210,31 +1227,16 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1210
1227
|
# it in all API requests made by this worker process.
|
|
1211
1228
|
os.environ["PREFECT__WORKER_NAME"] = self.name
|
|
1212
1229
|
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
)
|
|
1224
|
-
),
|
|
1225
|
-
polling_interval=get_current_settings().worker.cancellation_poll_seconds,
|
|
1226
|
-
event_filter=EventFilter(
|
|
1227
|
-
event=EventNameFilter(name=["prefect.flow-run.Cancelling"]),
|
|
1228
|
-
any_resource=EventAnyResourceFilter(
|
|
1229
|
-
id=[f"prefect.work-pool.{self._work_pool.id}"]
|
|
1230
|
-
),
|
|
1231
|
-
),
|
|
1232
|
-
)
|
|
1233
|
-
)
|
|
1234
|
-
except Exception as exc:
|
|
1235
|
-
self._logger.warning(
|
|
1236
|
-
"Failed to setup cancellation handling: %s", exc, exc_info=True
|
|
1237
|
-
)
|
|
1230
|
+
try:
|
|
1231
|
+
await self._sync_and_initialize()
|
|
1232
|
+
except httpx.HTTPError as exc:
|
|
1233
|
+
if not _is_transient_api_error(exc):
|
|
1234
|
+
raise
|
|
1235
|
+
self._logger.warning(
|
|
1236
|
+
"Unable to reach the Prefect API while starting up; the worker will "
|
|
1237
|
+
"keep attempting to connect: %s",
|
|
1238
|
+
exc,
|
|
1239
|
+
)
|
|
1238
1240
|
|
|
1239
1241
|
self.is_setup = True
|
|
1240
1242
|
|
|
@@ -1266,6 +1268,8 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1266
1268
|
self._runs_task_group = None
|
|
1267
1269
|
self._client = None
|
|
1268
1270
|
self._worker_channel = None
|
|
1271
|
+
self._has_successfully_synced = False
|
|
1272
|
+
self._cancelling_observer = None
|
|
1269
1273
|
|
|
1270
1274
|
def is_worker_still_polling(self, query_interval_seconds: float) -> bool:
|
|
1271
1275
|
"""
|
|
@@ -1297,6 +1301,14 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1297
1301
|
return is_still_polling
|
|
1298
1302
|
|
|
1299
1303
|
async def get_and_submit_flow_runs(self) -> list["FlowRun"]:
|
|
1304
|
+
if not self._has_successfully_synced:
|
|
1305
|
+
self._logger.debug(
|
|
1306
|
+
"Worker has not yet synced with the Prefect API; "
|
|
1307
|
+
"skipping flow run submission."
|
|
1308
|
+
)
|
|
1309
|
+
self._last_polled_time = prefect.types._datetime.now("UTC")
|
|
1310
|
+
return []
|
|
1311
|
+
|
|
1300
1312
|
runs_response = await self._get_scheduled_flow_runs()
|
|
1301
1313
|
|
|
1302
1314
|
self._last_polled_time = prefect.types._datetime.now("UTC")
|
|
@@ -1341,6 +1353,15 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1341
1353
|
return WorkerMetadata(integrations=integration_versions)
|
|
1342
1354
|
return None
|
|
1343
1355
|
|
|
1356
|
+
async def _sync_and_initialize(self) -> None:
|
|
1357
|
+
"""Synchronize the worker and initialize sync-dependent services."""
|
|
1358
|
+
await self.sync_with_backend()
|
|
1359
|
+
|
|
1360
|
+
# Preserve startup behavior for custom workers that override the public
|
|
1361
|
+
# synchronization method without calling `super()`.
|
|
1362
|
+
if not self._has_successfully_synced:
|
|
1363
|
+
await self._initialize_after_sync()
|
|
1364
|
+
|
|
1344
1365
|
async def sync_with_backend(self) -> None:
|
|
1345
1366
|
"""
|
|
1346
1367
|
Updates the worker's local information about it's current work pool and
|
|
@@ -1353,12 +1374,55 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1353
1374
|
return
|
|
1354
1375
|
|
|
1355
1376
|
await self._worker_channel.sync(self._runs_task_group)
|
|
1377
|
+
await self._initialize_after_sync()
|
|
1356
1378
|
|
|
1357
1379
|
self._logger.debug(
|
|
1358
1380
|
"Worker synchronized with the Prefect API server. "
|
|
1359
1381
|
+ (f"Remote ID: {self.backend_id}" if self.backend_id else "")
|
|
1360
1382
|
)
|
|
1361
1383
|
|
|
1384
|
+
async def _initialize_after_sync(self) -> None:
|
|
1385
|
+
"""Initialize services that depend on a completed backend sync."""
|
|
1386
|
+
# Synchronization can succeed without a work pool when automatic work-pool
|
|
1387
|
+
# creation is disabled. The worker cannot submit runs without its template.
|
|
1388
|
+
if self._work_pool is None:
|
|
1389
|
+
return
|
|
1390
|
+
|
|
1391
|
+
await self._setup_cancellation_observer()
|
|
1392
|
+
self._has_successfully_synced = True
|
|
1393
|
+
|
|
1394
|
+
async def _setup_cancellation_observer(self) -> None:
|
|
1395
|
+
"""Start observing flow run cancellations if not already observing.
|
|
1396
|
+
|
|
1397
|
+
Requires a work pool, which is only available once the worker has
|
|
1398
|
+
synced with the API.
|
|
1399
|
+
"""
|
|
1400
|
+
if self._cancelling_observer is not None or self._work_pool is None:
|
|
1401
|
+
return
|
|
1402
|
+
|
|
1403
|
+
if not get_current_settings().worker.enable_cancellation:
|
|
1404
|
+
return
|
|
1405
|
+
|
|
1406
|
+
try:
|
|
1407
|
+
self._cancelling_observer = await self._exit_stack.enter_async_context(
|
|
1408
|
+
FlowRunCancellingObserver(
|
|
1409
|
+
on_cancelling=lambda flow_run_id: self._runs_task_group.start_soon(
|
|
1410
|
+
self._cancel_run, flow_run_id
|
|
1411
|
+
),
|
|
1412
|
+
polling_interval=get_current_settings().worker.cancellation_poll_seconds,
|
|
1413
|
+
event_filter=EventFilter(
|
|
1414
|
+
event=EventNameFilter(name=["prefect.flow-run.Cancelling"]),
|
|
1415
|
+
any_resource=EventAnyResourceFilter(
|
|
1416
|
+
id=[f"prefect.work-pool.{self._work_pool.id}"]
|
|
1417
|
+
),
|
|
1418
|
+
),
|
|
1419
|
+
)
|
|
1420
|
+
)
|
|
1421
|
+
except Exception as exc:
|
|
1422
|
+
self._logger.warning(
|
|
1423
|
+
"Failed to setup cancellation handling: %s", exc, exc_info=True
|
|
1424
|
+
)
|
|
1425
|
+
|
|
1362
1426
|
def _ensure_worker_channel(self) -> None:
|
|
1363
1427
|
if self._client is None:
|
|
1364
1428
|
return
|
|
@@ -19,11 +19,9 @@ from __future__ import annotations
|
|
|
19
19
|
import contextlib
|
|
20
20
|
import os
|
|
21
21
|
import tempfile
|
|
22
|
-
import threading
|
|
23
22
|
import warnings
|
|
24
|
-
from functools import partial
|
|
25
23
|
from pathlib import Path
|
|
26
|
-
from typing import TYPE_CHECKING, Any,
|
|
24
|
+
from typing import TYPE_CHECKING, Any, Optional, TypeVar
|
|
27
25
|
|
|
28
26
|
import anyio
|
|
29
27
|
import anyio.abc
|
|
@@ -32,14 +30,8 @@ from pydantic import Field, field_validator
|
|
|
32
30
|
from prefect._internal.schemas.validators import validate_working_dir
|
|
33
31
|
from prefect.client.schemas.objects import Flow as APIFlow
|
|
34
32
|
from prefect.runner.runner import Runner
|
|
35
|
-
from prefect.settings import PREFECT_WORKER_QUERY_SECONDS
|
|
36
33
|
from prefect.states import Pending
|
|
37
34
|
from prefect.utilities.processutils import command_to_string, get_sys_executable
|
|
38
|
-
from prefect.utilities.services import (
|
|
39
|
-
critical_service_loop,
|
|
40
|
-
start_client_metrics_server,
|
|
41
|
-
stop_client_metrics_server,
|
|
42
|
-
)
|
|
43
35
|
from prefect.workers.base import (
|
|
44
36
|
BaseJobConfiguration,
|
|
45
37
|
BaseVariables,
|
|
@@ -141,99 +133,6 @@ class ProcessWorker(
|
|
|
141
133
|
_documentation_url = "https://docs.prefect.io/latest/get-started/quickstart"
|
|
142
134
|
_logo_url = "https://cdn.sanity.io/images/3ugk85nk/production/356e6766a91baf20e1d08bbe16e8b5aaef4d8643-48x48.png"
|
|
143
135
|
|
|
144
|
-
async def start(
|
|
145
|
-
self,
|
|
146
|
-
run_once: bool = False,
|
|
147
|
-
with_healthcheck: bool = False,
|
|
148
|
-
printer: Callable[..., None] = print,
|
|
149
|
-
) -> None:
|
|
150
|
-
"""
|
|
151
|
-
Starts the worker and runs the main worker loops.
|
|
152
|
-
|
|
153
|
-
By default, the worker will run loops to poll for scheduled/cancelled flow
|
|
154
|
-
runs and sync with the Prefect API server.
|
|
155
|
-
|
|
156
|
-
If `run_once` is set, the worker will only run each loop once and then return.
|
|
157
|
-
|
|
158
|
-
If `with_healthcheck` is set, the worker will start a healthcheck server which
|
|
159
|
-
can be used to determine if the worker is still polling for flow runs and restart
|
|
160
|
-
the worker if necessary.
|
|
161
|
-
|
|
162
|
-
Args:
|
|
163
|
-
run_once: If set, the worker will only run each loop once then return.
|
|
164
|
-
with_healthcheck: If set, the worker will start a healthcheck server.
|
|
165
|
-
printer: A `print`-like function where logs will be reported.
|
|
166
|
-
"""
|
|
167
|
-
healthcheck_server = None
|
|
168
|
-
healthcheck_thread = None
|
|
169
|
-
try:
|
|
170
|
-
async with self as worker:
|
|
171
|
-
# wait for an initial heartbeat to configure the worker
|
|
172
|
-
await worker.sync_with_backend()
|
|
173
|
-
# schedule the scheduled flow run polling loop
|
|
174
|
-
async with anyio.create_task_group() as loops_task_group:
|
|
175
|
-
loops_task_group.start_soon(
|
|
176
|
-
partial(
|
|
177
|
-
critical_service_loop,
|
|
178
|
-
workload=self.get_and_submit_flow_runs,
|
|
179
|
-
interval=PREFECT_WORKER_QUERY_SECONDS.value(),
|
|
180
|
-
run_once=run_once,
|
|
181
|
-
jitter_range=0.3,
|
|
182
|
-
backoff=4, # Up to ~1 minute interval during backoff
|
|
183
|
-
)
|
|
184
|
-
)
|
|
185
|
-
# schedule the sync loop
|
|
186
|
-
loops_task_group.start_soon(
|
|
187
|
-
partial(
|
|
188
|
-
critical_service_loop,
|
|
189
|
-
workload=self.sync_with_backend,
|
|
190
|
-
interval=self.heartbeat_interval_seconds,
|
|
191
|
-
run_once=run_once,
|
|
192
|
-
jitter_range=0.3,
|
|
193
|
-
backoff=4,
|
|
194
|
-
)
|
|
195
|
-
)
|
|
196
|
-
|
|
197
|
-
self._started_event = await self._emit_worker_started_event()
|
|
198
|
-
|
|
199
|
-
start_client_metrics_server()
|
|
200
|
-
|
|
201
|
-
if with_healthcheck:
|
|
202
|
-
from prefect.workers.server import build_healthcheck_server
|
|
203
|
-
|
|
204
|
-
# we'll start the ASGI server in a separate thread so that
|
|
205
|
-
# uvicorn does not block the main thread
|
|
206
|
-
healthcheck_server = build_healthcheck_server(
|
|
207
|
-
worker=worker,
|
|
208
|
-
query_interval_seconds=PREFECT_WORKER_QUERY_SECONDS.value(),
|
|
209
|
-
)
|
|
210
|
-
healthcheck_thread = threading.Thread(
|
|
211
|
-
name="healthcheck-server-thread",
|
|
212
|
-
target=healthcheck_server.run,
|
|
213
|
-
daemon=True,
|
|
214
|
-
)
|
|
215
|
-
healthcheck_thread.start()
|
|
216
|
-
printer(f"Worker {worker.name!r} started!")
|
|
217
|
-
|
|
218
|
-
# If running once, wait for active runs to complete before exiting
|
|
219
|
-
if run_once and self._limiter:
|
|
220
|
-
while self.limiter.borrowed_tokens > 0:
|
|
221
|
-
self._logger.debug(
|
|
222
|
-
"Waiting for %s active run(s) to finish before shutdown...",
|
|
223
|
-
self.limiter.borrowed_tokens,
|
|
224
|
-
)
|
|
225
|
-
await anyio.sleep(0.1)
|
|
226
|
-
finally:
|
|
227
|
-
stop_client_metrics_server()
|
|
228
|
-
|
|
229
|
-
if healthcheck_server and healthcheck_thread:
|
|
230
|
-
self._logger.debug("Stopping healthcheck server...")
|
|
231
|
-
healthcheck_server.should_exit = True
|
|
232
|
-
healthcheck_thread.join()
|
|
233
|
-
self._logger.debug("Healthcheck server stopped.")
|
|
234
|
-
|
|
235
|
-
printer(f"Worker {worker.name!r} stopped!")
|
|
236
|
-
|
|
237
136
|
async def run(
|
|
238
137
|
self,
|
|
239
138
|
flow_run: "FlowRun",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/_launchers.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/bundles/execute.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/manager.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_experimental/sla/objects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/device_id.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/emit.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/api.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/calls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/threads.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/concurrency/waiters.py
RENAMED
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/control_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.1.dev2 → prefect_client-3.8.1.dev4}/src/prefect/_internal/installation.py
RENAMED
|
File without changes
|