prefect-client 3.8.9.dev7__tar.gz → 3.9.1.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/PKG-INFO +7 -6
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/pyproject.toml +7 -5
- prefect_client-3.9.1.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/deprecated.py +5 -3
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/services.py +33 -6
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/runner.py +85 -10
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/automations.py +8 -4
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/AGENTS.md +2 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/handlers.py +40 -9
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/AGENTS.md +4 -13
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_process_manager.py +9 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_scheduled_run_poller.py +1 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_starter_bundle.py +0 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_starter_direct.py +0 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_starter_engine.py +2 -3
- prefect_client-3.9.1.dev1/src/prefect/runner/runner.py +918 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/server.py +1 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runtime/flow_run.py +7 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/concurrency_limits_v2.py +3 -3
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/flow_runs.py +1 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/ui/flow_runs.py +1 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/ui/flows.py +2 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/ui/task_runs.py +4 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/_types.py +1 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/deployments.py +11 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/tasks.py +11 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/types/__init__.py +31 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/types/_datetime.py +80 -28
- prefect_client-3.9.1.dev1/src/prefect/types/_datetime_deprecations.py +332 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/pydantic.py +2 -1
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/AGENTS.md +2 -2
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/process.py +16 -25
- prefect_client-3.8.9.dev7/src/prefect/_build_info.py +0 -5
- prefect_client-3.8.9.dev7/src/prefect/runner/runner.py +0 -1891
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/.gitignore +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/LICENSE +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/README.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/hatch_build.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/_observation_delivery.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/attempt_control.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/server_maintenance.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/context.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_hook_runner.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_runtime.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_workspace_supervisor.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.9.1.dev1
|
|
4
4
|
Summary: Workflow orchestration and management.
|
|
5
5
|
Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
|
|
6
6
|
Project-URL: Documentation, https://docs.prefect.io
|
|
@@ -18,17 +18,19 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
22
|
-
Requires-Python: <3.
|
|
23
|
+
Requires-Python: <3.16,>=3.11
|
|
23
24
|
Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
|
|
24
25
|
Requires-Dist: anyio<5.0.0,>=4.4.0
|
|
25
26
|
Requires-Dist: asgi-lifespan<3.0,>=1.0
|
|
26
27
|
Requires-Dist: cachetools<8.0,>=5.3
|
|
28
|
+
Requires-Dist: certifi>=2026.10.19
|
|
27
29
|
Requires-Dist: cloudpickle<4.0,>=2.0
|
|
28
30
|
Requires-Dist: coolname<6.0.0,>=1.0.4
|
|
29
31
|
Requires-Dist: dateparser<2.0.0,>=1.1.1
|
|
30
32
|
Requires-Dist: exceptiongroup>=1.0.0
|
|
31
|
-
Requires-Dist: fastapi<
|
|
33
|
+
Requires-Dist: fastapi<0.151,>=0.139.0
|
|
32
34
|
Requires-Dist: fsspec>=2022.5.0
|
|
33
35
|
Requires-Dist: graphviz>=0.20.1
|
|
34
36
|
Requires-Dist: griffe<3.0.0,>=0.49.0
|
|
@@ -53,15 +55,14 @@ Requires-Dist: pytz<2027,>=2021.1
|
|
|
53
55
|
Requires-Dist: pyyaml<7.0.0,>=5.4.1
|
|
54
56
|
Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
|
|
55
57
|
Requires-Dist: rich<16.0,>=11.0
|
|
56
|
-
Requires-Dist: ruamel-yaml
|
|
57
|
-
Requires-Dist: ruamel-yaml>=0.17.0
|
|
58
|
+
Requires-Dist: ruamel-yaml!=0.19.0,>=0.17.0
|
|
58
59
|
Requires-Dist: sniffio<2.0.0,>=1.3.0
|
|
59
60
|
Requires-Dist: starlette>=1.0.1
|
|
60
61
|
Requires-Dist: toml>=0.10.0
|
|
61
62
|
Requires-Dist: typing-extensions<5.0.0,>=4.10.0
|
|
62
63
|
Requires-Dist: uvicorn!=0.29.0,>=0.14.0
|
|
63
64
|
Requires-Dist: websockets<17.0,>=15.0.1
|
|
64
|
-
Requires-Dist: whenever<0.11.0,>=0.
|
|
65
|
+
Requires-Dist: whenever<0.11.0,>=0.10.5; python_version >= '3.13'
|
|
65
66
|
Provides-Extra: notifications
|
|
66
67
|
Requires-Dist: apprise<2.0.0,>=1.13.0; extra == 'notifications'
|
|
67
68
|
Description-Content-Type: text/markdown
|
|
@@ -7,7 +7,7 @@ name = "prefect-client"
|
|
|
7
7
|
dynamic = ["version"]
|
|
8
8
|
description = "Workflow orchestration and management."
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.11,<3.
|
|
10
|
+
requires-python = ">=3.11,<3.16"
|
|
11
11
|
license = { text = "Apache-2.0" }
|
|
12
12
|
authors = [{ name = "Prefect Technologies, Inc.", email = "help@prefect.io" }]
|
|
13
13
|
classifiers = [
|
|
@@ -20,6 +20,7 @@ classifiers = [
|
|
|
20
20
|
"Programming Language :: Python :: 3.12",
|
|
21
21
|
"Programming Language :: Python :: 3.13",
|
|
22
22
|
"Programming Language :: Python :: 3.14",
|
|
23
|
+
"Programming Language :: Python :: 3.15",
|
|
23
24
|
"Topic :: Software Development :: Libraries",
|
|
24
25
|
]
|
|
25
26
|
dependencies = [
|
|
@@ -28,11 +29,13 @@ dependencies = [
|
|
|
28
29
|
"anyio>=4.4.0,<5.0.0",
|
|
29
30
|
"asgi-lifespan>=1.0,<3.0",
|
|
30
31
|
"cachetools>=5.3,<8.0",
|
|
32
|
+
"certifi>=2026.10.19",
|
|
31
33
|
"cloudpickle>=2.0,<4.0",
|
|
32
34
|
"coolname>=1.0.4,<6.0.0",
|
|
33
35
|
"dateparser>=1.1.1,<2.0.0",
|
|
34
36
|
"exceptiongroup>=1.0.0",
|
|
35
|
-
|
|
37
|
+
# 0.151 rejects an explicit null for a body param with a default, and released clients send null
|
|
38
|
+
"fastapi>=0.139.0,<0.151",
|
|
36
39
|
"fsspec>=2022.5.0",
|
|
37
40
|
"graphviz>=0.20.1",
|
|
38
41
|
"griffe>=0.49.0,<3.0.0",
|
|
@@ -57,15 +60,14 @@ dependencies = [
|
|
|
57
60
|
"pyyaml>=5.4.1,<7.0.0",
|
|
58
61
|
"rfc3339-validator>=0.1.4,<0.2.0",
|
|
59
62
|
"rich>=11.0,<16.0",
|
|
60
|
-
"ruamel.yaml>=0.17.0",
|
|
61
|
-
"ruamel.yaml.clib>=0.2.8; platform_python_implementation == 'CPython'",
|
|
63
|
+
"ruamel.yaml>=0.17.0,!=0.19.0",
|
|
62
64
|
"sniffio>=1.3.0,<2.0.0",
|
|
63
65
|
"starlette>=1.0.1",
|
|
64
66
|
"toml>=0.10.0",
|
|
65
67
|
"typing_extensions>=4.10.0,<5.0.0",
|
|
66
68
|
"uvicorn>=0.14.0,!=0.29.0",
|
|
67
69
|
"websockets>=15.0.1,<17.0",
|
|
68
|
-
"whenever>=0.
|
|
70
|
+
"whenever>=0.10.5,<0.11.0; python_version>='3.13'",
|
|
69
71
|
]
|
|
70
72
|
[project.urls]
|
|
71
73
|
Changelog = "https://github.com/PrefectHQ/prefect/releases"
|
|
@@ -21,7 +21,7 @@ from typing import TYPE_CHECKING, Any, Callable, Optional, Union
|
|
|
21
21
|
from pydantic import BaseModel
|
|
22
22
|
from typing_extensions import ParamSpec, TypeAlias, TypeVar
|
|
23
23
|
|
|
24
|
-
from prefect.types._datetime import now
|
|
24
|
+
from prefect.types._datetime import _pendulum_call, now
|
|
25
25
|
from prefect.utilities.callables import get_call_parameters
|
|
26
26
|
from prefect.utilities.importtools import (
|
|
27
27
|
AliasedModuleDefinition,
|
|
@@ -96,14 +96,16 @@ def generate_deprecation_message(
|
|
|
96
96
|
if hasattr(PlainDateTime, "to_stdlib")
|
|
97
97
|
else PlainDateTime.from_py_datetime
|
|
98
98
|
)
|
|
99
|
-
|
|
99
|
+
# PlainDateTime requires a naive datetime; the warning only renders
|
|
100
|
+
# month and year, so any tzinfo on start_date is dropped.
|
|
101
|
+
_dt = _pdt_from_dt(start_date.replace(tzinfo=None)).add(months=6)
|
|
100
102
|
end_date = (
|
|
101
103
|
_dt.to_stdlib() if hasattr(_dt, "to_stdlib") else _dt.py_datetime()
|
|
102
104
|
)
|
|
103
105
|
else:
|
|
104
106
|
import pendulum
|
|
105
107
|
|
|
106
|
-
end_date = pendulum.instance(start_date)
|
|
108
|
+
end_date = _pendulum_call(pendulum.instance(start_date), "add", months=6)
|
|
107
109
|
|
|
108
110
|
if when:
|
|
109
111
|
when = " when " + when
|
|
@@ -27,6 +27,11 @@ R = TypeVar("R", infer_variance=True)
|
|
|
27
27
|
# Track all active services for fork handling
|
|
28
28
|
_active_services: weakref.WeakSet[_QueueServiceBase[Any]] = weakref.WeakSet()
|
|
29
29
|
|
|
30
|
+
# Services take items that are already queued without leaving the event loop.
|
|
31
|
+
# Other services share the global loop, so a service working through a backlog
|
|
32
|
+
# yields to them after this many items in a row.
|
|
33
|
+
_READY_ITEMS_PER_YIELD = 256
|
|
34
|
+
|
|
30
35
|
|
|
31
36
|
def _reset_services_after_fork():
|
|
32
37
|
"""
|
|
@@ -73,6 +78,7 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
|
73
78
|
self._started: bool = False
|
|
74
79
|
self._key = hash((self.__class__, *args))
|
|
75
80
|
self._lock = threading.Lock()
|
|
81
|
+
self._ready_items_since_yield = 0
|
|
76
82
|
self._queue_get_thread = WorkerThread(
|
|
77
83
|
# TODO: This thread should not need to be a daemon but when it is not, it
|
|
78
84
|
# can prevent the interpreter from exiting.
|
|
@@ -184,14 +190,37 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
|
184
190
|
assert self._done_event is not None
|
|
185
191
|
self._done_event.set()
|
|
186
192
|
|
|
193
|
+
async def _get_item(self, timeout: Optional[float] = None) -> Optional[T]:
|
|
194
|
+
"""
|
|
195
|
+
Take the next item from the queue.
|
|
196
|
+
|
|
197
|
+
An item that is already queued is taken on the event loop. Only an empty
|
|
198
|
+
queue waits on the queue thread, which raises `queue.Empty` if `timeout`
|
|
199
|
+
passes first.
|
|
200
|
+
"""
|
|
201
|
+
if self._ready_items_since_yield >= _READY_ITEMS_PER_YIELD:
|
|
202
|
+
self._ready_items_since_yield = 0
|
|
203
|
+
await asyncio.sleep(0)
|
|
204
|
+
|
|
205
|
+
try:
|
|
206
|
+
item = self._queue.get_nowait()
|
|
207
|
+
except queue.Empty:
|
|
208
|
+
pass
|
|
209
|
+
else:
|
|
210
|
+
self._ready_items_since_yield += 1
|
|
211
|
+
return item
|
|
212
|
+
|
|
213
|
+
self._ready_items_since_yield = 0
|
|
214
|
+
return await self._queue_get_thread.submit(
|
|
215
|
+
create_call(self._queue.get, timeout=timeout)
|
|
216
|
+
).aresult()
|
|
217
|
+
|
|
187
218
|
async def _main_loop(self) -> None:
|
|
188
219
|
last_log_time = 0
|
|
189
220
|
log_interval = 4 # log every 4 seconds
|
|
190
221
|
|
|
191
222
|
while True:
|
|
192
|
-
item: Optional[T] = await self.
|
|
193
|
-
create_call(self._queue.get)
|
|
194
|
-
).aresult()
|
|
223
|
+
item: Optional[T] = await self._get_item()
|
|
195
224
|
|
|
196
225
|
if self._stopped:
|
|
197
226
|
current_time = asyncio.get_event_loop().time()
|
|
@@ -500,9 +529,7 @@ class BatchedQueueService(QueueService[T]):
|
|
|
500
529
|
deadline = get_deadline(self.min_interval)
|
|
501
530
|
while batch_size < self.max_batch_size:
|
|
502
531
|
try:
|
|
503
|
-
item = await self.
|
|
504
|
-
create_call(self._queue.get, timeout=get_timeout(deadline))
|
|
505
|
-
).aresult()
|
|
532
|
+
item = await self._get_item(timeout=get_timeout(deadline))
|
|
506
533
|
|
|
507
534
|
if item is None:
|
|
508
535
|
done = True
|
|
@@ -35,6 +35,8 @@ import importlib
|
|
|
35
35
|
import os
|
|
36
36
|
import sys
|
|
37
37
|
import tempfile
|
|
38
|
+
import warnings
|
|
39
|
+
from contextlib import suppress
|
|
38
40
|
from datetime import datetime, timedelta
|
|
39
41
|
from pathlib import Path
|
|
40
42
|
from typing import (
|
|
@@ -103,6 +105,7 @@ from prefect.schedules import Schedule
|
|
|
103
105
|
from prefect.settings import (
|
|
104
106
|
PREFECT_DEPLOYMENTS_DEFAULT_WORK_POOL_NAME,
|
|
105
107
|
PREFECT_UI_URL,
|
|
108
|
+
get_current_settings,
|
|
106
109
|
)
|
|
107
110
|
from prefect.types import ListOfNonEmptyStrings
|
|
108
111
|
from prefect.types.entrypoint import EntrypointType
|
|
@@ -125,6 +128,25 @@ if TYPE_CHECKING:
|
|
|
125
128
|
|
|
126
129
|
__all__ = ["RunnerDeployment"]
|
|
127
130
|
|
|
131
|
+
|
|
132
|
+
def _should_clear_empty_schedules() -> bool:
|
|
133
|
+
if get_current_settings().deployments.clear_schedules_on_empty:
|
|
134
|
+
return True
|
|
135
|
+
|
|
136
|
+
warnings.warn(
|
|
137
|
+
"Preserving existing schedules when an empty schedules list is provided "
|
|
138
|
+
"on redeployment is deprecated. A future release will clear schedules "
|
|
139
|
+
"by default after at least six months or three minor releases, whichever "
|
|
140
|
+
"is longer. The opt-in setting and this warning will then be removed. "
|
|
141
|
+
"Set PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true to opt in now. "
|
|
142
|
+
"To preserve existing schedules, omit schedules or use schedules=None "
|
|
143
|
+
"(schedules: null in prefect.yaml).",
|
|
144
|
+
FutureWarning,
|
|
145
|
+
stacklevel=3,
|
|
146
|
+
)
|
|
147
|
+
return False
|
|
148
|
+
|
|
149
|
+
|
|
128
150
|
_DEPLOYMENT_PARAMETER_SERIALIZER = TypeAdapter(
|
|
129
151
|
dict[str, Any],
|
|
130
152
|
config=ConfigDict(ser_json_timedelta="float"),
|
|
@@ -617,15 +639,21 @@ class RunnerDeployment(BaseModel):
|
|
|
617
639
|
deployment_id: UUID,
|
|
618
640
|
client: PrefectClient,
|
|
619
641
|
version_info: VersionInfo | None,
|
|
642
|
+
*,
|
|
643
|
+
preserve_schedules: bool = False,
|
|
620
644
|
):
|
|
621
645
|
parameter_openapi_schema = self._parameter_openapi_schema.model_dump(
|
|
622
646
|
exclude_unset=True
|
|
623
647
|
)
|
|
624
648
|
|
|
649
|
+
exclude = {"storage", "name", "flow_name", "triggers", "version_type"}
|
|
650
|
+
if preserve_schedules:
|
|
651
|
+
# Explicitly set schedules survive exclude_unset, even when empty.
|
|
652
|
+
exclude.add("schedules")
|
|
625
653
|
update_payload = self.model_dump(
|
|
626
654
|
mode="json",
|
|
627
655
|
exclude_unset=True,
|
|
628
|
-
exclude=
|
|
656
|
+
exclude=exclude,
|
|
629
657
|
)
|
|
630
658
|
|
|
631
659
|
if self.storage:
|
|
@@ -636,7 +664,7 @@ class RunnerDeployment(BaseModel):
|
|
|
636
664
|
else:
|
|
637
665
|
update_payload["pull_steps"] = None
|
|
638
666
|
|
|
639
|
-
if self.schedules:
|
|
667
|
+
if self.schedules and not preserve_schedules:
|
|
640
668
|
update_payload["schedules"] = [
|
|
641
669
|
schedule.model_dump(mode="json", exclude_unset=True)
|
|
642
670
|
for schedule in self._schedules_with_serialized_block_parameters() or []
|
|
@@ -669,15 +697,21 @@ class RunnerDeployment(BaseModel):
|
|
|
669
697
|
deployment_id: UUID,
|
|
670
698
|
client: SyncPrefectClient,
|
|
671
699
|
version_info: VersionInfo | None,
|
|
700
|
+
*,
|
|
701
|
+
preserve_schedules: bool = False,
|
|
672
702
|
):
|
|
673
703
|
parameter_openapi_schema = self._parameter_openapi_schema.model_dump(
|
|
674
704
|
exclude_unset=True
|
|
675
705
|
)
|
|
676
706
|
|
|
707
|
+
exclude = {"storage", "name", "flow_name", "triggers", "version_type"}
|
|
708
|
+
if preserve_schedules:
|
|
709
|
+
# Keep schedule exclusion in sync with _update above.
|
|
710
|
+
exclude.add("schedules")
|
|
677
711
|
update_payload = self.model_dump(
|
|
678
712
|
mode="json",
|
|
679
713
|
exclude_unset=True,
|
|
680
|
-
exclude=
|
|
714
|
+
exclude=exclude,
|
|
681
715
|
)
|
|
682
716
|
|
|
683
717
|
if self.storage:
|
|
@@ -688,7 +722,7 @@ class RunnerDeployment(BaseModel):
|
|
|
688
722
|
else:
|
|
689
723
|
update_payload["pull_steps"] = None
|
|
690
724
|
|
|
691
|
-
if self.schedules:
|
|
725
|
+
if self.schedules and not preserve_schedules:
|
|
692
726
|
update_payload["schedules"] = [
|
|
693
727
|
schedule.model_dump(mode="json", exclude_unset=True)
|
|
694
728
|
for schedule in self._schedules_with_serialized_block_parameters() or []
|
|
@@ -756,6 +790,9 @@ class RunnerDeployment(BaseModel):
|
|
|
756
790
|
Registers this deployment with the API and returns the deployment's ID.
|
|
757
791
|
|
|
758
792
|
Args:
|
|
793
|
+
schedules: Override the schedules for this deployment. On redeployment,
|
|
794
|
+
an empty list preserves schedules by default and emits a warning.
|
|
795
|
+
Set `PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true` to clear them.
|
|
759
796
|
work_pool_name: The name of the work pool to use for this
|
|
760
797
|
deployment.
|
|
761
798
|
image: The registry, name, and tag of the Docker image to
|
|
@@ -784,11 +821,29 @@ class RunnerDeployment(BaseModel):
|
|
|
784
821
|
self.job_variables["image"] = image
|
|
785
822
|
if work_pool_name:
|
|
786
823
|
self.work_pool_name = work_pool_name
|
|
787
|
-
|
|
824
|
+
clear_schedules = schedules == [] and _should_clear_empty_schedules()
|
|
825
|
+
if schedules or clear_schedules:
|
|
788
826
|
self.schedules = [
|
|
789
|
-
DeploymentScheduleUpdate(**schedule)
|
|
827
|
+
DeploymentScheduleUpdate(**schedule)
|
|
828
|
+
for schedule in schedules or []
|
|
790
829
|
]
|
|
791
|
-
|
|
830
|
+
await self._update(
|
|
831
|
+
deployment.id,
|
|
832
|
+
client,
|
|
833
|
+
version_info,
|
|
834
|
+
preserve_schedules=schedules == [] and not clear_schedules,
|
|
835
|
+
)
|
|
836
|
+
# The update API preserves empty-list updates when all existing
|
|
837
|
+
# schedules have slugs. Clear those explicitly after a successful update.
|
|
838
|
+
if clear_schedules and all(
|
|
839
|
+
schedule.slug is not None for schedule in deployment.schedules
|
|
840
|
+
):
|
|
841
|
+
for schedule in deployment.schedules:
|
|
842
|
+
with suppress(ObjectNotFound):
|
|
843
|
+
await client.delete_deployment_schedule(
|
|
844
|
+
deployment.id, schedule.id
|
|
845
|
+
)
|
|
846
|
+
return deployment.id
|
|
792
847
|
|
|
793
848
|
@async_dispatch(aapply)
|
|
794
849
|
def apply(
|
|
@@ -802,6 +857,9 @@ class RunnerDeployment(BaseModel):
|
|
|
802
857
|
Registers this deployment with the API and returns the deployment's ID.
|
|
803
858
|
|
|
804
859
|
Args:
|
|
860
|
+
schedules: Override the schedules for this deployment. On redeployment,
|
|
861
|
+
an empty list preserves schedules by default and emits a warning.
|
|
862
|
+
Set `PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true` to clear them.
|
|
805
863
|
work_pool_name: The name of the work pool to use for this
|
|
806
864
|
deployment.
|
|
807
865
|
image: The registry, name, and tag of the Docker image to
|
|
@@ -829,11 +887,28 @@ class RunnerDeployment(BaseModel):
|
|
|
829
887
|
self.job_variables["image"] = image
|
|
830
888
|
if work_pool_name:
|
|
831
889
|
self.work_pool_name = work_pool_name
|
|
832
|
-
|
|
890
|
+
clear_schedules = schedules == [] and _should_clear_empty_schedules()
|
|
891
|
+
if schedules or clear_schedules:
|
|
833
892
|
self.schedules = [
|
|
834
|
-
DeploymentScheduleUpdate(**schedule)
|
|
893
|
+
DeploymentScheduleUpdate(**schedule)
|
|
894
|
+
for schedule in schedules or []
|
|
835
895
|
]
|
|
836
|
-
|
|
896
|
+
self._update_sync(
|
|
897
|
+
deployment.id,
|
|
898
|
+
client,
|
|
899
|
+
version_info,
|
|
900
|
+
preserve_schedules=schedules == [] and not clear_schedules,
|
|
901
|
+
)
|
|
902
|
+
# Keep explicit clearing in sync with aapply above.
|
|
903
|
+
if clear_schedules and all(
|
|
904
|
+
schedule.slug is not None for schedule in deployment.schedules
|
|
905
|
+
):
|
|
906
|
+
for schedule in deployment.schedules:
|
|
907
|
+
with suppress(ObjectNotFound):
|
|
908
|
+
client.delete_deployment_schedule(
|
|
909
|
+
deployment.id, schedule.id
|
|
910
|
+
)
|
|
911
|
+
return deployment.id
|
|
837
912
|
|
|
838
913
|
async def _create_slas(self, deployment_id: UUID, client: PrefectClient):
|
|
839
914
|
if not isinstance(self._sla, list):
|
{prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/events/schemas/automations.py
RENAMED
|
@@ -31,6 +31,7 @@ from typing_extensions import Self, TypeAlias
|
|
|
31
31
|
|
|
32
32
|
from prefect._internal.schemas.bases import PrefectBaseModel
|
|
33
33
|
from prefect.events.actions import ActionTypes, ActionTypesOrUnknown, RunDeployment
|
|
34
|
+
from prefect.types import DurationOrSecondsTimeDelta
|
|
34
35
|
from prefect.utilities.collections import AutoEnum
|
|
35
36
|
|
|
36
37
|
from .events import ResourceSpecification
|
|
@@ -200,9 +201,10 @@ class EventTrigger(ResourceTrigger):
|
|
|
200
201
|
"triggers)"
|
|
201
202
|
),
|
|
202
203
|
)
|
|
203
|
-
within:
|
|
204
|
+
within: DurationOrSecondsTimeDelta = Field(
|
|
204
205
|
default=timedelta(seconds=0),
|
|
205
206
|
ge=timedelta(seconds=0),
|
|
207
|
+
json_schema_extra={"minimum": 0},
|
|
206
208
|
description=(
|
|
207
209
|
"The time period over which the events must occur. For Reactive triggers, "
|
|
208
210
|
"this may be as low as 0 seconds, but must be at least 10 seconds for "
|
|
@@ -305,16 +307,18 @@ class MetricTriggerQuery(PrefectBaseModel):
|
|
|
305
307
|
"the query result against the threshold value."
|
|
306
308
|
),
|
|
307
309
|
)
|
|
308
|
-
range:
|
|
310
|
+
range: DurationOrSecondsTimeDelta = Field(
|
|
309
311
|
timedelta(seconds=300), # defaults to 5 minutes
|
|
312
|
+
json_schema_extra={"minimum": 300},
|
|
310
313
|
description=(
|
|
311
314
|
"The lookback duration (seconds) for a metric query. This duration is "
|
|
312
315
|
"used to determine the time range over which the query will be executed. "
|
|
313
316
|
"The minimum value is 300 seconds (5 minutes)."
|
|
314
317
|
),
|
|
315
318
|
)
|
|
316
|
-
firing_for:
|
|
319
|
+
firing_for: DurationOrSecondsTimeDelta = Field(
|
|
317
320
|
timedelta(seconds=300), # defaults to 5 minutes
|
|
321
|
+
json_schema_extra={"minimum": 300},
|
|
318
322
|
description=(
|
|
319
323
|
"The duration (seconds) for which the metric query must breach "
|
|
320
324
|
"or resolve continuously before the state is updated and the "
|
|
@@ -367,7 +371,7 @@ class CompositeTrigger(Trigger, abc.ABC):
|
|
|
367
371
|
|
|
368
372
|
type: Literal["compound", "sequence"]
|
|
369
373
|
triggers: List["TriggerTypes"]
|
|
370
|
-
within: Optional[
|
|
374
|
+
within: Optional[DurationOrSecondsTimeDelta] = Field(
|
|
371
375
|
None,
|
|
372
376
|
description=(
|
|
373
377
|
"The time period over which the events must occur. For Reactive triggers, "
|
|
@@ -41,7 +41,8 @@ Key invariants:
|
|
|
41
41
|
|
|
42
42
|
`APILogWorker` is a **singleton per unique settings tuple** `(BATCH_SIZE, API_URL, MAX_LOG_SIZE)`. A new settings combination creates a new worker instance.
|
|
43
43
|
|
|
44
|
-
- `max_batch_size = max(BATCH_SIZE - MAX_LOG_SIZE,
|
|
44
|
+
- `max_batch_size = max(BATCH_SIZE - MAX_LOG_SIZE - 1, 1)` — a batch stops taking logs at this size, which leaves room for one more max-size log and the request body's opening bracket. Requests stay within `BATCH_SIZE` whenever `BATCH_SIZE >= MAX_LOG_SIZE + 2`; below that, each request holds one log.
|
|
45
|
+
- `APILogWorker.send()` serializes each log dict to compact JSON (orjson) right away, dropping the `__payload_size__` key that `prepare()` adds. The queue holds only those bytes, and `_handle_batch` posts them joined, without serializing again. Changes to a dict after `send()` are not sent. Process-pool workers still forward dicts through `_api_log_sink`; the parent serializes them when it calls `send()`.
|
|
45
46
|
- `APILogHandler.prepare()` truncates oversized logs with a buffer; `WorkerAPILogHandler.prepare()` raises `ValueError` instead (no truncation)
|
|
46
47
|
|
|
47
48
|
**Flush deadlock guard:** `APILogHandler.flush()` detects if called from within an event loop and avoids blocking via `from_sync.call_soon_in_new_thread()`. Do not call `flush()` synchronously from async code without this guard.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import inspect
|
|
4
|
-
import json
|
|
5
4
|
import logging
|
|
6
5
|
import sys
|
|
7
6
|
import time
|
|
@@ -11,6 +10,7 @@ import warnings
|
|
|
11
10
|
from contextlib import asynccontextmanager
|
|
12
11
|
from typing import TYPE_CHECKING, Any, Callable, Dict, TextIO, Type, cast
|
|
13
12
|
|
|
13
|
+
import orjson
|
|
14
14
|
from rich.console import Console
|
|
15
15
|
from rich.highlighter import Highlighter, NullHighlighter
|
|
16
16
|
from rich.theme import Theme
|
|
@@ -64,22 +64,51 @@ def emit_api_log(log: Dict[str, Any]) -> None:
|
|
|
64
64
|
APILogWorker.instance().send(log)
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
class APILogWorker(BatchedQueueService[
|
|
67
|
+
class APILogWorker(BatchedQueueService[bytes]):
|
|
68
68
|
@property
|
|
69
69
|
def max_batch_size(self) -> int:
|
|
70
|
+
# A batch takes logs until it reaches this size, and the last log it takes
|
|
71
|
+
# can be a maximum size log. Leave room for that log and for the opening
|
|
72
|
+
# bracket of the request body, so the request fits in the configured
|
|
73
|
+
# batch size. A batch always takes at least one log.
|
|
70
74
|
return max(
|
|
71
75
|
PREFECT_LOGGING_TO_API_BATCH_SIZE.value()
|
|
72
|
-
- PREFECT_LOGGING_TO_API_MAX_LOG_SIZE.value()
|
|
73
|
-
|
|
76
|
+
- PREFECT_LOGGING_TO_API_MAX_LOG_SIZE.value()
|
|
77
|
+
- 1,
|
|
78
|
+
1,
|
|
74
79
|
)
|
|
75
80
|
|
|
76
81
|
@property
|
|
77
82
|
def min_interval(self) -> float | None:
|
|
78
83
|
return PREFECT_LOGGING_TO_API_BATCH_INTERVAL.value()
|
|
79
84
|
|
|
80
|
-
|
|
85
|
+
def send(self, item: Dict[str, Any] | bytes) -> None:
|
|
86
|
+
"""
|
|
87
|
+
Queue a log to send to the API.
|
|
88
|
+
|
|
89
|
+
Accepts a `LogCreate`-compatible dict, such as one returned by
|
|
90
|
+
`APILogHandler.prepare`, or its serialized JSON. Logs are queued as JSON
|
|
91
|
+
so each one is held once and is not serialized again when its batch is
|
|
92
|
+
sent.
|
|
93
|
+
"""
|
|
94
|
+
if isinstance(item, dict):
|
|
95
|
+
payload = orjson.dumps(
|
|
96
|
+
{key: value for key, value in item.items() if key != "__payload_size__"}
|
|
97
|
+
)
|
|
98
|
+
# orjson output can take far more memory than its length, about 1 KiB
|
|
99
|
+
# for a short log. Copy it so a backlog of queued logs holds only the
|
|
100
|
+
# JSON.
|
|
101
|
+
item = memoryview(payload).tobytes()
|
|
102
|
+
super().send(item)
|
|
103
|
+
|
|
104
|
+
async def _handle_batch(self, items: list[bytes]):
|
|
81
105
|
try:
|
|
82
|
-
await self._client.
|
|
106
|
+
await self._client.request(
|
|
107
|
+
"POST",
|
|
108
|
+
"/logs/",
|
|
109
|
+
content=b"[" + b",".join(items) + b"]",
|
|
110
|
+
headers={"Content-Type": "application/json"},
|
|
111
|
+
)
|
|
83
112
|
except Exception as e:
|
|
84
113
|
# Roughly replicate the behavior of the stdlib logger error handling
|
|
85
114
|
if logging.raiseExceptions and sys.stderr:
|
|
@@ -106,8 +135,10 @@ class APILogWorker(BatchedQueueService[Dict[str, Any]]):
|
|
|
106
135
|
# Ensure a unique worker is retrieved per relevant logging settings
|
|
107
136
|
return super().instance(*settings, *args)
|
|
108
137
|
|
|
109
|
-
def _get_size(self, item:
|
|
110
|
-
|
|
138
|
+
def _get_size(self, item: bytes) -> int:
|
|
139
|
+
# Count the comma or closing bracket that follows each log in the request
|
|
140
|
+
# body, so a full batch stays within the configured batch size
|
|
141
|
+
return len(item) + 1
|
|
111
142
|
|
|
112
143
|
|
|
113
144
|
class APILogHandler(logging.Handler):
|
|
@@ -286,7 +317,7 @@ class APILogHandler(logging.Handler):
|
|
|
286
317
|
return log
|
|
287
318
|
|
|
288
319
|
def _get_payload_size(self, log: Dict[str, Any]) -> int:
|
|
289
|
-
return len(
|
|
320
|
+
return len(orjson.dumps(log))
|
|
290
321
|
|
|
291
322
|
|
|
292
323
|
class WorkerAPILogHandler(APILogHandler):
|
|
@@ -35,17 +35,7 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
|
|
|
35
35
|
- Cancellation -> CancellationManager
|
|
36
36
|
- Hooks -> HookRunner
|
|
37
37
|
|
|
38
|
-
**
|
|
39
|
-
- `_submit_run_and_capture_errors()` -- replaced by FlowRunExecutor.submit()
|
|
40
|
-
- `_run_process()` -- replaced by ProcessStarter implementations
|
|
41
|
-
- `_flow_run_process_map` dict -- replaced by ProcessManager
|
|
42
|
-
- `_kill_process()` -- replaced by ProcessManager.kill()
|
|
43
|
-
- `_run_on_crashed_hooks()` / `_run_on_cancellation_hooks()` -- replaced by HookRunner
|
|
44
|
-
- `execute_flow_run()` -- deprecated (Mar 2026); use `FlowRunExecutorContext` + `WorkspaceResolvingEngineCommandStarter`
|
|
45
|
-
- `execute_bundle()` -- deprecated (Mar 2026); use `execute_bundle()` from `prefect.bundles.execute`
|
|
46
|
-
- `reschedule_current_flow_runs()` -- deprecated (Mar 2026); SIGTERM rescheduling is now handled inline by the CLI execute path
|
|
47
|
-
|
|
48
|
-
These will be removed once internal callers are migrated. Direct ProcessWorker flow runs already use `FlowRunExecutorContext`; generated commands use `WorkspaceResolvingEngineCommandStarter`, while explicitly configured commands use `EngineCommandStarter`. Only the ad hoc bundle path still calls deprecated `Runner.execute_bundle()`. Keep lifecycle behavior in the extracted classes and do not route direct worker execution back through Runner.
|
|
38
|
+
**Runner has no execution path of its own.** Served runs go through `ScheduledRunPoller` -> `FlowRunExecutor`; one-shot callers (workers, `prefect flow-run execute`, `prefect.bundles.execute`) use `FlowRunExecutorContext` with a `ProcessStarter`. `Runner.execute_flow_run()`, `Runner.execute_bundle()` and `Runner.reschedule_current_flow_runs()` were removed after their deprecation period, along with the facade's own process map and kill/hook helpers. Do not reintroduce a second execution or process-tracking path on Runner: `Runner._cancel_run()` only delegates to `CancellationManager` for runs tracked by `ProcessManager`.
|
|
49
39
|
|
|
50
40
|
## Webserver Health Check
|
|
51
41
|
|
|
@@ -103,8 +93,9 @@ Each execution mode has a ProcessStarter implementation. To add a new execution
|
|
|
103
93
|
|
|
104
94
|
`ScheduledRunPoller` now calls `propose_pending` (Scheduled → Pending) before handing off to `FlowRunExecutor`. `FlowRunExecutor` then calls `propose_submitting` (Pending → Submitting sub-state) as step 1 of its lifecycle **when `propose_submitting=True` (the default)**. These are two separate transitions — do not collapse them. The split exists so automations listening for the Pending state fire correctly before the executor begins.
|
|
105
95
|
|
|
106
|
-
**
|
|
96
|
+
**Four callers set `propose_submitting=False`** via `FlowRunExecutorContext.create_executor(propose_submitting=False)` — all have already advanced the flow run past the Pending state, so proposing Submitting again would be wrong:
|
|
107
97
|
- direct `ProcessWorker.run()` execution (`BaseWorker` already proposed Submitting)
|
|
98
|
+
- ad hoc `ProcessWorker._submit_adhoc_run()` execution (the worker created or reset the run as Pending)
|
|
108
99
|
- `prefect flow-run execute` CLI path (invoked by a worker)
|
|
109
100
|
- `execute_bundle()` in `prefect.bundles.execute` (invoked by bundle dispatch)
|
|
110
101
|
|
|
@@ -112,7 +103,7 @@ The cancelling precheck (step 1a) still runs unconditionally even when `propose_
|
|
|
112
103
|
|
|
113
104
|
## ProcessWorker Execution Paths
|
|
114
105
|
|
|
115
|
-
Direct ProcessWorker runs use `FlowRunExecutorContext` with `propose_submitting=False`. Generated commands use `WorkspaceResolvingEngineCommandStarter` so command selection follows workspace preparation; explicitly configured commands use `EngineCommandStarter` and retain their own pull-step semantics. The executor owns process tracking, cancellation, Attempt Control Session evidence, crash inference, and normalized infrastructure status
|
|
106
|
+
Direct ProcessWorker runs use `FlowRunExecutorContext` with `propose_submitting=False`. Generated commands use `WorkspaceResolvingEngineCommandStarter` so command selection follows workspace preparation; explicitly configured commands use `EngineCommandStarter` and retain their own pull-step semantics. Ad hoc submissions (`_submit_adhoc_run`, used by `InfrastructureBoundFlow`) open their own `FlowRunExecutorContext` with `BundleExecutionStarter` and `propose_submitting=False`, passing the job configuration's `working_dir` and `env`. The executor owns process tracking, cancellation, Attempt Control Session evidence, crash inference, and normalized infrastructure status in every path.
|
|
116
107
|
|
|
117
108
|
## BlockStorageAdapter Pull Behavior
|
|
118
109
|
|
{prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_process_manager.py
RENAMED
|
@@ -368,6 +368,15 @@ class ProcessManager:
|
|
|
368
368
|
"""
|
|
369
369
|
return set(self._process_map.keys())
|
|
370
370
|
|
|
371
|
+
def flow_run_count(self) -> int:
|
|
372
|
+
"""Return the number of tracked flow runs.
|
|
373
|
+
|
|
374
|
+
Reads the map's length without iterating it, so callers on another
|
|
375
|
+
thread, such as the runner webserver, cannot fail while runs are added
|
|
376
|
+
or removed.
|
|
377
|
+
"""
|
|
378
|
+
return len(self._process_map)
|
|
379
|
+
|
|
371
380
|
async def wait_for_exit(self, flow_run_id: UUID, grace_seconds: float = 30) -> bool:
|
|
372
381
|
"""Wait for a tracked process to exit without sending a signal.
|
|
373
382
|
|
{prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_scheduled_run_poller.py
RENAMED
|
@@ -173,8 +173,7 @@ class ScheduledRunPoller:
|
|
|
173
173
|
starter = self._resolve_starter(flow_run)
|
|
174
174
|
|
|
175
175
|
# Adhoc storage pull: if the deployment has storage with a
|
|
176
|
-
# pull_interval, pull code before starting the process
|
|
177
|
-
# original Runner._run_process adhoc pull logic).
|
|
176
|
+
# pull_interval, pull code before starting the process.
|
|
178
177
|
storage = (
|
|
179
178
|
self._deployment_registry.get_storage(flow_run.deployment_id)
|
|
180
179
|
if flow_run.deployment_id
|
{prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_starter_bundle.py
RENAMED
|
@@ -18,7 +18,6 @@ if TYPE_CHECKING:
|
|
|
18
18
|
class BundleExecutionStarter:
|
|
19
19
|
"""Executes a pre-serialized bundle in a subprocess via `SpawnProcess`.
|
|
20
20
|
|
|
21
|
-
Source: runner.py lines 771-841.
|
|
22
21
|
Uses module-level `execute_bundle_in_subprocess` reference -- patch the
|
|
23
22
|
module to override.
|
|
24
23
|
|
{prefect_client-3.8.9.dev7 → prefect_client-3.9.1.dev1}/src/prefect/runner/_starter_direct.py
RENAMED
|
@@ -17,7 +17,6 @@ if TYPE_CHECKING:
|
|
|
17
17
|
class DirectSubprocessStarter:
|
|
18
18
|
"""Runs a flow object directly in a subprocess via `run_flow_in_subprocess`.
|
|
19
19
|
|
|
20
|
-
Source: runner.py lines 874-889.
|
|
21
20
|
Uses module-level `run_flow_in_subprocess` reference -- patch the module
|
|
22
21
|
to override.
|
|
23
22
|
"""
|