prefect-client 3.7.2.dev5__tar.gz → 3.7.3__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.7.2.dev5 → prefect_client-3.7.3}/PKG-INFO +3 -2
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/pyproject.toml +2 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/AGENTS.md +1 -0
- prefect_client-3.7.3/src/prefect/_build_info.py +5 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/result_records.py +9 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/__init__.py +10 -3
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/_leases.py +10 -2
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/clients.py +1 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/subscribers.py +1 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/handlers.py +6 -3
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/results.py +8 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/AGENTS.md +5 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_workspace_resolver.py +83 -5
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_workspace_starter.py +4 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/runner.py +1 -1
- prefect_client-3.7.3/src/prefect/server/api/__init__.py +86 -0
- prefect_client-3.7.3/src/prefect/server/api/_ui_static.py +85 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/server.py +4 -22
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/workers.py +1 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/AGENTS.md +6 -0
- prefect_client-3.7.3/src/prefect/settings/_types.py +226 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/context.py +9 -3
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/root.py +56 -11
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/runner.py +9 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/api.py +10 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/root.py +5 -0
- prefect_client-3.7.3/src/prefect/settings/models/server/worker_channel.py +54 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/states.py +5 -1
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/templating/__init__.py +146 -113
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_transport.py +6 -1
- prefect_client-3.7.2.dev5/src/prefect/_build_info.py +0 -5
- prefect_client-3.7.2.dev5/src/prefect/server/api/__init__.py +0 -33
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/.gitignore +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/LICENSE +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/README.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/hatch_build.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/__main__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/agent.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/automations.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/context.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/engine.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/related.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/flows.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/futures.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/main.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/plugins.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/py.typed +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/schedules.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/serializers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/tasks.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/transactions.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/types/names.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/variables.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.3
|
|
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
|
|
@@ -47,7 +47,7 @@ Requires-Dist: prometheus-client>=0.20.0
|
|
|
47
47
|
Requires-Dist: pydantic!=2.11.0,!=2.11.1,!=2.11.2,!=2.11.3,!=2.11.4,<3.0.0,>=2.10.1
|
|
48
48
|
Requires-Dist: pydantic-core<3.0.0,>=2.12.0
|
|
49
49
|
Requires-Dist: pydantic-extra-types<3.0.0,>=2.8.2
|
|
50
|
-
Requires-Dist: pydantic-settings
|
|
50
|
+
Requires-Dist: pydantic-settings<3.0.0,>=2.9.1
|
|
51
51
|
Requires-Dist: python-dateutil<3.0.0,>=2.8.2
|
|
52
52
|
Requires-Dist: python-slugify<9.0,>=5.0
|
|
53
53
|
Requires-Dist: pytz<2027,>=2021.1
|
|
@@ -57,6 +57,7 @@ Requires-Dist: rich<16.0,>=11.0
|
|
|
57
57
|
Requires-Dist: ruamel-yaml-clib>=0.2.8; platform_python_implementation == 'CPython'
|
|
58
58
|
Requires-Dist: ruamel-yaml>=0.17.0
|
|
59
59
|
Requires-Dist: sniffio<2.0.0,>=1.3.0
|
|
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
|
|
@@ -51,7 +51,7 @@ dependencies = [
|
|
|
51
51
|
"pydantic>=2.10.1,<3.0.0,!=2.11.0,!=2.11.1,!=2.11.2,!=2.11.3,!=2.11.4",
|
|
52
52
|
"pydantic_core>=2.12.0,<3.0.0",
|
|
53
53
|
"pydantic_extra_types>=2.8.2,<3.0.0",
|
|
54
|
-
"pydantic_settings
|
|
54
|
+
"pydantic_settings>=2.9.1,<3.0.0",
|
|
55
55
|
"python-dateutil>=2.8.2,<3.0.0",
|
|
56
56
|
"python-slugify>=5.0,<9.0",
|
|
57
57
|
"pytz>=2021.1,<2027",
|
|
@@ -61,6 +61,7 @@ dependencies = [
|
|
|
61
61
|
"ruamel.yaml>=0.17.0",
|
|
62
62
|
"ruamel.yaml.clib>=0.2.8; platform_python_implementation == 'CPython'",
|
|
63
63
|
"sniffio>=1.3.0,<2.0.0",
|
|
64
|
+
"starlette>=1.0.1",
|
|
64
65
|
"toml>=0.10.0",
|
|
65
66
|
"typing_extensions>=4.10.0,<5.0.0",
|
|
66
67
|
"uvicorn>=0.14.0,!=0.29.0",
|
|
@@ -32,6 +32,7 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
|
|
|
32
32
|
- **Nested task submissions on a bounded `ThreadPoolTaskRunner` can deadlock.** When a worker task submits children and blocks on `.result()` while all `max_workers` threads are busy, the pool starves. `_warn_if_nested_submit_would_deadlock` detects this and emits a one-time warning — preserve this detection when changing pool management.
|
|
33
33
|
- **Result storage resolves through three tiers, potentially making an API call.** `get_default_result_storage()` checks: (1) `PREFECT_DEFAULT_RESULT_STORAGE_BLOCK` setting, (2) server-configured default block (API call to the server's Configuration store), (3) local storage path. The API call is silently suppressed on any HTTP error. Engines use `_get_default_persist_result()` — not `should_persist_result()` — at context setup time to auto-enable persistence when a server default block is configured. Do not swap `_get_default_persist_result()` back to `should_persist_result()` in engine initialization paths; `should_persist_result()` does not consult the server default.
|
|
34
34
|
- **`ResultRecordMetadata` tolerates unknown serializer types.** When loading persisted metadata, an unrecognized serializer `type` is converted to an `UnknownSerializer` placeholder rather than raising `ValidationError`. This allows inspecting result metadata when the serializer implementation is unavailable in the current environment. However, known serializer types with invalid fields still raise `ValidationError`. `UnknownSerializer.dumps()` and `UnknownSerializer.loads()` raise `RuntimeError` — the tolerance is for inspection only, not actual serialization/deserialization.
|
|
35
|
+
- **`ResultRecord` must be marked persisted after every storage write.** `ResultStore` calls `mark_persisted()` on every record it writes; `to_state_create` in `states.py` consults `is_persisted` as a fallback when `should_persist_result()` returns `False` (e.g., after run context teardown). Any new sync or async persist path that omits `mark_persisted()` will silently drop state metadata for already-written results.
|
|
35
36
|
- **Flow-run suspension is enforced at orchestration boundaries.** Suspension is delivered via `FlowRunSuspensionRequest` and raised with `raise_if_flow_run_suspension_requested()`. When changing engines, futures, task runners, or generator execution, check before returning control to flow user code or proposing a flow state that could leave `Suspended`; keep sync/async paths aligned and avoid per-boundary API reads.
|
|
36
37
|
|
|
37
38
|
## Logging
|
|
@@ -16,6 +16,7 @@ from uuid import UUID
|
|
|
16
16
|
from pydantic import (
|
|
17
17
|
BaseModel,
|
|
18
18
|
Field,
|
|
19
|
+
PrivateAttr,
|
|
19
20
|
ValidationError,
|
|
20
21
|
field_validator,
|
|
21
22
|
model_validator,
|
|
@@ -105,6 +106,14 @@ class ResultRecord(BaseModel, Generic[R]):
|
|
|
105
106
|
|
|
106
107
|
metadata: ResultRecordMetadata
|
|
107
108
|
result: R
|
|
109
|
+
_persisted: bool = PrivateAttr(default=False)
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def is_persisted(self) -> bool:
|
|
113
|
+
return self._persisted
|
|
114
|
+
|
|
115
|
+
def mark_persisted(self) -> None:
|
|
116
|
+
self._persisted = True
|
|
108
117
|
|
|
109
118
|
@property
|
|
110
119
|
def expiration(self) -> DateTime | None:
|
{prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/client/orchestration/__init__.py
RENAMED
|
@@ -137,6 +137,7 @@ from prefect.settings import (
|
|
|
137
137
|
)
|
|
138
138
|
from prefect.types._datetime import now
|
|
139
139
|
|
|
140
|
+
from prefect._internal.urls import strip_auth_from_url
|
|
140
141
|
from prefect._internal.version_checking import (
|
|
141
142
|
_api_version_check_key,
|
|
142
143
|
_cache_api_version_check,
|
|
@@ -1132,7 +1133,9 @@ class PrefectClient(
|
|
|
1132
1133
|
except Exception as e:
|
|
1133
1134
|
if "Unauthorized" in str(e):
|
|
1134
1135
|
raise e
|
|
1135
|
-
raise RuntimeError(
|
|
1136
|
+
raise RuntimeError(
|
|
1137
|
+
f"Failed to reach API at {strip_auth_from_url(str(self.api_url))}"
|
|
1138
|
+
) from e
|
|
1136
1139
|
|
|
1137
1140
|
api_version = version.parse(api_version)
|
|
1138
1141
|
client_version = version.parse(self.client_version())
|
|
@@ -1190,7 +1193,9 @@ class PrefectClient(
|
|
|
1190
1193
|
f"{PREFECT_API_DATABASE_CONNECTION_URL.value()}"
|
|
1191
1194
|
)
|
|
1192
1195
|
else:
|
|
1193
|
-
self.logger.debug(
|
|
1196
|
+
self.logger.debug(
|
|
1197
|
+
f"Connecting to API at {strip_auth_from_url(str(self.api_url))}"
|
|
1198
|
+
)
|
|
1194
1199
|
|
|
1195
1200
|
# Enter the httpx client's context
|
|
1196
1201
|
await self._exit_stack.enter_async_context(self._client)
|
|
@@ -1519,7 +1524,9 @@ class SyncPrefectClient(
|
|
|
1519
1524
|
except Exception as e:
|
|
1520
1525
|
if "Unauthorized" in str(e):
|
|
1521
1526
|
raise e
|
|
1522
|
-
raise RuntimeError(
|
|
1527
|
+
raise RuntimeError(
|
|
1528
|
+
f"Failed to reach API at {strip_auth_from_url(str(self.api_url))}"
|
|
1529
|
+
) from e
|
|
1523
1530
|
|
|
1524
1531
|
api_version = version.parse(api_version)
|
|
1525
1532
|
client_version = version.parse(self.client_version())
|
|
@@ -143,9 +143,14 @@ def _start_lease_renewal_thread(
|
|
|
143
143
|
stop_event = threading.Event()
|
|
144
144
|
renewal_ctx = contextvars.copy_context()
|
|
145
145
|
|
|
146
|
-
def
|
|
146
|
+
def _run_with_failure_handler() -> None:
|
|
147
|
+
# Runs inside renewal_ctx so the failure handler also sees the
|
|
148
|
+
# copied flow/task run contextvars; otherwise get_run_logger() in
|
|
149
|
+
# _handle_lease_renewal_failure can't find the run context and the
|
|
150
|
+
# message falls back to the plain "prefect.concurrency" logger,
|
|
151
|
+
# never reaching the run logs API.
|
|
147
152
|
try:
|
|
148
|
-
|
|
153
|
+
_lease_renewal_loop(lease_id, lease_duration, stop_event)
|
|
149
154
|
except Exception as exc:
|
|
150
155
|
if not stop_event.is_set():
|
|
151
156
|
_handle_lease_renewal_failure(
|
|
@@ -156,6 +161,9 @@ def _start_lease_renewal_thread(
|
|
|
156
161
|
cancel_scope,
|
|
157
162
|
)
|
|
158
163
|
|
|
164
|
+
def renewal_loop() -> None:
|
|
165
|
+
renewal_ctx.run(_run_with_failure_handler)
|
|
166
|
+
|
|
159
167
|
thread = threading.Thread(
|
|
160
168
|
target=renewal_loop,
|
|
161
169
|
daemon=True,
|
|
@@ -31,7 +31,7 @@ from websockets.exceptions import (
|
|
|
31
31
|
import prefect.types._datetime
|
|
32
32
|
from prefect._internal.version_checking import check_server_version
|
|
33
33
|
from prefect._internal.websockets import websocket_connect
|
|
34
|
-
from prefect.events import Event
|
|
34
|
+
from prefect.events.schemas.events import Event
|
|
35
35
|
from prefect.logging import get_logger
|
|
36
36
|
from prefect.settings import (
|
|
37
37
|
PREFECT_API_KEY,
|
|
@@ -13,9 +13,9 @@ from typing_extensions import Self
|
|
|
13
13
|
|
|
14
14
|
from prefect.client.schemas.filters import LogFilter, LogFilterFlowRunId
|
|
15
15
|
from prefect.client.schemas.objects import TERMINAL_STATES, Log, StateType
|
|
16
|
-
from prefect.events import Event
|
|
17
16
|
from prefect.events.clients import get_events_subscriber
|
|
18
17
|
from prefect.events.filters import EventAnyResourceFilter, EventFilter
|
|
18
|
+
from prefect.events.schemas.events import Event
|
|
19
19
|
from prefect.logging.clients import get_logs_subscriber
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
@@ -16,7 +16,6 @@ from rich.highlighter import Highlighter, NullHighlighter
|
|
|
16
16
|
from rich.theme import Theme
|
|
17
17
|
from typing_extensions import Self
|
|
18
18
|
|
|
19
|
-
import prefect.context
|
|
20
19
|
from prefect._internal.concurrency.api import create_call, from_sync
|
|
21
20
|
from prefect._internal.concurrency.event_loop import get_running_loop
|
|
22
21
|
from prefect._internal.concurrency.services import BatchedQueueService
|
|
@@ -161,7 +160,9 @@ class APILogHandler(logging.Handler):
|
|
|
161
160
|
Send a log to the `APILogWorker`
|
|
162
161
|
"""
|
|
163
162
|
try:
|
|
164
|
-
|
|
163
|
+
from prefect.context import get_settings_context
|
|
164
|
+
|
|
165
|
+
profile = get_settings_context()
|
|
165
166
|
|
|
166
167
|
if not profile.settings.logging.to_api.enabled:
|
|
167
168
|
return # Respect the global settings toggle
|
|
@@ -214,7 +215,9 @@ class APILogHandler(logging.Handler):
|
|
|
214
215
|
|
|
215
216
|
if not flow_run_id:
|
|
216
217
|
try:
|
|
217
|
-
|
|
218
|
+
from prefect.context import get_run_context
|
|
219
|
+
|
|
220
|
+
context = get_run_context()
|
|
218
221
|
except MissingContextError:
|
|
219
222
|
raise MissingContextError(
|
|
220
223
|
f"Logger {record.name!r} attempted to send logs to the API without"
|
|
@@ -699,6 +699,8 @@ class ResultStore(BaseModel):
|
|
|
699
699
|
except Exception:
|
|
700
700
|
return False
|
|
701
701
|
else:
|
|
702
|
+
if self.result_storage is None:
|
|
703
|
+
self.result_storage = await aget_default_result_storage()
|
|
702
704
|
try:
|
|
703
705
|
content = await call_explicitly_async_block_method(
|
|
704
706
|
self.result_storage, "read_path", (key,), {}
|
|
@@ -742,6 +744,8 @@ class ResultStore(BaseModel):
|
|
|
742
744
|
except Exception:
|
|
743
745
|
return False
|
|
744
746
|
else:
|
|
747
|
+
if self.result_storage is None:
|
|
748
|
+
self.result_storage = get_default_result_storage(_sync=True)
|
|
745
749
|
try:
|
|
746
750
|
content = call_explicitly_sync_block_method(
|
|
747
751
|
self.result_storage, "read_path", (key,), {}
|
|
@@ -863,6 +867,7 @@ class ResultStore(BaseModel):
|
|
|
863
867
|
|
|
864
868
|
if self.cache_result_in_memory:
|
|
865
869
|
self.cache[resolved_key_path] = result_record
|
|
870
|
+
result_record.mark_persisted()
|
|
866
871
|
return result_record
|
|
867
872
|
|
|
868
873
|
def _read(self, key: str, holder: str) -> "ResultRecord[Any]":
|
|
@@ -932,6 +937,7 @@ class ResultStore(BaseModel):
|
|
|
932
937
|
|
|
933
938
|
if self.cache_result_in_memory:
|
|
934
939
|
self.cache[resolved_key_path] = result_record
|
|
940
|
+
result_record.mark_persisted()
|
|
935
941
|
return result_record
|
|
936
942
|
|
|
937
943
|
def read(
|
|
@@ -1118,6 +1124,7 @@ class ResultStore(BaseModel):
|
|
|
1118
1124
|
(result_record.metadata.storage_key,),
|
|
1119
1125
|
{"content": result_record.serialize()},
|
|
1120
1126
|
)
|
|
1127
|
+
result_record.mark_persisted()
|
|
1121
1128
|
if self.cache_result_in_memory:
|
|
1122
1129
|
self.cache[key] = result_record
|
|
1123
1130
|
|
|
@@ -1181,6 +1188,7 @@ class ResultStore(BaseModel):
|
|
|
1181
1188
|
(result_record.metadata.storage_key,),
|
|
1182
1189
|
{"content": result_record.serialize()},
|
|
1183
1190
|
)
|
|
1191
|
+
result_record.mark_persisted()
|
|
1184
1192
|
if self.cache_result_in_memory:
|
|
1185
1193
|
self.cache[key] = result_record
|
|
1186
1194
|
|
|
@@ -138,7 +138,11 @@ These validations exist to prevent git argument injection. Do not bypass them wh
|
|
|
138
138
|
|
|
139
139
|
**Env/sys.path isolation:** `_prepared_workspace_context` mutates `os.environ` and `sys.path` in the caller process but does NOT change `os.getcwd()`. The parent working directory is preserved.
|
|
140
140
|
|
|
141
|
-
**
|
|
141
|
+
**Local path in-place execution:** When no pull steps are configured and the entrypoint file exists at `deployment.path` but not in the workspace root, `prepare_workspace` sets `working_directory` to the local path — not under `workspace_root`. The workspace directory is still created but is not the execution root. This is the "image-baked" pattern: code lives at a fixed local path (e.g., inside a container), not in object storage.
|
|
142
|
+
|
|
143
|
+
**Pull-step directory fallback:** When pull steps run but none produces a `directory` output or changes CWD, `_ensure_entrypoint_in_workspace` copies storage into the workspace root as a fallback. This handles setup-only pull steps (e.g., `run_shell_script` for environment prep) that do not control the working directory themselves.
|
|
144
|
+
|
|
145
|
+
**Automatic dependency installation:** By default, `WorkspaceResolvingEngineCommandStarter` does not install dependencies before starting a flow run. When no explicit command is passed and `PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES` is true, it auto-selects `uv run --no-default-groups --project <project_root> -m prefect.flow_engine` — but only when all three conditions hold: `pyproject.toml` exists at `project_root`, the `project.dependencies` list includes `prefect`, and `uv` is found via the workspace's `PATH` env var (not the system PATH). If the setting is false or any condition fails, the command falls back to `None`. Explicit commands always take precedence.
|
|
142
146
|
|
|
143
147
|
## Reference
|
|
144
148
|
|
{prefect_client-3.7.2.dev5 → prefect_client-3.7.3}/src/prefect/runner/_workspace_resolver.py
RENAMED
|
@@ -174,6 +174,61 @@ def _workspace_destination_for_deployment_path(
|
|
|
174
174
|
return (workspace_root / relative_destination).resolve()
|
|
175
175
|
|
|
176
176
|
|
|
177
|
+
def _resolve_local_runtime_directory(
|
|
178
|
+
path: str | None, source_cwd: Path, storage_base_path: Path | None
|
|
179
|
+
) -> Path:
|
|
180
|
+
resolved_path = _resolve_local_deployment_path(path, source_cwd, storage_base_path)
|
|
181
|
+
return Path(resolved_path).resolve() if resolved_path is not None else source_cwd
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _entrypoint_file_path(entrypoint: str, working_directory: Path) -> Path | None:
|
|
185
|
+
entrypoint = _resolve_runtime_entrypoint(entrypoint)
|
|
186
|
+
if ":" not in entrypoint:
|
|
187
|
+
return None
|
|
188
|
+
|
|
189
|
+
path, _object_name = entrypoint.rsplit(":", 1)
|
|
190
|
+
if not path.endswith(".py"):
|
|
191
|
+
return None
|
|
192
|
+
|
|
193
|
+
entrypoint_path = Path(path).expanduser()
|
|
194
|
+
if not entrypoint_path.is_absolute():
|
|
195
|
+
entrypoint_path = working_directory / entrypoint_path
|
|
196
|
+
return entrypoint_path.resolve()
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def _has_entrypoint_file(entrypoint: str, working_directory: Path) -> bool:
|
|
200
|
+
entrypoint_path = _entrypoint_file_path(entrypoint, working_directory)
|
|
201
|
+
return entrypoint_path is not None and entrypoint_path.is_file()
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
async def _ensure_entrypoint_in_workspace(
|
|
205
|
+
client: "PrefectClient",
|
|
206
|
+
deployment: "DeploymentResponse",
|
|
207
|
+
workspace_root: Path,
|
|
208
|
+
source_cwd: Path,
|
|
209
|
+
storage_base_path: Path | None,
|
|
210
|
+
) -> Path:
|
|
211
|
+
if _has_entrypoint_file(deployment.entrypoint, workspace_root):
|
|
212
|
+
return workspace_root
|
|
213
|
+
|
|
214
|
+
local_runtime_directory = _resolve_local_runtime_directory(
|
|
215
|
+
deployment.path, source_cwd, storage_base_path
|
|
216
|
+
)
|
|
217
|
+
if not deployment.storage_document_id and not _has_entrypoint_file(
|
|
218
|
+
deployment.entrypoint, local_runtime_directory
|
|
219
|
+
):
|
|
220
|
+
return workspace_root
|
|
221
|
+
|
|
222
|
+
await _pull_storage_into_workspace(
|
|
223
|
+
client,
|
|
224
|
+
deployment,
|
|
225
|
+
workspace_root,
|
|
226
|
+
source_cwd,
|
|
227
|
+
storage_base_path,
|
|
228
|
+
)
|
|
229
|
+
return workspace_root
|
|
230
|
+
|
|
231
|
+
|
|
177
232
|
@contextlib.contextmanager
|
|
178
233
|
def _redirect_stdout_to_stderr() -> Any:
|
|
179
234
|
stdout = sys.stdout
|
|
@@ -218,9 +273,12 @@ async def _pull_storage_into_workspace(
|
|
|
218
273
|
else None
|
|
219
274
|
)
|
|
220
275
|
else:
|
|
221
|
-
|
|
276
|
+
resolved_local_path = _resolve_local_deployment_path(
|
|
222
277
|
deployment.path, source_cwd, storage_base_path
|
|
223
278
|
)
|
|
279
|
+
from_path = (
|
|
280
|
+
resolved_local_path if resolved_local_path is not None else str(source_cwd)
|
|
281
|
+
)
|
|
224
282
|
storage_block = LocalFileSystem(basepath=from_path)
|
|
225
283
|
|
|
226
284
|
LOGGER.info("Downloading flow code from storage at %r", from_path)
|
|
@@ -253,11 +311,17 @@ async def prepare_workspace(
|
|
|
253
311
|
source_cwd,
|
|
254
312
|
storage_base_path,
|
|
255
313
|
)
|
|
256
|
-
|
|
257
|
-
|
|
314
|
+
local_runtime_directory = _resolve_local_runtime_directory(
|
|
315
|
+
deployment.path, source_cwd, storage_base_path
|
|
316
|
+
)
|
|
317
|
+
if not _has_entrypoint_file(
|
|
318
|
+
deployment.entrypoint, working_directory
|
|
319
|
+
) and _has_entrypoint_file(deployment.entrypoint, local_runtime_directory):
|
|
320
|
+
working_directory = local_runtime_directory
|
|
258
321
|
else:
|
|
322
|
+
working_directory = resolved_workspace_root
|
|
323
|
+
step_selected_working_directory = False
|
|
259
324
|
os.chdir(resolved_workspace_root)
|
|
260
|
-
working_directory = Path.cwd().resolve()
|
|
261
325
|
LOGGER.info("Running %s deployment pull step(s)", len(deployment.pull_steps))
|
|
262
326
|
|
|
263
327
|
def _track_step_workspace(
|
|
@@ -266,17 +330,19 @@ async def prepare_workspace(
|
|
|
266
330
|
step_start_cwd: Path | None,
|
|
267
331
|
step_end_cwd: Path | None,
|
|
268
332
|
) -> None:
|
|
269
|
-
nonlocal working_directory
|
|
333
|
+
nonlocal step_selected_working_directory, working_directory
|
|
270
334
|
|
|
271
335
|
if isinstance(step_output, dict) and step_output.get("directory"):
|
|
272
336
|
resolved_directory = _resolve_directory_output(
|
|
273
337
|
step_output, step_end_cwd
|
|
274
338
|
)
|
|
275
339
|
if resolved_directory is not None:
|
|
340
|
+
step_selected_working_directory = True
|
|
276
341
|
working_directory = resolved_directory
|
|
277
342
|
return
|
|
278
343
|
|
|
279
344
|
if step_end_cwd is not None and step_end_cwd != step_start_cwd:
|
|
345
|
+
step_selected_working_directory = True
|
|
280
346
|
working_directory = step_end_cwd
|
|
281
347
|
|
|
282
348
|
with _observe_step_completion(_track_step_workspace):
|
|
@@ -288,6 +354,18 @@ async def prepare_workspace(
|
|
|
288
354
|
logger=LOGGER,
|
|
289
355
|
)
|
|
290
356
|
|
|
357
|
+
if not step_selected_working_directory:
|
|
358
|
+
working_directory = await _ensure_entrypoint_in_workspace(
|
|
359
|
+
client,
|
|
360
|
+
deployment,
|
|
361
|
+
resolved_workspace_root,
|
|
362
|
+
source_cwd,
|
|
363
|
+
storage_base_path,
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
os.chdir(working_directory)
|
|
367
|
+
working_directory = Path.cwd().resolve()
|
|
368
|
+
|
|
291
369
|
project_root = _find_project_root(working_directory, resolved_workspace_root)
|
|
292
370
|
return PreparedWorkspace(
|
|
293
371
|
workspace_root=resolved_workspace_root,
|
|
@@ -167,6 +167,9 @@ def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
|
|
|
167
167
|
|
|
168
168
|
|
|
169
169
|
def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
|
|
170
|
+
if not get_current_settings().runner.auto_install_dependencies:
|
|
171
|
+
return None
|
|
172
|
+
|
|
170
173
|
project_root = workspace.project_root
|
|
171
174
|
if project_root is None:
|
|
172
175
|
return None
|
|
@@ -188,6 +191,7 @@ def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
|
|
|
188
191
|
[
|
|
189
192
|
uv_executable,
|
|
190
193
|
"run",
|
|
194
|
+
"--no-default-groups",
|
|
191
195
|
"--project",
|
|
192
196
|
str(project_root),
|
|
193
197
|
"-m",
|
|
@@ -1701,7 +1701,7 @@ class Runner:
|
|
|
1701
1701
|
):
|
|
1702
1702
|
return self._deployment_registry.get_flow(flow_run.deployment_id)
|
|
1703
1703
|
return await load_flow_from_flow_run(
|
|
1704
|
-
|
|
1704
|
+
flow_run, storage_base_path=str(self._tmp_dir)
|
|
1705
1705
|
)
|
|
1706
1706
|
|
|
1707
1707
|
self._hook_runner = HookRunner(resolve_flow=_resolve_flow_for_hooks)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from prefect.server.api import (
|
|
8
|
+
admin,
|
|
9
|
+
artifacts,
|
|
10
|
+
automations,
|
|
11
|
+
block_capabilities,
|
|
12
|
+
block_documents,
|
|
13
|
+
block_schemas,
|
|
14
|
+
block_types,
|
|
15
|
+
collections,
|
|
16
|
+
concurrency_limits,
|
|
17
|
+
concurrency_limits_v2,
|
|
18
|
+
csrf_token,
|
|
19
|
+
dependencies,
|
|
20
|
+
deployments,
|
|
21
|
+
events,
|
|
22
|
+
flow_run_states,
|
|
23
|
+
flow_runs,
|
|
24
|
+
flows,
|
|
25
|
+
logs,
|
|
26
|
+
middleware,
|
|
27
|
+
root,
|
|
28
|
+
run_history,
|
|
29
|
+
saved_searches,
|
|
30
|
+
server,
|
|
31
|
+
task_run_states,
|
|
32
|
+
task_runs,
|
|
33
|
+
task_workers,
|
|
34
|
+
templates,
|
|
35
|
+
ui,
|
|
36
|
+
variables,
|
|
37
|
+
work_queues,
|
|
38
|
+
workers,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"admin",
|
|
43
|
+
"artifacts",
|
|
44
|
+
"automations",
|
|
45
|
+
"block_capabilities",
|
|
46
|
+
"block_documents",
|
|
47
|
+
"block_schemas",
|
|
48
|
+
"block_types",
|
|
49
|
+
"collections",
|
|
50
|
+
"concurrency_limits",
|
|
51
|
+
"concurrency_limits_v2",
|
|
52
|
+
"csrf_token",
|
|
53
|
+
"dependencies",
|
|
54
|
+
"deployments",
|
|
55
|
+
"events",
|
|
56
|
+
"flow_run_states",
|
|
57
|
+
"flow_runs",
|
|
58
|
+
"flows",
|
|
59
|
+
"logs",
|
|
60
|
+
"middleware",
|
|
61
|
+
"root",
|
|
62
|
+
"run_history",
|
|
63
|
+
"saved_searches",
|
|
64
|
+
"server",
|
|
65
|
+
"task_run_states",
|
|
66
|
+
"task_runs",
|
|
67
|
+
"task_workers",
|
|
68
|
+
"templates",
|
|
69
|
+
"ui",
|
|
70
|
+
"variables",
|
|
71
|
+
"work_queues",
|
|
72
|
+
"workers",
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def __getattr__(name: str) -> object:
|
|
77
|
+
module_name = f"{__name__}.{name}"
|
|
78
|
+
try:
|
|
79
|
+
module = importlib.import_module(module_name)
|
|
80
|
+
except ModuleNotFoundError as exc:
|
|
81
|
+
if exc.name != module_name:
|
|
82
|
+
raise
|
|
83
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}") from None
|
|
84
|
+
|
|
85
|
+
globals()[name] = module
|
|
86
|
+
return module
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Private helpers for UI static-file management during server startup."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import errno
|
|
6
|
+
import logging
|
|
7
|
+
import pathlib
|
|
8
|
+
import shutil
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
UIVersion = Literal["v1", "v2"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass(frozen=True)
|
|
16
|
+
class UIBundle:
|
|
17
|
+
version: UIVersion
|
|
18
|
+
source_static_path: str
|
|
19
|
+
static_dir: str
|
|
20
|
+
base_url: str
|
|
21
|
+
cache_key: str
|
|
22
|
+
mount_name: str
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def log_ui_static_copy_error(
|
|
26
|
+
bundle: UIBundle,
|
|
27
|
+
exc: OSError,
|
|
28
|
+
logger: logging.Logger,
|
|
29
|
+
) -> None:
|
|
30
|
+
"""Log an actionable error when copying a UI bundle's static files fails."""
|
|
31
|
+
if exc.errno == errno.ENOSPC:
|
|
32
|
+
try:
|
|
33
|
+
disk_path = pathlib.Path(bundle.static_dir)
|
|
34
|
+
while not disk_path.exists():
|
|
35
|
+
disk_path = disk_path.parent
|
|
36
|
+
usage = shutil.disk_usage(disk_path)
|
|
37
|
+
available_mb = usage.free / (1024 * 1024)
|
|
38
|
+
except OSError:
|
|
39
|
+
available_mb = None
|
|
40
|
+
try:
|
|
41
|
+
required_bytes = sum(
|
|
42
|
+
f.stat().st_size
|
|
43
|
+
for f in pathlib.Path(bundle.source_static_path).rglob("*")
|
|
44
|
+
if f.is_file()
|
|
45
|
+
)
|
|
46
|
+
required_mb = required_bytes / (1024 * 1024)
|
|
47
|
+
except OSError:
|
|
48
|
+
required_mb = None
|
|
49
|
+
|
|
50
|
+
space_detail = ""
|
|
51
|
+
if required_mb is not None and available_mb is not None:
|
|
52
|
+
space_detail = (
|
|
53
|
+
f" Required: {required_mb:.1f} MB, available: {available_mb:.1f} MB."
|
|
54
|
+
)
|
|
55
|
+
elif available_mb is not None:
|
|
56
|
+
space_detail = f" Available disk space: {available_mb:.1f} MB."
|
|
57
|
+
|
|
58
|
+
logger.error(
|
|
59
|
+
"Not enough disk space to unpack %s UI static"
|
|
60
|
+
" files at %s.%s To resolve this, increase the"
|
|
61
|
+
" size of the volume mounted at that path or set"
|
|
62
|
+
" PREFECT_UI_STATIC_DIRECTORY to a location with"
|
|
63
|
+
" sufficient space.",
|
|
64
|
+
bundle.version.upper(),
|
|
65
|
+
bundle.static_dir,
|
|
66
|
+
space_detail,
|
|
67
|
+
)
|
|
68
|
+
elif isinstance(exc, PermissionError):
|
|
69
|
+
logger.error(
|
|
70
|
+
"Failed to create %s UI static directory at %s:"
|
|
71
|
+
" %s. That UI will not be available. To resolve"
|
|
72
|
+
" this, set PREFECT_UI_STATIC_DIRECTORY to a"
|
|
73
|
+
" writable directory.",
|
|
74
|
+
bundle.version.upper(),
|
|
75
|
+
bundle.static_dir,
|
|
76
|
+
exc,
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
logger.error(
|
|
80
|
+
"Failed to create %s UI static directory at %s:"
|
|
81
|
+
" %s. That UI will not be available.",
|
|
82
|
+
bundle.version.upper(),
|
|
83
|
+
bundle.static_dir,
|
|
84
|
+
exc,
|
|
85
|
+
)
|
|
@@ -21,11 +21,10 @@ import subprocess
|
|
|
21
21
|
import sys
|
|
22
22
|
import time
|
|
23
23
|
from contextlib import AsyncExitStack, asynccontextmanager
|
|
24
|
-
from dataclasses import dataclass
|
|
25
24
|
from datetime import timedelta
|
|
26
25
|
from functools import wraps
|
|
27
26
|
from hashlib import sha256
|
|
28
|
-
from typing import Any, AsyncGenerator, Awaitable, Callable,
|
|
27
|
+
from typing import Any, AsyncGenerator, Awaitable, Callable, Optional
|
|
29
28
|
|
|
30
29
|
import anyio
|
|
31
30
|
import asyncpg
|
|
@@ -52,6 +51,7 @@ from prefect._internal.compatibility.starlette import status
|
|
|
52
51
|
from prefect._internal.observability import configure_logfire
|
|
53
52
|
from prefect.client.constants import SERVER_API_VERSION
|
|
54
53
|
from prefect.logging import get_logger
|
|
54
|
+
from prefect.server.api._ui_static import UIBundle, UIVersion, log_ui_static_copy_error
|
|
55
55
|
from prefect.server.api.background_workers import background_worker
|
|
56
56
|
from prefect.server.api.dependencies import EnforceMinimumAPIVersion
|
|
57
57
|
from prefect.server.exceptions import ObjectNotFoundError
|
|
@@ -128,7 +128,6 @@ SQLITE_LOCKED_MSG = "database is locked"
|
|
|
128
128
|
UI_VERSION_COOKIE_NAME = "prefect_ui_version"
|
|
129
129
|
UI_VERSION_PATH_SEGMENT = "v2"
|
|
130
130
|
UI_STATIC_REFERENCE_FILE_NAME = "UI_SERVE_BASE"
|
|
131
|
-
UIVersion = Literal["v1", "v2"]
|
|
132
131
|
|
|
133
132
|
|
|
134
133
|
class _SQLiteLockedOperationalErrorFilter(logging.Filter):
|
|
@@ -183,16 +182,6 @@ class SPAStaticFiles(StaticFiles):
|
|
|
183
182
|
return await super().get_response("./index.html", scope)
|
|
184
183
|
|
|
185
184
|
|
|
186
|
-
@dataclass(frozen=True)
|
|
187
|
-
class UIBundle:
|
|
188
|
-
version: UIVersion
|
|
189
|
-
source_static_path: str
|
|
190
|
-
static_dir: str
|
|
191
|
-
base_url: str
|
|
192
|
-
cache_key: str
|
|
193
|
-
mount_name: str
|
|
194
|
-
|
|
195
|
-
|
|
196
185
|
def _normalize_ui_base_url(base_url: str) -> str:
|
|
197
186
|
if not base_url:
|
|
198
187
|
return "/"
|
|
@@ -749,15 +738,8 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
|
|
|
749
738
|
if not reference_file_matches_cache_key(bundle):
|
|
750
739
|
try:
|
|
751
740
|
create_ui_static_subpath(bundle)
|
|
752
|
-
except
|
|
753
|
-
logger
|
|
754
|
-
"Failed to create %s UI static directory at %s: %s. "
|
|
755
|
-
"That UI will not be available. "
|
|
756
|
-
"To resolve this, set PREFECT_UI_STATIC_DIRECTORY to a writable directory.",
|
|
757
|
-
bundle.version.upper(),
|
|
758
|
-
bundle.static_dir,
|
|
759
|
-
exc,
|
|
760
|
-
)
|
|
741
|
+
except OSError as exc:
|
|
742
|
+
log_ui_static_copy_error(bundle, exc, logger)
|
|
761
743
|
continue
|
|
762
744
|
|
|
763
745
|
mounted_bundles[bundle.version] = bundle
|