prefect-client 3.8.5.dev6__tar.gz → 3.8.6__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.5.dev6 → prefect_client-3.8.6}/PKG-INFO +1 -1
- prefect_client-3.8.6/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/core.py +36 -18
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/attribution.py +7 -1
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flow_engine.py +26 -6
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/container_instance.py +7 -1
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/_filelock.py +7 -5
- prefect_client-3.8.6/src/prefect/server/api/run_history.py +155 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/root.py +13 -0
- prefect_client-3.8.5.dev6/src/prefect/_build_info.py +0 -5
- prefect_client-3.8.5.dev6/src/prefect/server/api/run_history.py +0 -170
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/.gitignore +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/LICENSE +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/README.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/hatch_build.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/pyproject.toml +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/attempt_control.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/context.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/main.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/results.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_hook_runner.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_runtime.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_supervisor.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/states.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import collections.abc
|
|
3
4
|
import hashlib
|
|
4
5
|
import html
|
|
5
6
|
import inspect
|
|
@@ -84,7 +85,27 @@ UnionTypes: tuple[object, ...] = (Union,)
|
|
|
84
85
|
if hasattr(types, "UnionType"):
|
|
85
86
|
# Python 3.10+ only
|
|
86
87
|
UnionTypes = (*UnionTypes, types.UnionType)
|
|
87
|
-
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _nested_type_args(annotation: Any) -> tuple[Any, ...]:
|
|
91
|
+
"""
|
|
92
|
+
Returns the type arguments of `annotation` that may contain nested types,
|
|
93
|
+
or an empty tuple if `annotation` is not a supported container or union
|
|
94
|
+
annotation (e.g. `Union[A, B]`, `A | B`, `list[A]`, `dict[str, A]`, or
|
|
95
|
+
`collections.abc.Sequence[A]`).
|
|
96
|
+
|
|
97
|
+
Only the yielded type is returned for `Generator` annotations; the send
|
|
98
|
+
and return types are not part of the field's data.
|
|
99
|
+
"""
|
|
100
|
+
origin = get_origin(annotation)
|
|
101
|
+
if origin in UnionTypes:
|
|
102
|
+
return get_args(annotation)
|
|
103
|
+
if isinstance(origin, type) and issubclass(origin, collections.abc.Iterable):
|
|
104
|
+
args = get_args(annotation)
|
|
105
|
+
if issubclass(origin, collections.abc.Generator):
|
|
106
|
+
return args[:1]
|
|
107
|
+
return args
|
|
108
|
+
return ()
|
|
88
109
|
|
|
89
110
|
|
|
90
111
|
def block_schema_to_key(schema: BlockSchema) -> str:
|
|
@@ -168,11 +189,11 @@ def _collect_secret_fields(
|
|
|
168
189
|
) -> None:
|
|
169
190
|
"""
|
|
170
191
|
Recursively collects all secret fields from a given type and adds them to the
|
|
171
|
-
secrets list, supporting nested Union /
|
|
192
|
+
secrets list, supporting nested Union / container / BaseModel fields.
|
|
172
193
|
Also, note, this function mutates the input secrets list, thus does not return anything.
|
|
173
194
|
"""
|
|
174
|
-
if
|
|
175
|
-
for nested_type in
|
|
195
|
+
if nested_types := _nested_type_args(type_):
|
|
196
|
+
for nested_type in nested_types:
|
|
176
197
|
_collect_secret_fields(name, nested_type, secrets)
|
|
177
198
|
return
|
|
178
199
|
elif _is_subclass(type_, BaseModel):
|
|
@@ -302,9 +323,8 @@ def schema_extra(schema: dict[str, Any], model: type["Block"]) -> None:
|
|
|
302
323
|
else:
|
|
303
324
|
refs[field_name] = annotation._to_block_schema_reference_dict() # pyright: ignore[reportPrivateUsage]
|
|
304
325
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
collect_block_schema_references(field_name, type_)
|
|
326
|
+
for type_ in _nested_type_args(annotation):
|
|
327
|
+
collect_block_schema_references(field_name, type_)
|
|
308
328
|
|
|
309
329
|
for name, field in model.model_fields.items():
|
|
310
330
|
if field.annotation is not None:
|
|
@@ -1469,10 +1489,9 @@ class Block(BaseModel, ABC):
|
|
|
1469
1489
|
if Block.is_block_class(annotation):
|
|
1470
1490
|
return True
|
|
1471
1491
|
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
return True
|
|
1492
|
+
for nested_annotation in _nested_type_args(annotation):
|
|
1493
|
+
if Block.annotation_refers_to_block_class(nested_annotation):
|
|
1494
|
+
return True
|
|
1476
1495
|
|
|
1477
1496
|
return False
|
|
1478
1497
|
|
|
@@ -1510,8 +1529,8 @@ class Block(BaseModel, ABC):
|
|
|
1510
1529
|
if TYPE_CHECKING:
|
|
1511
1530
|
assert isinstance(coro, Coroutine)
|
|
1512
1531
|
await coro
|
|
1513
|
-
|
|
1514
|
-
for inner_annotation in
|
|
1532
|
+
else:
|
|
1533
|
+
for inner_annotation in _nested_type_args(annotation):
|
|
1515
1534
|
await register_blocks_in_annotation(inner_annotation)
|
|
1516
1535
|
|
|
1517
1536
|
for field in cls.model_fields.values():
|
|
@@ -1606,8 +1625,8 @@ class Block(BaseModel, ABC):
|
|
|
1606
1625
|
"""Walk through the annotation and register any nested blocks."""
|
|
1607
1626
|
if Block.is_block_class(annotation):
|
|
1608
1627
|
annotation.register_type_and_schema(_sync=True)
|
|
1609
|
-
|
|
1610
|
-
for inner_annotation in
|
|
1628
|
+
else:
|
|
1629
|
+
for inner_annotation in _nested_type_args(annotation):
|
|
1611
1630
|
register_blocks_in_annotation_sync(inner_annotation, sync_client)
|
|
1612
1631
|
|
|
1613
1632
|
with get_client(sync_client=True) as sync_client:
|
|
@@ -2023,9 +2042,8 @@ class Block(BaseModel, ABC):
|
|
|
2023
2042
|
# recurse into the nested block's own fields
|
|
2024
2043
|
for nested in cls._collect_nested_block_types(annotation).items():
|
|
2025
2044
|
result.setdefault(nested[0], nested[1])
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
cls._walk_annotation_for_blocks(arg, result)
|
|
2045
|
+
for arg in _nested_type_args(annotation):
|
|
2046
|
+
cls._walk_annotation_for_blocks(arg, result)
|
|
2029
2047
|
|
|
2030
2048
|
@classmethod
|
|
2031
2049
|
def model_json_schema(
|
|
@@ -67,4 +67,10 @@ def get_attribution_headers() -> dict[str, str]:
|
|
|
67
67
|
if deployment_name := os.environ.get("PREFECT__DEPLOYMENT_NAME"):
|
|
68
68
|
headers["X-Prefect-Deployment-Name"] = deployment_name
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
# HTTP header values cannot start or end with spaces or tabs. Normalize only
|
|
71
|
+
# the attribution values, leaving the actual flow/deployment/worker names intact.
|
|
72
|
+
return {
|
|
73
|
+
name: stripped
|
|
74
|
+
for name, value in headers.items()
|
|
75
|
+
if (stripped := value.strip(" \t"))
|
|
76
|
+
}
|
|
@@ -1213,9 +1213,10 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1213
1213
|
intent = _termination_intent()
|
|
1214
1214
|
if intent == "cancel":
|
|
1215
1215
|
self.handle_cancellation(exc)
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1216
|
+
raise
|
|
1217
|
+
if intent in _SUPERVISOR_OWNED_INTENTS:
|
|
1218
|
+
raise
|
|
1219
|
+
if intent is not None:
|
|
1219
1220
|
# Defensive: an unknown intent means the control
|
|
1220
1221
|
# listener was extended (e.g. "suspend" in a
|
|
1221
1222
|
# follow-up PR) without extending this dispatch.
|
|
@@ -1227,6 +1228,15 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1227
1228
|
" dispatch branch.",
|
|
1228
1229
|
intent,
|
|
1229
1230
|
)
|
|
1231
|
+
if self.flow_run.state and self.flow_run.state.is_final():
|
|
1232
|
+
# A termination signal that lands during teardown
|
|
1233
|
+
# must not overwrite an already-reported final state
|
|
1234
|
+
self.logger.debug(
|
|
1235
|
+
"Termination signal was received after the flow"
|
|
1236
|
+
" run reached a final state",
|
|
1237
|
+
exc_info=exc,
|
|
1238
|
+
)
|
|
1239
|
+
else:
|
|
1230
1240
|
self.handle_crash(exc)
|
|
1231
1241
|
raise
|
|
1232
1242
|
except Exception:
|
|
@@ -1913,9 +1923,10 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1913
1923
|
intent = _termination_intent()
|
|
1914
1924
|
if intent == "cancel":
|
|
1915
1925
|
await self.handle_cancellation(exc)
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1926
|
+
raise
|
|
1927
|
+
if intent in _SUPERVISOR_OWNED_INTENTS:
|
|
1928
|
+
raise
|
|
1929
|
+
if intent is not None:
|
|
1919
1930
|
# Defensive: see sync engine's dispatch for why.
|
|
1920
1931
|
self.logger.error(
|
|
1921
1932
|
"Unhandled termination intent %r; treating as"
|
|
@@ -1923,6 +1934,15 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
|
1923
1934
|
" dispatch branch.",
|
|
1924
1935
|
intent,
|
|
1925
1936
|
)
|
|
1937
|
+
if self.flow_run.state and self.flow_run.state.is_final():
|
|
1938
|
+
# A termination signal that lands during teardown
|
|
1939
|
+
# must not overwrite an already-reported final state
|
|
1940
|
+
self.logger.debug(
|
|
1941
|
+
"Termination signal was received after the flow"
|
|
1942
|
+
" run reached a final state",
|
|
1943
|
+
exc_info=exc,
|
|
1944
|
+
)
|
|
1945
|
+
else:
|
|
1926
1946
|
await self.handle_crash(exc)
|
|
1927
1947
|
raise
|
|
1928
1948
|
except Exception:
|
|
@@ -16,6 +16,7 @@ from __future__ import annotations
|
|
|
16
16
|
import json
|
|
17
17
|
import random
|
|
18
18
|
import shlex
|
|
19
|
+
import shutil
|
|
19
20
|
import string
|
|
20
21
|
import subprocess
|
|
21
22
|
import time
|
|
@@ -86,7 +87,12 @@ class AzureCLI:
|
|
|
86
87
|
json.JSONDecodeError: If output cannot be decoded as JSON when return_json is True.
|
|
87
88
|
"""
|
|
88
89
|
try:
|
|
89
|
-
|
|
90
|
+
args = shlex.split(command)
|
|
91
|
+
# On Windows the Azure CLI launcher is `az.cmd`; resolve the executable
|
|
92
|
+
# through PATH so subprocess can find it without a shell.
|
|
93
|
+
if args:
|
|
94
|
+
args[0] = shutil.which(args[0]) or args[0]
|
|
95
|
+
result = await run_process(args, check=False)
|
|
90
96
|
output = result.stdout.decode("utf-8").strip()
|
|
91
97
|
|
|
92
98
|
if result.returncode != 0:
|
|
@@ -28,13 +28,15 @@ def _is_pid_alive(pid: int) -> bool:
|
|
|
28
28
|
import ctypes
|
|
29
29
|
|
|
30
30
|
_PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
)
|
|
31
|
+
_ERROR_ACCESS_DENIED = 5
|
|
32
|
+
kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) # type: ignore[attr-defined]
|
|
33
|
+
handle = kernel32.OpenProcess(_PROCESS_QUERY_LIMITED_INFORMATION, False, pid)
|
|
34
34
|
if handle:
|
|
35
|
-
|
|
35
|
+
kernel32.CloseHandle(handle)
|
|
36
36
|
return True
|
|
37
|
-
|
|
37
|
+
# ERROR_ACCESS_DENIED means the process exists but we can't open it
|
|
38
|
+
# (another user, higher integrity, or a protected process).
|
|
39
|
+
return ctypes.get_last_error() == _ERROR_ACCESS_DENIED
|
|
38
40
|
|
|
39
41
|
try:
|
|
40
42
|
os.kill(pid, 0)
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utilities for querying flow and task run history.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import datetime
|
|
6
|
+
from collections import defaultdict
|
|
7
|
+
from typing import TYPE_CHECKING, Any, List, Optional
|
|
8
|
+
|
|
9
|
+
import pydantic
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
from typing_extensions import Literal
|
|
12
|
+
|
|
13
|
+
import prefect.server.models as models
|
|
14
|
+
import prefect.server.schemas as schemas
|
|
15
|
+
from prefect.logging import get_logger
|
|
16
|
+
from prefect.server.database import PrefectDBInterface, db_injector
|
|
17
|
+
from prefect.types import DateTime
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
import logging
|
|
21
|
+
|
|
22
|
+
logger: "logging.Logger" = get_logger("server.api")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@db_injector
|
|
26
|
+
async def run_history(
|
|
27
|
+
db: PrefectDBInterface,
|
|
28
|
+
session: sa.orm.Session,
|
|
29
|
+
run_type: Literal["flow_run", "task_run"],
|
|
30
|
+
history_start: DateTime,
|
|
31
|
+
history_end: DateTime,
|
|
32
|
+
history_interval: datetime.timedelta,
|
|
33
|
+
flows: Optional[schemas.filters.FlowFilter] = None,
|
|
34
|
+
flow_runs: Optional[schemas.filters.FlowRunFilter] = None,
|
|
35
|
+
task_runs: Optional[schemas.filters.TaskRunFilter] = None,
|
|
36
|
+
deployments: Optional[schemas.filters.DeploymentFilter] = None,
|
|
37
|
+
work_pools: Optional[schemas.filters.WorkPoolFilter] = None,
|
|
38
|
+
work_queues: Optional[schemas.filters.WorkQueueFilter] = None,
|
|
39
|
+
) -> list[schemas.responses.HistoryResponse]:
|
|
40
|
+
"""
|
|
41
|
+
Produce a history of runs aggregated by interval and state
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
# normalize to stdlib timedeltas; pendulum intervals, which the timestamp
|
|
45
|
+
# arguments produce when they are pendulum instances, do not support floor
|
|
46
|
+
# division by a timedelta
|
|
47
|
+
history_interval = datetime.timedelta(seconds=history_interval.total_seconds())
|
|
48
|
+
|
|
49
|
+
# SQLite has issues with very small intervals
|
|
50
|
+
# (by 0.001 seconds it stops incrementing the interval)
|
|
51
|
+
if history_interval < datetime.timedelta(seconds=1):
|
|
52
|
+
raise ValueError("History interval must not be less than 1 second.")
|
|
53
|
+
|
|
54
|
+
# prepare run-specific models
|
|
55
|
+
if run_type == "flow_run":
|
|
56
|
+
run_model = db.FlowRun
|
|
57
|
+
run_filter_function = models.flow_runs._apply_flow_run_filters
|
|
58
|
+
elif run_type == "task_run":
|
|
59
|
+
run_model = db.TaskRun
|
|
60
|
+
run_filter_function = models.task_runs._apply_task_run_filters
|
|
61
|
+
else:
|
|
62
|
+
raise ValueError(
|
|
63
|
+
f"Unknown run type {run_type!r}. Expected 'flow_run' or 'task_run'."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
elapsed = datetime.timedelta(seconds=(history_end - history_start).total_seconds())
|
|
67
|
+
interval_count = (
|
|
68
|
+
min(-((-elapsed) // history_interval), 500)
|
|
69
|
+
if elapsed > datetime.timedelta(0)
|
|
70
|
+
else 0
|
|
71
|
+
)
|
|
72
|
+
if interval_count == 0:
|
|
73
|
+
return []
|
|
74
|
+
|
|
75
|
+
history_query_end = history_start + interval_count * history_interval
|
|
76
|
+
|
|
77
|
+
# apply filters to the flow runs (and related states)
|
|
78
|
+
runs = await run_filter_function(
|
|
79
|
+
db,
|
|
80
|
+
sa.select(
|
|
81
|
+
run_model.id,
|
|
82
|
+
run_model.expected_start_time,
|
|
83
|
+
run_model.estimated_run_time,
|
|
84
|
+
run_model.estimated_start_time_delta,
|
|
85
|
+
run_model.state_type,
|
|
86
|
+
run_model.state_name,
|
|
87
|
+
db.queries.make_timestamp_bucket_index(
|
|
88
|
+
run_model.expected_start_time,
|
|
89
|
+
history_start,
|
|
90
|
+
history_interval,
|
|
91
|
+
).label("bucket_index"),
|
|
92
|
+
)
|
|
93
|
+
.select_from(run_model)
|
|
94
|
+
.where(
|
|
95
|
+
run_model.expected_start_time >= history_start,
|
|
96
|
+
run_model.expected_start_time < history_query_end,
|
|
97
|
+
),
|
|
98
|
+
flow_filter=flows,
|
|
99
|
+
flow_run_filter=flow_runs,
|
|
100
|
+
task_run_filter=task_runs,
|
|
101
|
+
deployment_filter=deployments,
|
|
102
|
+
work_pool_filter=work_pools,
|
|
103
|
+
work_queue_filter=work_queues,
|
|
104
|
+
)
|
|
105
|
+
runs = runs.alias("runs")
|
|
106
|
+
|
|
107
|
+
counts = sa.select(
|
|
108
|
+
runs.c.bucket_index,
|
|
109
|
+
runs.c.state_type,
|
|
110
|
+
runs.c.state_name,
|
|
111
|
+
sa.func.count(runs.c.id).label("count_runs"),
|
|
112
|
+
# estimated run times only includes positive run times (to avoid any unexpected corner cases)
|
|
113
|
+
sa.func.sum(
|
|
114
|
+
sa.func.greatest(0, sa.extract("epoch", runs.c.estimated_run_time))
|
|
115
|
+
).label("sum_estimated_run_time"),
|
|
116
|
+
# estimated lateness is the sum of any positive start time deltas
|
|
117
|
+
sa.func.sum(
|
|
118
|
+
sa.func.greatest(0, sa.extract("epoch", runs.c.estimated_start_time_delta))
|
|
119
|
+
).label("sum_estimated_lateness"),
|
|
120
|
+
).group_by(
|
|
121
|
+
runs.c.bucket_index,
|
|
122
|
+
runs.c.state_type,
|
|
123
|
+
runs.c.state_name,
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# issue the query
|
|
127
|
+
result = await session.execute(counts)
|
|
128
|
+
states_by_bucket: dict[int, list[dict[str, Any]]] = defaultdict(list)
|
|
129
|
+
for record in result.mappings():
|
|
130
|
+
states_by_bucket[record["bucket_index"]].append(
|
|
131
|
+
{
|
|
132
|
+
"state_type": record["state_type"],
|
|
133
|
+
"state_name": record["state_name"],
|
|
134
|
+
"count_runs": record["count_runs"],
|
|
135
|
+
"sum_estimated_run_time": record["sum_estimated_run_time"],
|
|
136
|
+
"sum_estimated_lateness": record["sum_estimated_lateness"],
|
|
137
|
+
}
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
records = [
|
|
141
|
+
{
|
|
142
|
+
"interval_start": (history_start + i * history_interval).astimezone(
|
|
143
|
+
datetime.timezone.utc
|
|
144
|
+
),
|
|
145
|
+
"interval_end": (history_start + (i + 1) * history_interval).astimezone(
|
|
146
|
+
datetime.timezone.utc
|
|
147
|
+
),
|
|
148
|
+
"states": states_by_bucket[i],
|
|
149
|
+
}
|
|
150
|
+
for i in range(interval_count)
|
|
151
|
+
]
|
|
152
|
+
|
|
153
|
+
return pydantic.TypeAdapter(
|
|
154
|
+
List[schemas.responses.HistoryResponse]
|
|
155
|
+
).validate_python(records)
|
|
@@ -279,6 +279,19 @@ class Settings(PrefectBaseSettings):
|
|
|
279
279
|
to use default_factory. The remaining items here require access to the full Settings instance
|
|
280
280
|
or have complex interdependencies that will be migrated in future PRs.
|
|
281
281
|
"""
|
|
282
|
+
if "profiles_path" not in self.model_fields_set:
|
|
283
|
+
self.profiles_path = self.home / "profiles.toml"
|
|
284
|
+
self.__pydantic_fields_set__.remove("profiles_path")
|
|
285
|
+
if "local_storage_path" not in self.results.model_fields_set:
|
|
286
|
+
self.results.local_storage_path = self.home / "storage"
|
|
287
|
+
self.results.__pydantic_fields_set__.remove("local_storage_path")
|
|
288
|
+
if "config_path" not in self.logging.model_fields_set:
|
|
289
|
+
self.logging.config_path = self.home / "logging.yml"
|
|
290
|
+
self.logging.__pydantic_fields_set__.remove("config_path")
|
|
291
|
+
if "memo_store_path" not in self.server.model_fields_set:
|
|
292
|
+
self.server.memo_store_path = self.home / "memo_store.toml"
|
|
293
|
+
self.server.__pydantic_fields_set__.remove("memo_store_path")
|
|
294
|
+
|
|
282
295
|
if self.ui_url is None:
|
|
283
296
|
self.ui_url = default_ui_url(self)
|
|
284
297
|
self.__pydantic_fields_set__.remove("ui_url")
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Utilities for querying flow and task run history.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import datetime
|
|
6
|
-
import json
|
|
7
|
-
from typing import TYPE_CHECKING, List, Optional
|
|
8
|
-
|
|
9
|
-
import pydantic
|
|
10
|
-
import sqlalchemy as sa
|
|
11
|
-
from typing_extensions import Literal
|
|
12
|
-
|
|
13
|
-
import prefect.server.models as models
|
|
14
|
-
import prefect.server.schemas as schemas
|
|
15
|
-
from prefect.logging import get_logger
|
|
16
|
-
from prefect.server.database import PrefectDBInterface, db_injector
|
|
17
|
-
from prefect.types import DateTime
|
|
18
|
-
|
|
19
|
-
if TYPE_CHECKING:
|
|
20
|
-
import logging
|
|
21
|
-
|
|
22
|
-
logger: "logging.Logger" = get_logger("server.api")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@db_injector
|
|
26
|
-
async def run_history(
|
|
27
|
-
db: PrefectDBInterface,
|
|
28
|
-
session: sa.orm.Session,
|
|
29
|
-
run_type: Literal["flow_run", "task_run"],
|
|
30
|
-
history_start: DateTime,
|
|
31
|
-
history_end: DateTime,
|
|
32
|
-
history_interval: datetime.timedelta,
|
|
33
|
-
flows: Optional[schemas.filters.FlowFilter] = None,
|
|
34
|
-
flow_runs: Optional[schemas.filters.FlowRunFilter] = None,
|
|
35
|
-
task_runs: Optional[schemas.filters.TaskRunFilter] = None,
|
|
36
|
-
deployments: Optional[schemas.filters.DeploymentFilter] = None,
|
|
37
|
-
work_pools: Optional[schemas.filters.WorkPoolFilter] = None,
|
|
38
|
-
work_queues: Optional[schemas.filters.WorkQueueFilter] = None,
|
|
39
|
-
) -> list[schemas.responses.HistoryResponse]:
|
|
40
|
-
"""
|
|
41
|
-
Produce a history of runs aggregated by interval and state
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
# SQLite has issues with very small intervals
|
|
45
|
-
# (by 0.001 seconds it stops incrementing the interval)
|
|
46
|
-
if history_interval < datetime.timedelta(seconds=1):
|
|
47
|
-
raise ValueError("History interval must not be less than 1 second.")
|
|
48
|
-
|
|
49
|
-
# prepare run-specific models
|
|
50
|
-
if run_type == "flow_run":
|
|
51
|
-
run_model = db.FlowRun
|
|
52
|
-
run_filter_function = models.flow_runs._apply_flow_run_filters
|
|
53
|
-
elif run_type == "task_run":
|
|
54
|
-
run_model = db.TaskRun
|
|
55
|
-
run_filter_function = models.task_runs._apply_task_run_filters
|
|
56
|
-
else:
|
|
57
|
-
raise ValueError(
|
|
58
|
-
f"Unknown run type {run_type!r}. Expected 'flow_run' or 'task_run'."
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
# create a CTE for timestamp intervals
|
|
62
|
-
intervals = db.queries.make_timestamp_intervals(
|
|
63
|
-
history_start,
|
|
64
|
-
history_end,
|
|
65
|
-
history_interval,
|
|
66
|
-
).cte("intervals")
|
|
67
|
-
|
|
68
|
-
# apply filters to the flow runs (and related states)
|
|
69
|
-
runs = (
|
|
70
|
-
await run_filter_function(
|
|
71
|
-
db,
|
|
72
|
-
sa.select(
|
|
73
|
-
run_model.id,
|
|
74
|
-
run_model.expected_start_time,
|
|
75
|
-
run_model.estimated_run_time,
|
|
76
|
-
run_model.estimated_start_time_delta,
|
|
77
|
-
run_model.state_type,
|
|
78
|
-
run_model.state_name,
|
|
79
|
-
).select_from(run_model),
|
|
80
|
-
flow_filter=flows,
|
|
81
|
-
flow_run_filter=flow_runs,
|
|
82
|
-
task_run_filter=task_runs,
|
|
83
|
-
deployment_filter=deployments,
|
|
84
|
-
work_pool_filter=work_pools,
|
|
85
|
-
work_queue_filter=work_queues,
|
|
86
|
-
)
|
|
87
|
-
).alias("runs")
|
|
88
|
-
# outer join intervals to the filtered runs to create a dataset composed of
|
|
89
|
-
# every interval and the aggregate of all its runs. The runs aggregate is represented
|
|
90
|
-
# by a descriptive JSON object
|
|
91
|
-
counts = (
|
|
92
|
-
sa.select(
|
|
93
|
-
intervals.c.interval_start,
|
|
94
|
-
intervals.c.interval_end,
|
|
95
|
-
# build a JSON object, ignoring the case where the count of runs is 0
|
|
96
|
-
sa.case(
|
|
97
|
-
(sa.func.count(runs.c.id) == 0, None),
|
|
98
|
-
else_=db.queries.build_json_object(
|
|
99
|
-
"state_type",
|
|
100
|
-
runs.c.state_type,
|
|
101
|
-
"state_name",
|
|
102
|
-
runs.c.state_name,
|
|
103
|
-
"count_runs",
|
|
104
|
-
sa.func.count(runs.c.id),
|
|
105
|
-
# estimated run times only includes positive run times (to avoid any unexpected corner cases)
|
|
106
|
-
"sum_estimated_run_time",
|
|
107
|
-
sa.func.sum(
|
|
108
|
-
sa.func.greatest(
|
|
109
|
-
0, sa.extract("epoch", runs.c.estimated_run_time)
|
|
110
|
-
)
|
|
111
|
-
),
|
|
112
|
-
# estimated lateness is the sum of any positive start time deltas
|
|
113
|
-
"sum_estimated_lateness",
|
|
114
|
-
sa.func.sum(
|
|
115
|
-
sa.func.greatest(
|
|
116
|
-
0, sa.extract("epoch", runs.c.estimated_start_time_delta)
|
|
117
|
-
)
|
|
118
|
-
),
|
|
119
|
-
),
|
|
120
|
-
).label("state_agg"),
|
|
121
|
-
)
|
|
122
|
-
.select_from(intervals)
|
|
123
|
-
.join(
|
|
124
|
-
runs,
|
|
125
|
-
sa.and_(
|
|
126
|
-
runs.c.expected_start_time >= intervals.c.interval_start,
|
|
127
|
-
runs.c.expected_start_time < intervals.c.interval_end,
|
|
128
|
-
),
|
|
129
|
-
isouter=True,
|
|
130
|
-
)
|
|
131
|
-
.group_by(
|
|
132
|
-
intervals.c.interval_start,
|
|
133
|
-
intervals.c.interval_end,
|
|
134
|
-
runs.c.state_type,
|
|
135
|
-
runs.c.state_name,
|
|
136
|
-
)
|
|
137
|
-
).alias("counts")
|
|
138
|
-
|
|
139
|
-
# aggregate all state-aggregate objects into a single array for each interval,
|
|
140
|
-
# ensuring that intervals with no runs have an empty array
|
|
141
|
-
query = (
|
|
142
|
-
sa.select(
|
|
143
|
-
counts.c.interval_start,
|
|
144
|
-
counts.c.interval_end,
|
|
145
|
-
sa.func.coalesce(
|
|
146
|
-
db.queries.json_arr_agg(
|
|
147
|
-
db.queries.cast_to_json(counts.c.state_agg)
|
|
148
|
-
).filter(counts.c.state_agg.is_not(None)),
|
|
149
|
-
sa.literal("[]", literal_execute=True),
|
|
150
|
-
).label("states"),
|
|
151
|
-
)
|
|
152
|
-
.group_by(counts.c.interval_start, counts.c.interval_end)
|
|
153
|
-
.order_by(counts.c.interval_start)
|
|
154
|
-
# return no more than 500 bars
|
|
155
|
-
.limit(500)
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
# issue the query
|
|
159
|
-
result = await session.execute(query)
|
|
160
|
-
records = result.mappings()
|
|
161
|
-
|
|
162
|
-
# load and parse the record if the database returns JSON as strings
|
|
163
|
-
if db.queries.uses_json_strings:
|
|
164
|
-
records = [dict(r) for r in records]
|
|
165
|
-
for r in records:
|
|
166
|
-
r["states"] = json.loads(r["states"])
|
|
167
|
-
|
|
168
|
-
return pydantic.TypeAdapter(
|
|
169
|
-
List[schemas.responses.HistoryResponse]
|
|
170
|
-
).validate_python(records)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/execute.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/diagnostics.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/manager.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/ci_detection.py
RENAMED
|
File without changes
|
{prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|