prefect-client 3.8.8.dev4__tar.gz → 3.8.9.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/PKG-INFO +3 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/README.md +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/pyproject.toml +1 -2
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/__init__.py +3 -3
- prefect_client-3.8.9.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/_logging.py +1 -7
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/collections.py +24 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/manager.py +1 -7
- prefect_client-3.8.9.dev1/src/prefect/_internal/server_maintenance.py +46 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/core.py +1 -4
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/__init__.py +5 -9
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/base.py +17 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/__init__.py +3 -3
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/filesystems.py +16 -10
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/formatters.py +2 -5
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/loggers.py +1 -5
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/__init__.py +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/__init__.py +10 -1
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/AGENTS.md +1 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/base.py +53 -32
- prefect_client-3.8.9.dev1/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.dev1}/.gitignore +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/LICENSE +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/hatch_build.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/attempt_control.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_hook_runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_supervisor.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/tasks.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.9.dev1
|
|
4
4
|
Summary: Workflow orchestration and management.
|
|
5
5
|
Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
|
|
6
6
|
Project-URL: Documentation, https://docs.prefect.io
|
|
@@ -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.dev1}/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.dev1}/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,46 @@
|
|
|
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 reset_maintenance_backoff() -> None:
|
|
43
|
+
"""Forget any recorded maintenance back-off (for tests)."""
|
|
44
|
+
global _backoff_ends_at
|
|
45
|
+
with _backoff_lock:
|
|
46
|
+
_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.dev1}/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
|
{prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/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.dev1}/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.dev1}/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
|
|
@@ -6,10 +6,9 @@ import copy
|
|
|
6
6
|
import datetime
|
|
7
7
|
import logging
|
|
8
8
|
import os
|
|
9
|
-
import threading
|
|
10
9
|
import uuid
|
|
11
10
|
import warnings
|
|
12
|
-
from contextlib import AsyncExitStack
|
|
11
|
+
from contextlib import AsyncExitStack, ExitStack
|
|
13
12
|
from functools import partial
|
|
14
13
|
from importlib.metadata import distributions
|
|
15
14
|
from typing import (
|
|
@@ -39,6 +38,7 @@ from prefect._internal.infrastructure_exit_codes import get_infrastructure_exit_
|
|
|
39
38
|
from prefect._internal.launchers import resolve_bundle_step_with_launcher
|
|
40
39
|
from prefect._internal.observers import FlowRunCancellingObserver
|
|
41
40
|
from prefect._internal.schemas.validators import return_v_or_none
|
|
41
|
+
from prefect._internal.server_maintenance import maintenance_backoff_ends_at
|
|
42
42
|
from prefect.client.orchestration import PrefectClient, get_client
|
|
43
43
|
from prefect.client.schemas.objects import Flow as APIFlow
|
|
44
44
|
from prefect.client.schemas.objects import (
|
|
@@ -126,6 +126,28 @@ def _is_transient_api_error(exc: httpx.HTTPError) -> bool:
|
|
|
126
126
|
return isinstance(exc, httpx.TransportError)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
+
def _is_within_polling_window(
|
|
130
|
+
last_polled_time: datetime.datetime, query_interval_seconds: float
|
|
131
|
+
) -> bool:
|
|
132
|
+
"""
|
|
133
|
+
Whether a worker that last polled at `last_polled_time` is within its
|
|
134
|
+
polling window of `query_interval_seconds` x 30.
|
|
135
|
+
|
|
136
|
+
While the Prefect API is in maintenance, requests wait out the `Retry-After`
|
|
137
|
+
it sends, so the window counts from the later of `last_polled_time` and the
|
|
138
|
+
end of the latest maintenance back-off.
|
|
139
|
+
"""
|
|
140
|
+
window_start = last_polled_time
|
|
141
|
+
backoff_ends_at = maintenance_backoff_ends_at()
|
|
142
|
+
if backoff_ends_at is not None and backoff_ends_at > window_start:
|
|
143
|
+
window_start = backoff_ends_at
|
|
144
|
+
|
|
145
|
+
seconds_since_window_start = (
|
|
146
|
+
prefect.types._datetime.now("UTC") - window_start
|
|
147
|
+
).total_seconds()
|
|
148
|
+
return seconds_since_window_start <= query_interval_seconds * 30
|
|
149
|
+
|
|
150
|
+
|
|
129
151
|
class BaseJobConfiguration(BaseModel):
|
|
130
152
|
command: Optional[str] = Field(
|
|
131
153
|
default=None,
|
|
@@ -843,9 +865,25 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
843
865
|
with_healthcheck: If set, the worker will start a healthcheck server.
|
|
844
866
|
printer: A `print`-like function where logs will be reported.
|
|
845
867
|
"""
|
|
846
|
-
|
|
847
|
-
healthcheck_thread = None
|
|
868
|
+
healthcheck_stack = ExitStack()
|
|
848
869
|
try:
|
|
870
|
+
if with_healthcheck:
|
|
871
|
+
from prefect.workers.server import (
|
|
872
|
+
_run_healthcheck_server, # pyright: ignore[reportPrivateUsage]
|
|
873
|
+
)
|
|
874
|
+
|
|
875
|
+
# Started before setup, which syncs with the API: while the API is
|
|
876
|
+
# in maintenance that sync waits, and the healthcheck must still
|
|
877
|
+
# answer.
|
|
878
|
+
query_interval_seconds = PREFECT_WORKER_QUERY_SECONDS.value()
|
|
879
|
+
healthcheck_stack.enter_context(
|
|
880
|
+
_run_healthcheck_server(
|
|
881
|
+
lambda: self.is_worker_still_polling(
|
|
882
|
+
query_interval_seconds=query_interval_seconds
|
|
883
|
+
)
|
|
884
|
+
)
|
|
885
|
+
)
|
|
886
|
+
|
|
849
887
|
async with self as worker:
|
|
850
888
|
polling_service = partial(
|
|
851
889
|
critical_service_loop,
|
|
@@ -882,21 +920,6 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
882
920
|
|
|
883
921
|
start_client_metrics_server()
|
|
884
922
|
|
|
885
|
-
if with_healthcheck:
|
|
886
|
-
from prefect.workers.server import build_healthcheck_server
|
|
887
|
-
|
|
888
|
-
# we'll start the ASGI server in a separate thread so that
|
|
889
|
-
# uvicorn does not block the main thread
|
|
890
|
-
healthcheck_server = build_healthcheck_server(
|
|
891
|
-
worker=worker,
|
|
892
|
-
query_interval_seconds=PREFECT_WORKER_QUERY_SECONDS.value(),
|
|
893
|
-
)
|
|
894
|
-
healthcheck_thread = threading.Thread(
|
|
895
|
-
name="healthcheck-server-thread",
|
|
896
|
-
target=healthcheck_server.run,
|
|
897
|
-
daemon=True,
|
|
898
|
-
)
|
|
899
|
-
healthcheck_thread.start()
|
|
900
923
|
printer(f"Worker {worker.name!r} started!")
|
|
901
924
|
|
|
902
925
|
# If running once, wait for active runs to finish before teardown
|
|
@@ -910,12 +933,7 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
910
933
|
await anyio.sleep(0.1)
|
|
911
934
|
finally:
|
|
912
935
|
stop_client_metrics_server()
|
|
913
|
-
|
|
914
|
-
if healthcheck_server and healthcheck_thread:
|
|
915
|
-
self._logger.debug("Stopping healthcheck server...")
|
|
916
|
-
healthcheck_server.should_exit = True
|
|
917
|
-
healthcheck_thread.join()
|
|
918
|
-
self._logger.debug("Healthcheck server stopped.")
|
|
936
|
+
healthcheck_stack.close()
|
|
919
937
|
|
|
920
938
|
printer(f"Worker {worker.name!r} stopped!")
|
|
921
939
|
|
|
@@ -1294,18 +1312,21 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1294
1312
|
the loop services - we will evaluate if the _last_polled_time
|
|
1295
1313
|
was within that interval x 30 (so 10s -> 5m)
|
|
1296
1314
|
|
|
1315
|
+
While the Prefect API is in maintenance, requests wait out the
|
|
1316
|
+
`Retry-After` it sends, so the window counts from the later of
|
|
1317
|
+
`self._last_polled_time` and the end of the latest maintenance back-off.
|
|
1318
|
+
|
|
1297
1319
|
The instance property `self._last_polled_time`
|
|
1298
1320
|
is currently set/updated in `get_and_submit_flow_runs()`
|
|
1299
1321
|
"""
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
prefect.types._datetime.now("UTC") - self._last_polled_time
|
|
1304
|
-
).total_seconds()
|
|
1305
|
-
|
|
1306
|
-
is_still_polling = seconds_since_last_poll <= threshold_seconds
|
|
1322
|
+
is_still_polling = _is_within_polling_window(
|
|
1323
|
+
self._last_polled_time, query_interval_seconds
|
|
1324
|
+
)
|
|
1307
1325
|
|
|
1308
1326
|
if not is_still_polling:
|
|
1327
|
+
seconds_since_last_poll = (
|
|
1328
|
+
prefect.types._datetime.now("UTC") - self._last_polled_time
|
|
1329
|
+
).total_seconds()
|
|
1309
1330
|
self._logger.error(
|
|
1310
1331
|
f"Worker has not polled in the last {seconds_since_last_poll} seconds "
|
|
1311
1332
|
"and should be restarted"
|