prefect-client 3.8.3.dev1__tar.gz → 3.8.3.dev3__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.3.dev1 → prefect_client-3.8.3.dev3}/PKG-INFO +1 -1
- prefect_client-3.8.3.dev3/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/cancellation.py +12 -9
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/observers.py +30 -17
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/clients.py +15 -4
- prefect_client-3.8.3.dev3/src/prefect/runner/_uv_command.py +90 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_workspace_starter.py +7 -66
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/storage.py +3 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/process.py +44 -5
- prefect_client-3.8.3.dev1/src/prefect/_build_info.py +0 -5
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/.gitignore +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/LICENSE +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/README.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/hatch_build.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/pyproject.toml +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/context.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/main.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/results.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/states.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/workers/utilities.py +0 -0
|
@@ -424,11 +424,18 @@ class WatcherThreadCancelScope(CancelScope):
|
|
|
424
424
|
return self
|
|
425
425
|
|
|
426
426
|
def __exit__(self, *_: Any) -> Optional[bool]:
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
427
|
+
# The enforcer thread can inject a cancellation exception at any instruction in
|
|
428
|
+
# this frame, so the event must be set from a `finally` to guarantee the
|
|
429
|
+
# enforcer is always released.
|
|
430
|
+
try:
|
|
431
|
+
retval = super().__exit__(*_)
|
|
432
|
+
finally:
|
|
433
|
+
self._event.set()
|
|
434
|
+
if self._enforcer_thread:
|
|
435
|
+
logger.debug(
|
|
436
|
+
"%r joining enforcer thread %r", self, self._enforcer_thread
|
|
437
|
+
)
|
|
438
|
+
self._enforcer_thread.join()
|
|
432
439
|
return retval
|
|
433
440
|
|
|
434
441
|
def _send_cancelled_error(self):
|
|
@@ -458,10 +465,6 @@ class WatcherThreadCancelScope(CancelScope):
|
|
|
458
465
|
with _get_thread_shield(self._supervised_thread):
|
|
459
466
|
self._send_cancelled_error()
|
|
460
467
|
|
|
461
|
-
# Wait for the supervised thread to exit its context
|
|
462
|
-
logger.debug("%r waiting for supervised thread to exit", self)
|
|
463
|
-
self._event.wait()
|
|
464
|
-
|
|
465
468
|
def cancel(self, throw: bool = True):
|
|
466
469
|
if not super().cancel():
|
|
467
470
|
return False
|
|
@@ -24,8 +24,9 @@ from prefect.exceptions import ObjectNotFound
|
|
|
24
24
|
from prefect.logging.loggers import get_logger
|
|
25
25
|
from prefect.utilities.services import critical_service_loop
|
|
26
26
|
|
|
27
|
-
# How long to wait before warning that a suspension
|
|
28
|
-
# how often to look initially, and the retry cap after
|
|
27
|
+
# How long to wait before warning that a suspension transition is still not
|
|
28
|
+
# visible on the flow run, how often to look initially, and the retry cap after
|
|
29
|
+
# the warning.
|
|
29
30
|
SUSPENSION_CONFIRMATION_WARNING_AFTER = 30.0
|
|
30
31
|
SUSPENSION_CONFIRMATION_INTERVAL = 0.5
|
|
31
32
|
SUSPENSION_CONFIRMATION_MAX_INTERVAL = 10.0
|
|
@@ -113,28 +114,40 @@ class _SuspensionWatch:
|
|
|
113
114
|
|
|
114
115
|
while not self._closed and not self.is_suspended:
|
|
115
116
|
try:
|
|
116
|
-
|
|
117
|
+
flow_run = await self._client.read_flow_run(self.flow_run_id)
|
|
117
118
|
except ObjectNotFound:
|
|
118
|
-
|
|
119
|
+
self._logger.debug(
|
|
120
|
+
"Flow run %s no longer exists; abandoning suspension confirmation.",
|
|
121
|
+
self.flow_run_id,
|
|
122
|
+
)
|
|
123
|
+
return
|
|
119
124
|
except Exception as exc:
|
|
120
125
|
last_error = exc
|
|
121
126
|
else:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
state = flow_run.state
|
|
128
|
+
if state is not None:
|
|
129
|
+
if state.id == state_id or is_suspended_flow_run_state(state):
|
|
130
|
+
self.notify_if_suspended(state)
|
|
131
|
+
return
|
|
132
|
+
if state.timestamp >= occurred:
|
|
133
|
+
# Superseded (e.g. resumed) before confirmation: still
|
|
134
|
+
# stop, or this engine could double-execute alongside
|
|
135
|
+
# the resumed run's fresh submission.
|
|
136
|
+
self.notify_if_suspended(
|
|
137
|
+
State(
|
|
138
|
+
id=state_id,
|
|
139
|
+
type=StateType.PAUSED,
|
|
140
|
+
name="Suspended",
|
|
141
|
+
timestamp=occurred,
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
return
|
|
133
145
|
|
|
134
146
|
if not warned and time.monotonic() >= warning_deadline:
|
|
135
147
|
self._logger.warning(
|
|
136
|
-
"Received a suspension event for flow run %s, but state %s
|
|
137
|
-
" not become
|
|
148
|
+
"Received a suspension event for flow run %s, but its state %s"
|
|
149
|
+
" has not become visible within %s seconds; continuing to"
|
|
150
|
+
" retry.",
|
|
138
151
|
self.flow_run_id,
|
|
139
152
|
state_id,
|
|
140
153
|
SUSPENSION_CONFIRMATION_WARNING_AFTER,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import asyncio
|
|
3
|
+
import base64
|
|
3
4
|
from datetime import timedelta
|
|
4
5
|
from types import TracebackType
|
|
5
6
|
from typing import (
|
|
@@ -252,6 +253,11 @@ class AssertingEventsClient(EventsClient):
|
|
|
252
253
|
return self
|
|
253
254
|
|
|
254
255
|
|
|
256
|
+
def _basic_auth_token(auth_string: str) -> str:
|
|
257
|
+
"""Encode an auth string of the form 'user:password' for basic authentication"""
|
|
258
|
+
return base64.b64encode(auth_string.encode("utf-8")).decode("utf-8")
|
|
259
|
+
|
|
260
|
+
|
|
255
261
|
def _get_api_url_and_key(
|
|
256
262
|
api_url: Optional[str], api_key: Optional[str]
|
|
257
263
|
) -> Tuple[str, str]:
|
|
@@ -303,10 +309,15 @@ class PrefectEventsClient(EventsClient):
|
|
|
303
309
|
auth_string.get_secret_value() if auth_string is not None else None
|
|
304
310
|
)
|
|
305
311
|
self._events_socket_url = events_in_socket_from_api_url(api_url)
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
312
|
+
connect_kwargs: Dict[str, Any] = {"subprotocols": [Subprotocol("prefect")]}
|
|
313
|
+
if self._auth_token:
|
|
314
|
+
# Servers and proxies that require basic authentication reject the
|
|
315
|
+
# HTTP upgrade request before the "prefect" subprotocol auth
|
|
316
|
+
# handshake can run, so also send the credentials as a header.
|
|
317
|
+
connect_kwargs["additional_headers"] = {
|
|
318
|
+
"Authorization": f"Basic {_basic_auth_token(self._auth_token)}"
|
|
319
|
+
}
|
|
320
|
+
self._connect = websocket_connect(self._events_socket_url, **connect_kwargs)
|
|
310
321
|
self._websocket = None
|
|
311
322
|
self._reconnection_attempts = reconnection_attempts
|
|
312
323
|
self._unconfirmed_events = []
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Auto-`uv run` launcher command construction shared by runner and worker paths."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import shutil
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Iterable
|
|
8
|
+
|
|
9
|
+
from packaging.requirements import InvalidRequirement, Requirement
|
|
10
|
+
from packaging.utils import canonicalize_name
|
|
11
|
+
|
|
12
|
+
from prefect._internal.compatibility.backports import tomllib
|
|
13
|
+
from prefect.settings import get_current_settings
|
|
14
|
+
from prefect.utilities.processutils import command_to_string
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _dependencies_include_prefect(dependencies: object) -> bool:
|
|
18
|
+
if not isinstance(dependencies, Iterable) or isinstance(dependencies, (str, bytes)):
|
|
19
|
+
return False
|
|
20
|
+
|
|
21
|
+
for dependency in dependencies:
|
|
22
|
+
if not isinstance(dependency, str):
|
|
23
|
+
continue
|
|
24
|
+
try:
|
|
25
|
+
name = Requirement(dependency).name
|
|
26
|
+
except InvalidRequirement:
|
|
27
|
+
continue
|
|
28
|
+
if canonicalize_name(name) == "prefect":
|
|
29
|
+
return True
|
|
30
|
+
return False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
|
|
34
|
+
try:
|
|
35
|
+
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
|
|
36
|
+
except (OSError, tomllib.TOMLDecodeError):
|
|
37
|
+
return False
|
|
38
|
+
|
|
39
|
+
project = data.get("project")
|
|
40
|
+
if not isinstance(project, dict):
|
|
41
|
+
return False
|
|
42
|
+
|
|
43
|
+
return _dependencies_include_prefect(project.get("dependencies"))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def uv_project_command(
|
|
47
|
+
project_root: Path | None,
|
|
48
|
+
engine_args: Iterable[str],
|
|
49
|
+
path: str | None = None,
|
|
50
|
+
auto_install_dependencies: bool | None = None,
|
|
51
|
+
) -> str | None:
|
|
52
|
+
"""Build an auto-`uv run` command for a project directory, if applicable.
|
|
53
|
+
|
|
54
|
+
Returns `None` unless dependency auto-installation is enabled, `project_root`
|
|
55
|
+
contains a `pyproject.toml` declaring `prefect` as a project dependency, and
|
|
56
|
+
`uv` is discoverable on `path` (or the current `PATH` when `path` is `None`).
|
|
57
|
+
|
|
58
|
+
`auto_install_dependencies` overrides the current setting value, for callers
|
|
59
|
+
that resolve the setting from a run-specific environment.
|
|
60
|
+
"""
|
|
61
|
+
if auto_install_dependencies is None:
|
|
62
|
+
auto_install_dependencies = (
|
|
63
|
+
get_current_settings().runner.auto_install_dependencies
|
|
64
|
+
)
|
|
65
|
+
if not auto_install_dependencies:
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
if project_root is None:
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
pyproject = project_root / "pyproject.toml"
|
|
72
|
+
if not pyproject.is_file() or not _pyproject_declares_prefect_dependency(pyproject):
|
|
73
|
+
return None
|
|
74
|
+
|
|
75
|
+
uv_executable = (
|
|
76
|
+
shutil.which("uv", path=path) if path is not None else shutil.which("uv")
|
|
77
|
+
)
|
|
78
|
+
if uv_executable is None:
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
return command_to_string(
|
|
82
|
+
[
|
|
83
|
+
uv_executable,
|
|
84
|
+
"run",
|
|
85
|
+
"--no-default-groups",
|
|
86
|
+
"--project",
|
|
87
|
+
str(project_root),
|
|
88
|
+
*engine_args,
|
|
89
|
+
]
|
|
90
|
+
)
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/runner/_workspace_starter.py
RENAMED
|
@@ -2,26 +2,23 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import functools
|
|
4
4
|
import os
|
|
5
|
-
import shutil
|
|
6
5
|
import site
|
|
7
6
|
import subprocess
|
|
8
7
|
import sys
|
|
9
8
|
import sysconfig
|
|
10
9
|
from contextlib import contextmanager
|
|
11
10
|
from pathlib import Path
|
|
12
|
-
from typing import TYPE_CHECKING, Any,
|
|
11
|
+
from typing import TYPE_CHECKING, Any, Iterator
|
|
13
12
|
from uuid import UUID
|
|
14
13
|
|
|
15
14
|
import anyio
|
|
16
15
|
import anyio.abc
|
|
17
|
-
from packaging.requirements import InvalidRequirement, Requirement
|
|
18
|
-
from packaging.utils import canonicalize_name
|
|
19
16
|
|
|
20
|
-
from prefect._internal.compatibility.backports import tomllib
|
|
21
17
|
from prefect.exceptions import MissingFlowError
|
|
22
18
|
from prefect.flows import load_flow_from_entrypoint, load_function_and_convert_to_flow
|
|
23
19
|
from prefect.runner._process_manager import ProcessHandle
|
|
24
20
|
from prefect.runner._starter_engine import EngineCommandStarter
|
|
21
|
+
from prefect.runner._uv_command import uv_project_command
|
|
25
22
|
from prefect.runner._workspace_resolver import (
|
|
26
23
|
PreparedWorkspace,
|
|
27
24
|
PreparedWorkspaceResult,
|
|
@@ -29,7 +26,7 @@ from prefect.runner._workspace_resolver import (
|
|
|
29
26
|
)
|
|
30
27
|
from prefect.settings import get_current_settings
|
|
31
28
|
from prefect.utilities.asyncutils import run_sync_in_worker_thread
|
|
32
|
-
from prefect.utilities.processutils import
|
|
29
|
+
from prefect.utilities.processutils import sanitize_subprocess_env
|
|
33
30
|
|
|
34
31
|
if TYPE_CHECKING:
|
|
35
32
|
from prefect.client.schemas.objects import FlowRun
|
|
@@ -217,67 +214,11 @@ def _absolute_file_entrypoint(workspace: PreparedWorkspace) -> str:
|
|
|
217
214
|
return f"{entrypoint_path.resolve()}:{object_name}"
|
|
218
215
|
|
|
219
216
|
|
|
220
|
-
def _dependencies_include_prefect(dependencies: object) -> bool:
|
|
221
|
-
if not isinstance(dependencies, Iterable) or isinstance(dependencies, (str, bytes)):
|
|
222
|
-
return False
|
|
223
|
-
|
|
224
|
-
for dependency in dependencies:
|
|
225
|
-
if not isinstance(dependency, str):
|
|
226
|
-
continue
|
|
227
|
-
try:
|
|
228
|
-
name = Requirement(dependency).name
|
|
229
|
-
except InvalidRequirement:
|
|
230
|
-
continue
|
|
231
|
-
if canonicalize_name(name) == "prefect":
|
|
232
|
-
return True
|
|
233
|
-
return False
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
|
|
237
|
-
try:
|
|
238
|
-
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
|
|
239
|
-
except (OSError, tomllib.TOMLDecodeError):
|
|
240
|
-
return False
|
|
241
|
-
|
|
242
|
-
project = data.get("project")
|
|
243
|
-
if not isinstance(project, dict):
|
|
244
|
-
return False
|
|
245
|
-
|
|
246
|
-
return _dependencies_include_prefect(project.get("dependencies"))
|
|
247
|
-
|
|
248
|
-
|
|
249
217
|
def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if project_root is None:
|
|
255
|
-
return None
|
|
256
|
-
|
|
257
|
-
pyproject = project_root / "pyproject.toml"
|
|
258
|
-
if not pyproject.is_file() or not _pyproject_declares_prefect_dependency(pyproject):
|
|
259
|
-
return None
|
|
260
|
-
|
|
261
|
-
workspace_path = workspace.environment.get("PATH")
|
|
262
|
-
uv_executable = (
|
|
263
|
-
shutil.which("uv", path=workspace_path)
|
|
264
|
-
if workspace_path is not None
|
|
265
|
-
else shutil.which("uv")
|
|
266
|
-
)
|
|
267
|
-
if uv_executable is None:
|
|
268
|
-
return None
|
|
269
|
-
|
|
270
|
-
return command_to_string(
|
|
271
|
-
[
|
|
272
|
-
uv_executable,
|
|
273
|
-
"run",
|
|
274
|
-
"--no-default-groups",
|
|
275
|
-
"--project",
|
|
276
|
-
str(project_root),
|
|
277
|
-
"-m",
|
|
278
|
-
"prefect.flow_engine",
|
|
279
|
-
workspace.runtime_entrypoint,
|
|
280
|
-
]
|
|
218
|
+
return uv_project_command(
|
|
219
|
+
workspace.project_root,
|
|
220
|
+
["-m", "prefect.flow_engine", workspace.runtime_entrypoint],
|
|
221
|
+
path=workspace.environment.get("PATH"),
|
|
281
222
|
)
|
|
282
223
|
|
|
283
224
|
|
|
@@ -217,6 +217,9 @@ class GitRepository:
|
|
|
217
217
|
"Cannot provide both a branch and a commit SHA. Please provide only one."
|
|
218
218
|
)
|
|
219
219
|
|
|
220
|
+
if branch and branch.startswith("-"):
|
|
221
|
+
raise ValueError("Branch names cannot start with '-'.")
|
|
222
|
+
|
|
220
223
|
if commit_sha and not re.match(r"^[0-9a-fA-F]{4,64}$", commit_sha):
|
|
221
224
|
raise ValueError(
|
|
222
225
|
f"Invalid commit SHA: {commit_sha!r}."
|
|
@@ -25,10 +25,11 @@ from typing import TYPE_CHECKING, Any, Optional, TypeVar
|
|
|
25
25
|
|
|
26
26
|
import anyio
|
|
27
27
|
import anyio.abc
|
|
28
|
-
from pydantic import Field, field_validator
|
|
28
|
+
from pydantic import Field, PrivateAttr, TypeAdapter, ValidationError, field_validator
|
|
29
29
|
|
|
30
30
|
from prefect._internal.schemas.validators import validate_working_dir
|
|
31
31
|
from prefect.client.schemas.objects import Flow as APIFlow
|
|
32
|
+
from prefect.runner._uv_command import uv_project_command
|
|
32
33
|
from prefect.runner.runner import Runner
|
|
33
34
|
from prefect.states import Pending
|
|
34
35
|
from prefect.utilities.processutils import command_to_string, get_sys_executable
|
|
@@ -53,6 +54,8 @@ class ProcessJobConfiguration(BaseJobConfiguration):
|
|
|
53
54
|
stream_output: bool = Field(default=True)
|
|
54
55
|
working_dir: Optional[Path] = Field(default=None)
|
|
55
56
|
|
|
57
|
+
_command_configured: bool = PrivateAttr(default=False)
|
|
58
|
+
|
|
56
59
|
@field_validator("working_dir")
|
|
57
60
|
@classmethod
|
|
58
61
|
def validate_working_dir(cls, v: Path | str | None) -> Path | None:
|
|
@@ -69,6 +72,10 @@ class ProcessJobConfiguration(BaseJobConfiguration):
|
|
|
69
72
|
worker_name: str | None = None,
|
|
70
73
|
worker_id: "UUID | None" = None,
|
|
71
74
|
) -> None:
|
|
75
|
+
# The base implementation fills in `_base_flow_run_command()` when no command
|
|
76
|
+
# is configured, so provenance must be captured before delegating.
|
|
77
|
+
self._command_configured = self.command is not None
|
|
78
|
+
|
|
72
79
|
super().prepare_for_flow_run(
|
|
73
80
|
flow_run,
|
|
74
81
|
deployment,
|
|
@@ -80,9 +87,9 @@ class ProcessJobConfiguration(BaseJobConfiguration):
|
|
|
80
87
|
|
|
81
88
|
self.env: dict[str, str | None] = {**os.environ, **self.env}
|
|
82
89
|
self.command: str | None = (
|
|
83
|
-
|
|
84
|
-
if self.
|
|
85
|
-
else
|
|
90
|
+
self.command
|
|
91
|
+
if self._command_configured
|
|
92
|
+
else command_to_string([get_sys_executable(), "-m", "prefect.engine"])
|
|
86
93
|
)
|
|
87
94
|
|
|
88
95
|
@staticmethod
|
|
@@ -94,6 +101,38 @@ class ProcessJobConfiguration(BaseJobConfiguration):
|
|
|
94
101
|
"""
|
|
95
102
|
return "python -m prefect.engine"
|
|
96
103
|
|
|
104
|
+
def _resolve_command(self, working_dir: Path | str) -> str | None:
|
|
105
|
+
"""
|
|
106
|
+
Use an auto-`uv run` launcher for the flow run when the working directory
|
|
107
|
+
is a project that declares `prefect` as a dependency and the deployment
|
|
108
|
+
did not configure an explicit command.
|
|
109
|
+
"""
|
|
110
|
+
if self._command_configured:
|
|
111
|
+
return self.command
|
|
112
|
+
|
|
113
|
+
env = self.env or {}
|
|
114
|
+
# A run-specific setting in the environment takes precedence over the
|
|
115
|
+
# worker process's own setting.
|
|
116
|
+
auto_install = env.get("PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES")
|
|
117
|
+
try:
|
|
118
|
+
auto_install_dependencies = (
|
|
119
|
+
TypeAdapter(bool).validate_python(auto_install)
|
|
120
|
+
if auto_install is not None
|
|
121
|
+
else None
|
|
122
|
+
)
|
|
123
|
+
except ValidationError:
|
|
124
|
+
auto_install_dependencies = None
|
|
125
|
+
|
|
126
|
+
uv_command = uv_project_command(
|
|
127
|
+
# `uv` resolves `--project` relative to the flow run's working
|
|
128
|
+
# directory, so the project root must be absolute.
|
|
129
|
+
Path(working_dir).resolve(),
|
|
130
|
+
["-m", "prefect.engine"],
|
|
131
|
+
path=env.get("PATH"),
|
|
132
|
+
auto_install_dependencies=auto_install_dependencies,
|
|
133
|
+
)
|
|
134
|
+
return uv_command or self.command
|
|
135
|
+
|
|
97
136
|
|
|
98
137
|
class ProcessVariables(BaseVariables):
|
|
99
138
|
stream_output: bool = Field(
|
|
@@ -151,7 +190,7 @@ class ProcessWorker(
|
|
|
151
190
|
warnings.simplefilter("ignore", DeprecationWarning)
|
|
152
191
|
process = await self._runner.execute_flow_run(
|
|
153
192
|
flow_run_id=flow_run.id,
|
|
154
|
-
command=configuration.
|
|
193
|
+
command=configuration._resolve_command(working_dir),
|
|
155
194
|
cwd=working_dir,
|
|
156
195
|
env=configuration.env,
|
|
157
196
|
stream_output=configuration.stream_output,
|
|
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.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/_launchers.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/bundles/execute.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/manager.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_experimental/sla/objects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/device_id.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/emit.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/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.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/api.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/calls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/threads.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/concurrency/waiters.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/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.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/installation.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/observability.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/apply.py
RENAMED
|
File without changes
|
{prefect_client-3.8.3.dev1 → prefect_client-3.8.3.dev3}/src/prefect/_internal/plugins/collections.py
RENAMED
|
File without changes
|