prefect-client 3.8.8.dev4__tar.gz → 3.8.9.dev2__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.8.dev4 → prefect_client-3.8.9.dev2}/PKG-INFO +3 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/README.md +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/pyproject.toml +1 -2
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/__init__.py +3 -3
- prefect_client-3.8.9.dev2/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/_logging.py +1 -7
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/collections.py +24 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/manager.py +1 -7
- prefect_client-3.8.9.dev2/src/prefect/_internal/server_maintenance.py +58 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/core.py +1 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/__init__.py +5 -9
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/base.py +17 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/__init__.py +3 -3
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/base.py +6 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/filesystems.py +16 -10
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/formatters.py +2 -5
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/loggers.py +1 -5
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/AGENTS.md +4 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/server.py +7 -2
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/callables/__init__.py +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/__init__.py +10 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/AGENTS.md +1 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/base.py +56 -32
- prefect_client-3.8.9.dev2/src/prefect/workers/server.py +128 -0
- prefect_client-3.8.8.dev4/src/prefect/_build_info.py +0 -5
- prefect_client-3.8.8.dev4/src/prefect/workers/server.py +0 -66
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/.gitignore +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/LICENSE +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/hatch_build.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/attempt_control.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/main.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/results.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_hook_runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_runtime.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_supervisor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.9.dev2
|
|
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
|
|
@@ -14,13 +14,12 @@ Classifier: Intended Audience :: System Administrators
|
|
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
15
|
Classifier: Natural Language :: English
|
|
16
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
22
21
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
|
-
Requires-Python: <3.15,>=3.
|
|
22
|
+
Requires-Python: <3.15,>=3.11
|
|
24
23
|
Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
|
|
25
24
|
Requires-Dist: anyio<5.0.0,>=4.4.0
|
|
26
25
|
Requires-Dist: asgi-lifespan<3.0,>=1.0
|
|
@@ -95,7 +94,7 @@ or other resource-constrained environments.
|
|
|
95
94
|
|
|
96
95
|
## Getting started
|
|
97
96
|
|
|
98
|
-
`prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.
|
|
97
|
+
`prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.11 or
|
|
99
98
|
later and run the following command:
|
|
100
99
|
|
|
101
100
|
```bash
|
|
@@ -26,7 +26,7 @@ or other resource-constrained environments.
|
|
|
26
26
|
|
|
27
27
|
## Getting started
|
|
28
28
|
|
|
29
|
-
`prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.
|
|
29
|
+
`prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.11 or
|
|
30
30
|
later and run the following command:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
@@ -7,7 +7,7 @@ name = "prefect-client"
|
|
|
7
7
|
dynamic = ["version"]
|
|
8
8
|
description = "Workflow orchestration and management."
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.
|
|
10
|
+
requires-python = ">=3.11,<3.15"
|
|
11
11
|
license = { text = "Apache-2.0" }
|
|
12
12
|
authors = [{ name = "Prefect Technologies, Inc.", email = "help@prefect.io" }]
|
|
13
13
|
classifiers = [
|
|
@@ -16,7 +16,6 @@ classifiers = [
|
|
|
16
16
|
"Intended Audience :: System Administrators",
|
|
17
17
|
"License :: OSI Approved :: Apache Software License",
|
|
18
18
|
"Programming Language :: Python :: 3 :: Only",
|
|
19
|
-
"Programming Language :: Python :: 3.10",
|
|
20
19
|
"Programming Language :: Python :: 3.11",
|
|
21
20
|
"Programming Language :: Python :: 3.12",
|
|
22
21
|
"Programming Language :: Python :: 3.13",
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
# Setup version and path constants
|
|
4
4
|
|
|
5
|
-
import sys
|
|
6
5
|
from . import _build_info
|
|
7
6
|
import importlib
|
|
8
7
|
import pathlib
|
|
@@ -212,8 +211,9 @@ def __getattr__(attr_name: str) -> Any:
|
|
|
212
211
|
return getattr(module, attr_name)
|
|
213
212
|
except ModuleNotFoundError as ex:
|
|
214
213
|
mname, _, attr = (ex.name or "").rpartition(".")
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
raise AttributeError(
|
|
215
|
+
f"module {mname} has no attribute {attr}", name=mname, obj=attr
|
|
216
|
+
) from ex
|
|
217
217
|
|
|
218
218
|
|
|
219
219
|
# Initialize plugins on import if enabled
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
import sys
|
|
3
2
|
|
|
4
3
|
from typing_extensions import Self
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def getLevelNamesMapping() -> dict[str, int]:
|
|
9
|
-
return getattr(logging, "_nameToLevel").copy()
|
|
10
|
-
else:
|
|
11
|
-
getLevelNamesMapping = logging.getLevelNamesMapping # novermin
|
|
5
|
+
getLevelNamesMapping = logging.getLevelNamesMapping
|
|
12
6
|
|
|
13
7
|
|
|
14
8
|
class SafeLogger(logging.Logger):
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/collections.py
RENAMED
|
@@ -8,6 +8,7 @@ typically to register Blocks or other Prefect-aware classes.
|
|
|
8
8
|
Public API is re-exported from `prefect.plugins`.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
+
import importlib
|
|
11
12
|
from importlib.metadata import EntryPoints, entry_points
|
|
12
13
|
from types import ModuleType
|
|
13
14
|
from typing import Any, Union
|
|
@@ -40,26 +41,45 @@ def safe_load_entrypoints(entrypoints: EntryPoints) -> dict[str, Union[Exception
|
|
|
40
41
|
return results
|
|
41
42
|
|
|
42
43
|
|
|
43
|
-
def load_prefect_collections(
|
|
44
|
+
def load_prefect_collections(
|
|
45
|
+
reload: bool = False,
|
|
46
|
+
) -> dict[str, Union[ModuleType, Exception]]:
|
|
44
47
|
"""
|
|
45
48
|
Load all Prefect collections that define an entrypoint in the group
|
|
46
49
|
`prefect.collections`.
|
|
50
|
+
|
|
51
|
+
Results are cached. With `reload=True`, import and metadata caches are
|
|
52
|
+
invalidated and entry points that are new or failed on a previous call are
|
|
53
|
+
loaded, so packages installed or repaired after the first call are picked up.
|
|
47
54
|
"""
|
|
48
55
|
global _collections
|
|
49
56
|
|
|
50
|
-
if _collections is not None:
|
|
57
|
+
if _collections is not None and not reload:
|
|
51
58
|
return _collections
|
|
52
59
|
|
|
60
|
+
if _collections is not None:
|
|
61
|
+
importlib.invalidate_caches()
|
|
62
|
+
|
|
53
63
|
collection_entrypoints: EntryPoints = entry_points(group="prefect.collections")
|
|
54
|
-
|
|
64
|
+
if _collections is not None:
|
|
65
|
+
known = {
|
|
66
|
+
name
|
|
67
|
+
for name, result in _collections.items()
|
|
68
|
+
if not isinstance(result, Exception)
|
|
69
|
+
}
|
|
70
|
+
collection_entrypoints = EntryPoints(
|
|
71
|
+
ep for ep in collection_entrypoints if (ep.name or ep.value) not in known
|
|
72
|
+
)
|
|
73
|
+
loaded: dict[str, Union[Exception, Any]] = safe_load_entrypoints(
|
|
55
74
|
collection_entrypoints
|
|
56
75
|
)
|
|
76
|
+
collections = {**_collections, **loaded} if _collections is not None else loaded
|
|
57
77
|
|
|
58
78
|
# TODO: Consider the utility of this once we've established this pattern.
|
|
59
79
|
# We cannot use a logger here because logging is not yet initialized.
|
|
60
80
|
# It would be nice if logging was initialized so we could log failures
|
|
61
81
|
# at least.
|
|
62
|
-
for name, result in
|
|
82
|
+
for name, result in loaded.items():
|
|
63
83
|
if isinstance(result, Exception):
|
|
64
84
|
print(
|
|
65
85
|
# TODO: Use exc_info if we have a logger
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/manager.py
RENAMED
|
@@ -7,7 +7,6 @@ from __future__ import annotations
|
|
|
7
7
|
import importlib.metadata as md
|
|
8
8
|
import inspect
|
|
9
9
|
import logging
|
|
10
|
-
import sys
|
|
11
10
|
from typing import Any
|
|
12
11
|
|
|
13
12
|
import pluggy
|
|
@@ -55,12 +54,7 @@ def load_entry_point_plugins(
|
|
|
55
54
|
deny: If set, skip plugins with names in this set
|
|
56
55
|
logger: Logger for reporting load failures
|
|
57
56
|
"""
|
|
58
|
-
|
|
59
|
-
if sys.version_info >= (3, 10):
|
|
60
|
-
entry_points_list = md.entry_points(group=ENTRYPOINTS_GROUP)
|
|
61
|
-
else:
|
|
62
|
-
# Python 3.9 returns a dict-like object
|
|
63
|
-
entry_points_list = md.entry_points().get(ENTRYPOINTS_GROUP, [])
|
|
57
|
+
entry_points_list = md.entry_points(group=ENTRYPOINTS_GROUP)
|
|
64
58
|
|
|
65
59
|
for ep in entry_points_list:
|
|
66
60
|
if allow and ep.name not in allow:
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Process-wide record of requests waiting out Prefect API maintenance.
|
|
3
|
+
|
|
4
|
+
When the API answers with a `Prefect-Maintenance: true` header, the HTTP clients
|
|
5
|
+
retry indefinitely, sleeping for the `Retry-After` they were given. Health checks
|
|
6
|
+
read this record so that a process deliberately waiting is not reported as stuck.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import datetime
|
|
10
|
+
import threading
|
|
11
|
+
|
|
12
|
+
import prefect.types._datetime
|
|
13
|
+
|
|
14
|
+
_backoff_ends_at: datetime.datetime | None = None
|
|
15
|
+
_backoff_lock = threading.Lock()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def record_maintenance_backoff(retry_seconds: float) -> None:
|
|
19
|
+
"""
|
|
20
|
+
Record that a request is sleeping for `retry_seconds` before retrying a
|
|
21
|
+
maintenance response.
|
|
22
|
+
"""
|
|
23
|
+
global _backoff_ends_at
|
|
24
|
+
ends_at = prefect.types._datetime.now("UTC") + datetime.timedelta(
|
|
25
|
+
seconds=retry_seconds
|
|
26
|
+
)
|
|
27
|
+
with _backoff_lock:
|
|
28
|
+
# Concurrent requests each back off; the latest end wins.
|
|
29
|
+
if _backoff_ends_at is None or ends_at > _backoff_ends_at:
|
|
30
|
+
_backoff_ends_at = ends_at
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def maintenance_backoff_ends_at() -> datetime.datetime | None:
|
|
34
|
+
"""
|
|
35
|
+
When the latest maintenance back-off in this process ends, or `None` if no
|
|
36
|
+
request has backed off for maintenance.
|
|
37
|
+
"""
|
|
38
|
+
with _backoff_lock:
|
|
39
|
+
return _backoff_ends_at
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def polling_window_start(last_polled: datetime.datetime) -> datetime.datetime:
|
|
43
|
+
"""
|
|
44
|
+
When the polling window of a process that last polled at `last_polled`
|
|
45
|
+
starts: the later of `last_polled` and the end of the latest maintenance
|
|
46
|
+
back-off, since a poll cannot complete while it waits out maintenance.
|
|
47
|
+
"""
|
|
48
|
+
backoff_ends_at = maintenance_backoff_ends_at()
|
|
49
|
+
if backoff_ends_at is not None and backoff_ends_at > last_polled:
|
|
50
|
+
return backoff_ends_at
|
|
51
|
+
return last_polled
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def reset_maintenance_backoff() -> None:
|
|
55
|
+
"""Forget any recorded maintenance back-off (for tests)."""
|
|
56
|
+
global _backoff_ends_at
|
|
57
|
+
with _backoff_lock:
|
|
58
|
+
_backoff_ends_at = None
|
|
@@ -81,10 +81,7 @@ R = TypeVar("R")
|
|
|
81
81
|
P = ParamSpec("P")
|
|
82
82
|
|
|
83
83
|
ResourceTuple = tuple[dict[str, Any], list[dict[str, Any]]]
|
|
84
|
-
UnionTypes: tuple[object, ...] = (Union,)
|
|
85
|
-
if hasattr(types, "UnionType"):
|
|
86
|
-
# Python 3.10+ only
|
|
87
|
-
UnionTypes = (*UnionTypes, types.UnionType)
|
|
84
|
+
UnionTypes: tuple[object, ...] = (Union, types.UnionType)
|
|
88
85
|
|
|
89
86
|
|
|
90
87
|
def _nested_type_args(annotation: Any) -> tuple[Any, ...]:
|
|
@@ -174,15 +174,11 @@ def _is_local_module(module_name: str, module_path: str | None = None) -> bool:
|
|
|
174
174
|
if module_name in sys.builtin_module_names:
|
|
175
175
|
return False
|
|
176
176
|
|
|
177
|
-
# Check if it's in the standard library
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
module_name in sys.stdlib_module_names
|
|
183
|
-
or base_module in sys.stdlib_module_names
|
|
184
|
-
):
|
|
185
|
-
return False
|
|
177
|
+
# Check if it's in the standard library
|
|
178
|
+
# Check both full module name and base module name
|
|
179
|
+
base_module = module_name.split(".")[0]
|
|
180
|
+
if module_name in sys.stdlib_module_names or base_module in sys.stdlib_module_names:
|
|
181
|
+
return False
|
|
186
182
|
|
|
187
183
|
# If we have the module path, check if it's in site-packages or dist-packages
|
|
188
184
|
if module_path:
|
|
@@ -20,6 +20,7 @@ from typing_extensions import Self
|
|
|
20
20
|
|
|
21
21
|
import prefect
|
|
22
22
|
from prefect._internal.compatibility.starlette import status
|
|
23
|
+
from prefect._internal.server_maintenance import record_maintenance_backoff
|
|
23
24
|
from prefect.client import constants
|
|
24
25
|
from prefect.client.attribution import get_attribution_headers
|
|
25
26
|
from prefect.client.schemas.objects import CsrfToken
|
|
@@ -46,6 +47,20 @@ APP_LIFESPANS_REF_COUNTS: dict[tuple[int, int], int] = {}
|
|
|
46
47
|
APP_LIFESPANS_LOCKS: dict[int, anyio.Lock] = defaultdict(anyio.Lock)
|
|
47
48
|
|
|
48
49
|
|
|
50
|
+
def _record_if_maintenance_backoff(
|
|
51
|
+
response: Optional[Response],
|
|
52
|
+
exc_info: Optional[tuple[Any, ...]],
|
|
53
|
+
retry_seconds: float,
|
|
54
|
+
) -> None:
|
|
55
|
+
# After a retryable exception, `response` is still the previous attempt's.
|
|
56
|
+
if (
|
|
57
|
+
exc_info is None
|
|
58
|
+
and response is not None
|
|
59
|
+
and response.headers.get("Prefect-Maintenance") == "true"
|
|
60
|
+
):
|
|
61
|
+
record_maintenance_backoff(retry_seconds)
|
|
62
|
+
|
|
63
|
+
|
|
49
64
|
logger: Logger = get_logger("client")
|
|
50
65
|
|
|
51
66
|
|
|
@@ -356,6 +371,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
|
|
|
356
371
|
f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
|
|
357
372
|
exc_info=exc_info,
|
|
358
373
|
)
|
|
374
|
+
_record_if_maintenance_backoff(response, exc_info, retry_seconds)
|
|
359
375
|
await anyio.sleep(retry_seconds)
|
|
360
376
|
|
|
361
377
|
assert response is not None, (
|
|
@@ -628,6 +644,7 @@ class PrefectHttpxSyncClient(httpx.Client):
|
|
|
628
644
|
f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
|
|
629
645
|
exc_info=exc_info,
|
|
630
646
|
)
|
|
647
|
+
_record_if_maintenance_backoff(response, exc_info, retry_seconds)
|
|
631
648
|
time.sleep(retry_seconds)
|
|
632
649
|
|
|
633
650
|
assert response is not None, (
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/__init__.py
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import importlib
|
|
2
|
-
import sys
|
|
3
2
|
from typing import Any, TYPE_CHECKING
|
|
4
3
|
|
|
5
4
|
if TYPE_CHECKING:
|
|
@@ -90,5 +89,6 @@ def __getattr__(attr_name: str) -> Any:
|
|
|
90
89
|
return getattr(module, attr_name)
|
|
91
90
|
except ModuleNotFoundError as ex:
|
|
92
91
|
mname, _, attr = (ex.name or "").rpartition(".")
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
raise AttributeError(
|
|
93
|
+
f"module {mname} has no attribute {attr}", name=mname, obj=attr
|
|
94
|
+
) from ex
|
|
@@ -191,13 +191,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
191
191
|
with open(from_path / Path(".prefectignore")) as f:
|
|
192
192
|
ignore_patterns = f.readlines()
|
|
193
193
|
included_files = filter_files(
|
|
194
|
-
root=from_path, ignore_patterns=ignore_patterns
|
|
194
|
+
root=from_path, ignore_patterns=ignore_patterns, as_posix=True
|
|
195
195
|
)
|
|
196
196
|
|
|
197
197
|
def ignore_func(directory, files):
|
|
198
198
|
relative_path = Path(directory).relative_to(from_path)
|
|
199
199
|
files_to_ignore = [
|
|
200
|
-
f
|
|
200
|
+
f
|
|
201
|
+
for f in files
|
|
202
|
+
if (relative_path / f).as_posix() not in included_files
|
|
201
203
|
]
|
|
202
204
|
return files_to_ignore
|
|
203
205
|
else:
|
|
@@ -210,13 +212,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
210
212
|
async def _get_ignore_func(self, local_path: str, ignore_file: str):
|
|
211
213
|
with open(ignore_file) as f:
|
|
212
214
|
ignore_patterns = f.readlines()
|
|
213
|
-
included_files = filter_files(
|
|
215
|
+
included_files = filter_files(
|
|
216
|
+
root=local_path, ignore_patterns=ignore_patterns, as_posix=True
|
|
217
|
+
)
|
|
214
218
|
|
|
215
219
|
def ignore_func(directory, files):
|
|
216
220
|
relative_path = Path(directory).relative_to(local_path)
|
|
217
221
|
|
|
218
222
|
files_to_ignore = [
|
|
219
|
-
f for f in files if
|
|
223
|
+
f for f in files if (relative_path / f).as_posix() not in included_files
|
|
220
224
|
]
|
|
221
225
|
return files_to_ignore
|
|
222
226
|
|
|
@@ -278,13 +282,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
278
282
|
with open(ignore_file) as f:
|
|
279
283
|
ignore_patterns = f.readlines()
|
|
280
284
|
included_files = filter_files(
|
|
281
|
-
root=local_path, ignore_patterns=ignore_patterns
|
|
285
|
+
root=local_path, ignore_patterns=ignore_patterns, as_posix=True
|
|
282
286
|
)
|
|
283
287
|
|
|
284
288
|
def ignore_func(directory, files):
|
|
285
289
|
relative_path = Path(directory).relative_to(local_path)
|
|
286
290
|
files_to_ignore = [
|
|
287
|
-
f
|
|
291
|
+
f
|
|
292
|
+
for f in files
|
|
293
|
+
if (relative_path / f).as_posix() not in included_files
|
|
288
294
|
]
|
|
289
295
|
return files_to_ignore
|
|
290
296
|
else:
|
|
@@ -539,13 +545,13 @@ class RemoteFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
539
545
|
ignore_patterns = f.readlines()
|
|
540
546
|
|
|
541
547
|
included_files = filter_files(
|
|
542
|
-
local_path, ignore_patterns, include_dirs=True
|
|
548
|
+
local_path, ignore_patterns, include_dirs=True, as_posix=True
|
|
543
549
|
)
|
|
544
550
|
|
|
545
551
|
counter = 0
|
|
546
552
|
for f in Path(local_path).rglob("*"):
|
|
547
553
|
relative_path = f.relative_to(local_path)
|
|
548
|
-
if included_files and
|
|
554
|
+
if included_files and relative_path.as_posix() not in included_files:
|
|
549
555
|
continue
|
|
550
556
|
|
|
551
557
|
if to_path.endswith("/"):
|
|
@@ -595,13 +601,13 @@ class RemoteFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
595
601
|
ignore_patterns = f.readlines()
|
|
596
602
|
|
|
597
603
|
included_files = filter_files(
|
|
598
|
-
local_path, ignore_patterns, include_dirs=True
|
|
604
|
+
local_path, ignore_patterns, include_dirs=True, as_posix=True
|
|
599
605
|
)
|
|
600
606
|
|
|
601
607
|
counter = 0
|
|
602
608
|
for f in Path(local_path).rglob("*"):
|
|
603
609
|
relative_path = f.relative_to(local_path)
|
|
604
|
-
if included_files and
|
|
610
|
+
if included_files and relative_path.as_posix() not in included_files:
|
|
605
611
|
continue
|
|
606
612
|
|
|
607
613
|
if to_path.endswith("/"):
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
import sys
|
|
5
4
|
import traceback
|
|
6
5
|
from types import TracebackType
|
|
7
6
|
from typing import Any, Literal, Optional, Tuple, Type, Union
|
|
@@ -119,10 +118,8 @@ class PrefectFormatter(logging.Formatter):
|
|
|
119
118
|
init_kwargs: dict[str, Any] = {}
|
|
120
119
|
style_kwargs: dict[str, Any] = {}
|
|
121
120
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
init_kwargs["defaults"] = defaults
|
|
125
|
-
style_kwargs["defaults"] = defaults
|
|
121
|
+
init_kwargs["defaults"] = defaults
|
|
122
|
+
style_kwargs["defaults"] = defaults
|
|
126
123
|
|
|
127
124
|
init_kwargs["validate"] = validate
|
|
128
125
|
|
|
@@ -380,11 +380,7 @@ def print_as_log(*args: Any, **kwargs: Any) -> None:
|
|
|
380
380
|
|
|
381
381
|
msg = buffer.getvalue().rstrip()
|
|
382
382
|
|
|
383
|
-
|
|
384
|
-
if logger.isEnabledFor(logging.INFO):
|
|
385
|
-
logger.logger._log(logging.INFO, msg, (), extra=logger.extra, stacklevel=1)
|
|
386
|
-
else:
|
|
387
|
-
logger.info(msg, stacklevel=2)
|
|
383
|
+
logger.info(msg, stacklevel=2)
|
|
388
384
|
|
|
389
385
|
|
|
390
386
|
@contextmanager
|
|
@@ -47,6 +47,10 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
|
|
|
47
47
|
|
|
48
48
|
These will be removed once internal callers are migrated. Direct ProcessWorker flow runs already use `FlowRunExecutorContext`; generated commands use `WorkspaceResolvingEngineCommandStarter`, while explicitly configured commands use `EngineCommandStarter`. Only the ad hoc bundle path still calls deprecated `Runner.execute_bundle()`. Keep lifecycle behavior in the extracted classes and do not route direct worker execution back through Runner.
|
|
49
49
|
|
|
50
|
+
## Webserver Health Check
|
|
51
|
+
|
|
52
|
+
The health check must not count a maintenance wait as a missed poll. Requests answered with `Prefect-Maintenance: true` retry indefinitely, so a poll can block for an entire Cloud maintenance window. `perform_health_check()` in `server.py` measures from `polling_window_start()` (`prefect._internal.server_maintenance`), the same rule the worker health check uses. `last_polled` is `None` until the first poll completes, so the health check measures from its own creation until then.
|
|
53
|
+
|
|
50
54
|
## EventEmitter WebSocket Degradation
|
|
51
55
|
|
|
52
56
|
`EventEmitter.__aenter__` catches connection failures and silently swaps the failed client for a `NullEventsClient` — events are non-critical telemetry (the runner emits only `prefect.runner.cancelled-flow-run`), so the flow run must not crash when the events WebSocket is unreachable. Two failure classes are caught (`_NONFATAL_CONNECTION_EXCEPTIONS`): permanent rejections (`websockets.exceptions.InvalidStatus`, i.e. HTTP 4xx — e.g. a client ≤3.6.13 connecting to a server ≥3.6.14 with `PREFECT_SERVER_API_AUTH_STRING` configured) and transient failures (`RETRYABLE_EXCEPTIONS` from `events/clients.py`: `ConnectionClosed`, `TimeoutError`, `OSError`) that outlive the events client's own reconnection attempts. A `WARNING` is logged. If `__aenter__` raises, `__aexit__` is **not** called on the original client (it was never successfully entered); the replacement `NullEventsClient` is entered instead.
|
|
@@ -8,6 +8,7 @@ from fastapi import APIRouter, FastAPI, status
|
|
|
8
8
|
from fastapi.responses import JSONResponse
|
|
9
9
|
from typing_extensions import Literal
|
|
10
10
|
|
|
11
|
+
from prefect._internal.server_maintenance import polling_window_start
|
|
11
12
|
from prefect.logging import get_logger
|
|
12
13
|
from prefect.settings import (
|
|
13
14
|
PREFECT_RUNNER_POLL_FREQUENCY,
|
|
@@ -46,9 +47,13 @@ def perform_health_check(
|
|
|
46
47
|
* PREFECT_RUNNER_POLL_FREQUENCY.value()
|
|
47
48
|
)
|
|
48
49
|
|
|
50
|
+
# Until the first poll completes, measure from when the health check
|
|
51
|
+
# started: startup and the first poll may be waiting out API maintenance.
|
|
52
|
+
started_at = now_fn("UTC")
|
|
53
|
+
|
|
49
54
|
def _health_check():
|
|
50
|
-
|
|
51
|
-
poll_delay = (
|
|
55
|
+
last_polled = runner.last_polled or started_at
|
|
56
|
+
poll_delay = (now_fn("UTC") - polling_window_start(last_polled)).total_seconds()
|
|
52
57
|
|
|
53
58
|
if TYPE_CHECKING:
|
|
54
59
|
assert delay_threshold is not None
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/callables/__init__.py
RENAMED
|
@@ -492,7 +492,7 @@ def parameter_schema(fn: Callable[..., Any]) -> ParameterSchema:
|
|
|
492
492
|
try:
|
|
493
493
|
signature = inspect.signature(fn, eval_str=True) # novm
|
|
494
494
|
except (NameError, TypeError):
|
|
495
|
-
#
|
|
495
|
+
# Some annotations can't be resolved (e.g. defined under TYPE_CHECKING)
|
|
496
496
|
signature = inspect.signature(fn)
|
|
497
497
|
|
|
498
498
|
docstrings = parameter_docstrings(inspect.getdoc(fn))
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/AGENTS.md
RENAMED
|
@@ -8,7 +8,7 @@ Path normalization, file filtering compatible with `.gitignore`/`.prefectignore`
|
|
|
8
8
|
|
|
9
9
|
## Entry Points
|
|
10
10
|
|
|
11
|
-
- `filter_files(root, ignore_patterns, include_dirs=True) -> set[str]` — return the set of paths under `root`
|
|
11
|
+
- `filter_files(root, ignore_patterns, include_dirs=True, *, as_posix=False) -> set[str]` — return the set of included paths under `root` according to pathspec patterns. Returned paths are relative to `root` and use platform-native separators by default. Callers comparing against `Path.as_posix()` must opt in with `as_posix=True`. Used to build `shutil.copytree`'s `ignore` callback.
|
|
12
12
|
- `tmpchdir(path)` — context manager that `chdir`s into `path` and restores the previous cwd on exit.
|
|
13
13
|
- `get_open_file_limit() -> int` — platform-specific maximum open-file count, with a conservative Windows default.
|
|
14
14
|
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/__init__.py
RENAMED
|
@@ -38,12 +38,19 @@ def filter_files(
|
|
|
38
38
|
root: str = ".",
|
|
39
39
|
ignore_patterns: Optional[Iterable[AnyStr]] = None,
|
|
40
40
|
include_dirs: bool = True,
|
|
41
|
+
*,
|
|
42
|
+
as_posix: bool = False,
|
|
41
43
|
) -> set[str]:
|
|
42
44
|
"""
|
|
43
45
|
This function accepts a root directory path and a list of file patterns to ignore, and returns
|
|
44
|
-
a
|
|
46
|
+
a set of paths that excludes those that should be ignored.
|
|
45
47
|
|
|
46
48
|
The specification matches that of [.gitignore files](https://git-scm.com/docs/gitignore).
|
|
49
|
+
|
|
50
|
+
Returned paths are relative to `root` and use platform-native separators
|
|
51
|
+
by default. Set `as_posix=True` to return forward-slash-separated paths.
|
|
52
|
+
When `include_dirs=True`, ancestor directories of included files are also
|
|
53
|
+
included so directory traversal can reach those files.
|
|
47
54
|
"""
|
|
48
55
|
spec = pathspec.GitIgnoreSpec.from_lines(ignore_patterns or [])
|
|
49
56
|
ignored_files = {p.path for p in spec.match_tree_entries(root)}
|
|
@@ -66,6 +73,8 @@ def filter_files(
|
|
|
66
73
|
parent_dirs.add(parent_str)
|
|
67
74
|
included_files |= parent_dirs
|
|
68
75
|
|
|
76
|
+
if as_posix:
|
|
77
|
+
return {Path(path).as_posix() for path in included_files}
|
|
69
78
|
return included_files
|
|
70
79
|
|
|
71
80
|
|
|
@@ -48,6 +48,7 @@ Work-pool-level launchers are configured via `prefect work-pool storage configur
|
|
|
48
48
|
## Pitfalls
|
|
49
49
|
|
|
50
50
|
- `backend_id` is `None` until the first heartbeat succeeds; `PREFECT__WORKER_ID` is not set until then. Code that reads `self.backend_id` early in the lifecycle may get `None`.
|
|
51
|
+
- Requests answered with `Prefect-Maintenance: true` retry indefinitely, so any API call can block for an entire Cloud maintenance window. Worker health must be served before the first API call and must not count that wait as a missed poll (`_is_within_polling_window()` handles this).
|
|
51
52
|
- Direct `ProcessWorker.run()` execution uses `FlowRunExecutorContext` with `propose_submitting=False` because `BaseWorker` already proposed Submitting. Generated commands use `WorkspaceResolvingEngineCommandStarter` and pass its `hook_runner`; explicitly configured commands use `EngineCommandStarter` and retain their own pull-step behavior. Consume the executor's normalized infrastructure status rather than the raw child exit code. The ad hoc bundle path still uses deprecated `Runner.execute_bundle()` and remains a migration gap (see `runner/AGENTS.md`).
|
|
52
53
|
|
|
53
54
|
## Related
|