prefect-client 3.8.7.dev7__tar.gz → 3.8.8__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.7.dev7 → prefect_client-3.8.8}/PKG-INFO +1 -1
- prefect_client-3.8.8/src/prefect/_build_info.py +5 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/services.py +33 -12
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/collections.py +24 -4
- prefect_client-3.8.8/src/prefect/_internal/server_maintenance.py +46 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/notifications.py +10 -9
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/redis.py +1 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/system.py +1 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/webhook.py +1 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/cache_policies.py +3 -3
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/base.py +52 -4
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/filesystems.py +19 -13
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/runner.py +8 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/task_engine.py +22 -10
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/tasks.py +3 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/callables/__init__.py +11 -3
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/filesystem/__init__.py +10 -1
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/schema_tools/validation.py +5 -2
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/templating/__init__.py +9 -2
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/AGENTS.md +1 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/base.py +53 -32
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/process.py +1 -1
- prefect_client-3.8.8/src/prefect/workers/server.py +128 -0
- prefect_client-3.8.7.dev7/src/prefect/_build_info.py +0 -5
- prefect_client-3.8.7.dev7/src/prefect/workers/server.py +0 -66
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/.gitignore +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/LICENSE +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/README.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/hatch_build.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/pyproject.toml +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/__main__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/attempt_control.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/agent.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/automations.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/context.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/engine.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/related.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/flows.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/futures.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/main.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/plugins.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/py.typed +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/results.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_uv_command.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_hook_runner.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_resolver.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_runtime.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/_workspace_supervisor.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/schedules.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/serializers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/_ui_static.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/states.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/transactions.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/types/names.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/variables.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/_worker_channel/_transport.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/workers/utilities.py +0 -0
{prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/src/prefect/_internal/concurrency/services.py
RENAMED
|
@@ -57,6 +57,9 @@ if hasattr(os, "register_at_fork"):
|
|
|
57
57
|
class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
58
58
|
_instances: dict[int, Self] = {}
|
|
59
59
|
_instance_lock = threading.Lock()
|
|
60
|
+
# Keep cache access separate from startup serialization: instance() waits for
|
|
61
|
+
# the global loop, whose service cleanup must be able to evict instances.
|
|
62
|
+
_instance_cache_lock = threading.Lock()
|
|
60
63
|
_max_queue_size: int = 0 # 0 means unbounded
|
|
61
64
|
|
|
62
65
|
def __init__(self, *args: Hashable) -> None:
|
|
@@ -96,6 +99,7 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
|
96
99
|
"""Reset class-level state after fork() to prevent deadlocks in child process."""
|
|
97
100
|
cls._instances.clear()
|
|
98
101
|
cls._instance_lock = threading.Lock()
|
|
102
|
+
cls._instance_cache_lock = threading.Lock()
|
|
99
103
|
|
|
100
104
|
def start(self) -> None:
|
|
101
105
|
logger.debug("Starting service %r", self)
|
|
@@ -281,7 +285,8 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
|
281
285
|
"""
|
|
282
286
|
futures: list[concurrent.futures.Future[bool]] = []
|
|
283
287
|
with cls._instance_lock:
|
|
284
|
-
|
|
288
|
+
with cls._instance_cache_lock:
|
|
289
|
+
instances = tuple(cls._instances.values())
|
|
285
290
|
|
|
286
291
|
for instance in instances:
|
|
287
292
|
futures.append(instance._drain(at_exit=at_exit))
|
|
@@ -312,28 +317,44 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
|
|
|
312
317
|
"""
|
|
313
318
|
with cls._instance_lock:
|
|
314
319
|
key = hash((cls, *args))
|
|
315
|
-
|
|
316
|
-
|
|
320
|
+
with cls._instance_cache_lock:
|
|
321
|
+
instance = cls._instances.get(key)
|
|
322
|
+
if instance is None or instance._stopped:
|
|
323
|
+
instance = cls._new_instance(*args)
|
|
317
324
|
|
|
318
|
-
return
|
|
325
|
+
return instance
|
|
319
326
|
|
|
320
327
|
def _remove_instance(self):
|
|
321
|
-
|
|
328
|
+
# Only evict this instance; a newer instance may already be cached under
|
|
329
|
+
# the same key
|
|
330
|
+
with self._instance_cache_lock:
|
|
331
|
+
if self._instances.get(self._key) is self:
|
|
332
|
+
self._instances.pop(self._key, None)
|
|
322
333
|
|
|
323
334
|
@classmethod
|
|
324
335
|
def _new_instance(cls, *args: Hashable) -> Self:
|
|
325
336
|
"""
|
|
326
|
-
Create and start a new instance of the service.
|
|
337
|
+
Create, cache, and start a new instance of the service.
|
|
327
338
|
"""
|
|
328
339
|
instance = cls(*args)
|
|
329
340
|
|
|
330
|
-
#
|
|
331
|
-
|
|
332
|
-
|
|
341
|
+
# Cache before starting so that a service which stops while starting, e.g.
|
|
342
|
+
# because its lifespan failed, evicts itself instead of being cached after
|
|
343
|
+
# it has already stopped
|
|
344
|
+
with cls._instance_cache_lock:
|
|
345
|
+
cls._instances[instance._key] = instance
|
|
333
346
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
347
|
+
try:
|
|
348
|
+
# If already on the global loop, just start it here to avoid deadlock
|
|
349
|
+
if threading.get_ident() == get_global_loop().thread.ident:
|
|
350
|
+
instance.start()
|
|
351
|
+
|
|
352
|
+
# Otherwise, bind the service to the global loop
|
|
353
|
+
else:
|
|
354
|
+
from_sync.call_soon_in_loop_thread(create_call(instance.start)).result()
|
|
355
|
+
except BaseException:
|
|
356
|
+
instance._remove_instance()
|
|
357
|
+
raise
|
|
337
358
|
|
|
338
359
|
return instance
|
|
339
360
|
|
{prefect_client-3.8.7.dev7 → prefect_client-3.8.8}/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
|
|
@@ -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
|
|
@@ -170,7 +170,7 @@ class SlackWebhook(AppriseNotificationBlock):
|
|
|
170
170
|
|
|
171
171
|
_block_type_name = "Slack Webhook"
|
|
172
172
|
_logo_url = HttpUrl(
|
|
173
|
-
"https://
|
|
173
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/slack.png"
|
|
174
174
|
)
|
|
175
175
|
_documentation_url = HttpUrl(
|
|
176
176
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -267,7 +267,7 @@ class MicrosoftTeamsWebhook(AppriseNotificationBlock):
|
|
|
267
267
|
_block_type_name = "Microsoft Teams Webhook"
|
|
268
268
|
_block_type_slug = "ms-teams-webhook"
|
|
269
269
|
_logo_url = HttpUrl(
|
|
270
|
-
"https://
|
|
270
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/microsoft-teams.png"
|
|
271
271
|
)
|
|
272
272
|
_documentation_url = HttpUrl(
|
|
273
273
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -329,7 +329,7 @@ class PagerDutyWebHook(AbstractAppriseNotificationBlock):
|
|
|
329
329
|
_block_type_name = "Pager Duty Webhook"
|
|
330
330
|
_block_type_slug = "pager-duty-webhook"
|
|
331
331
|
_logo_url = HttpUrl(
|
|
332
|
-
"https://
|
|
332
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/pagerduty.png"
|
|
333
333
|
)
|
|
334
334
|
_documentation_url = HttpUrl(
|
|
335
335
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -485,7 +485,7 @@ class TwilioSMS(AbstractAppriseNotificationBlock):
|
|
|
485
485
|
_block_type_name = "Twilio SMS"
|
|
486
486
|
_block_type_slug = "twilio-sms"
|
|
487
487
|
_logo_url = HttpUrl(
|
|
488
|
-
"https://
|
|
488
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/twilio.png"
|
|
489
489
|
) # noqa
|
|
490
490
|
_documentation_url = HttpUrl(
|
|
491
491
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -560,7 +560,7 @@ class OpsgenieWebhook(AbstractAppriseNotificationBlock):
|
|
|
560
560
|
_block_type_name = "Opsgenie Webhook"
|
|
561
561
|
_block_type_slug = "opsgenie-webhook"
|
|
562
562
|
_logo_url = HttpUrl(
|
|
563
|
-
"https://
|
|
563
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/opsgenie.png"
|
|
564
564
|
)
|
|
565
565
|
_documentation_url = HttpUrl(
|
|
566
566
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -685,7 +685,7 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
|
|
|
685
685
|
_block_type_name = "Mattermost Webhook"
|
|
686
686
|
_block_type_slug = "mattermost-webhook"
|
|
687
687
|
_logo_url = HttpUrl(
|
|
688
|
-
"https://
|
|
688
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/mattermost.png"
|
|
689
689
|
)
|
|
690
690
|
_documentation_url = HttpUrl(
|
|
691
691
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -751,6 +751,7 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
|
|
|
751
751
|
token=self.token.get_secret_value(),
|
|
752
752
|
fullpath=self.path,
|
|
753
753
|
host=self.hostname,
|
|
754
|
+
user=self.botname,
|
|
754
755
|
targets=self.channels,
|
|
755
756
|
include_image=self.include_image,
|
|
756
757
|
port=self.port,
|
|
@@ -786,7 +787,7 @@ class DiscordWebhook(AbstractAppriseNotificationBlock):
|
|
|
786
787
|
_block_type_name = "Discord Webhook"
|
|
787
788
|
_block_type_slug = "discord-webhook"
|
|
788
789
|
_logo_url = HttpUrl(
|
|
789
|
-
"https://
|
|
790
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/discord.png"
|
|
790
791
|
)
|
|
791
792
|
_documentation_url = HttpUrl(
|
|
792
793
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -891,7 +892,7 @@ class CustomWebhookNotificationBlock(NotificationBlock):
|
|
|
891
892
|
|
|
892
893
|
_block_type_name = "Custom Webhook"
|
|
893
894
|
_logo_url = HttpUrl(
|
|
894
|
-
"https://
|
|
895
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/webhook.png"
|
|
895
896
|
)
|
|
896
897
|
_documentation_url = HttpUrl(
|
|
897
898
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -1061,7 +1062,7 @@ class SendgridEmail(AbstractAppriseNotificationBlock):
|
|
|
1061
1062
|
_block_type_name = "Sendgrid Email"
|
|
1062
1063
|
_block_type_slug = "sendgrid-email"
|
|
1063
1064
|
_logo_url = HttpUrl(
|
|
1064
|
-
"https://
|
|
1065
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/email.png"
|
|
1065
1066
|
)
|
|
1066
1067
|
_documentation_url = HttpUrl(
|
|
1067
1068
|
"https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
|
|
@@ -52,7 +52,7 @@ class RedisStorageContainer(WritableFileSystem):
|
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
54
|
_logo_url = HttpUrl(
|
|
55
|
-
"https://
|
|
55
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/redis.png"
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
host: Optional[str] = Field(default=None, description="Redis hostname")
|
|
@@ -45,7 +45,7 @@ class Secret(Block, Generic[T]):
|
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
47
|
_logo_url = HttpUrl(
|
|
48
|
-
"https://
|
|
48
|
+
"https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/secret.png"
|
|
49
49
|
)
|
|
50
50
|
_documentation_url = HttpUrl("https://docs.prefect.io/latest/develop/blocks")
|
|
51
51
|
_description = "A block that represents a secret value. The value stored in this block will be obfuscated when this block is viewed or edited in the UI."
|
|
@@ -31,7 +31,7 @@ class Webhook(Block):
|
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
33
|
_block_type_name = "Webhook"
|
|
34
|
-
_logo_url = "https://
|
|
34
|
+
_logo_url = "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/webhook.png" # type: ignore
|
|
35
35
|
_documentation_url = HttpUrl(
|
|
36
36
|
"https://docs.prefect.io/latest/automate/events/webhook-triggers"
|
|
37
37
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import sys
|
|
3
3
|
from copy import deepcopy
|
|
4
|
-
from dataclasses import dataclass, field
|
|
4
|
+
from dataclasses import dataclass, field, replace
|
|
5
5
|
from logging import Logger
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import (
|
|
@@ -255,7 +255,7 @@ class CompoundCachePolicy(CachePolicy):
|
|
|
255
255
|
|
|
256
256
|
if inputs_policies:
|
|
257
257
|
new = Inputs(exclude=[other])
|
|
258
|
-
return
|
|
258
|
+
return replace(self, policies=[*self.policies, new])
|
|
259
259
|
else:
|
|
260
260
|
# no dependency on inputs already
|
|
261
261
|
return self
|
|
@@ -404,7 +404,7 @@ class Inputs(CachePolicy):
|
|
|
404
404
|
def __sub__(self, other: str) -> "CachePolicy":
|
|
405
405
|
if not isinstance(other, str): # type: ignore[reportUnnecessaryIsInstance]
|
|
406
406
|
raise TypeError("Can only subtract strings from key policies.")
|
|
407
|
-
return
|
|
407
|
+
return replace(self, exclude=self.exclude + [other])
|
|
408
408
|
|
|
409
409
|
|
|
410
410
|
INPUTS = Inputs()
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import copy
|
|
2
|
+
import math
|
|
2
3
|
import sys
|
|
3
4
|
import threading
|
|
4
5
|
import time
|
|
@@ -7,6 +8,7 @@ from collections import defaultdict
|
|
|
7
8
|
from collections.abc import AsyncGenerator, Awaitable, MutableMapping
|
|
8
9
|
from contextlib import asynccontextmanager
|
|
9
10
|
from datetime import datetime, timezone
|
|
11
|
+
from email.utils import parsedate_to_datetime
|
|
10
12
|
from logging import Logger
|
|
11
13
|
from typing import TYPE_CHECKING, Any, Callable, Optional, Protocol, runtime_checkable
|
|
12
14
|
|
|
@@ -18,6 +20,7 @@ from typing_extensions import Self
|
|
|
18
20
|
|
|
19
21
|
import prefect
|
|
20
22
|
from prefect._internal.compatibility.starlette import status
|
|
23
|
+
from prefect._internal.server_maintenance import record_maintenance_backoff
|
|
21
24
|
from prefect.client import constants
|
|
22
25
|
from prefect.client.attribution import get_attribution_headers
|
|
23
26
|
from prefect.client.schemas.objects import CsrfToken
|
|
@@ -44,6 +47,20 @@ APP_LIFESPANS_REF_COUNTS: dict[tuple[int, int], int] = {}
|
|
|
44
47
|
APP_LIFESPANS_LOCKS: dict[int, anyio.Lock] = defaultdict(anyio.Lock)
|
|
45
48
|
|
|
46
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
|
+
|
|
47
64
|
logger: Logger = get_logger("client")
|
|
48
65
|
|
|
49
66
|
|
|
@@ -177,6 +194,31 @@ class PrefectResponse(httpx.Response):
|
|
|
177
194
|
return new_response
|
|
178
195
|
|
|
179
196
|
|
|
197
|
+
def _parse_retry_after(value: str) -> float | None:
|
|
198
|
+
"""
|
|
199
|
+
Parse a `Retry-After` header value into a number of seconds to wait.
|
|
200
|
+
|
|
201
|
+
Supports both forms allowed by RFC 9110: delay-seconds and HTTP-date. Returns
|
|
202
|
+
`None` if the value cannot be interpreted so callers can fall back to their
|
|
203
|
+
default backoff.
|
|
204
|
+
"""
|
|
205
|
+
try:
|
|
206
|
+
seconds = float(value)
|
|
207
|
+
except ValueError:
|
|
208
|
+
try:
|
|
209
|
+
retry_at = parsedate_to_datetime(value)
|
|
210
|
+
except (TypeError, ValueError, OverflowError):
|
|
211
|
+
return None
|
|
212
|
+
if retry_at.tzinfo is None:
|
|
213
|
+
retry_at = retry_at.replace(tzinfo=timezone.utc)
|
|
214
|
+
seconds = (retry_at - datetime.now(timezone.utc)).total_seconds()
|
|
215
|
+
|
|
216
|
+
if not math.isfinite(seconds):
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
return max(0.0, seconds)
|
|
220
|
+
|
|
221
|
+
|
|
180
222
|
class PrefectHttpxAsyncClient(httpx.AsyncClient):
|
|
181
223
|
"""
|
|
182
224
|
A Prefect wrapper for the async httpx client with support for retry-after headers
|
|
@@ -293,7 +335,9 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
|
|
|
293
335
|
return response
|
|
294
336
|
|
|
295
337
|
if "Retry-After" in response.headers:
|
|
296
|
-
retry_seconds =
|
|
338
|
+
retry_seconds = _parse_retry_after(response.headers["Retry-After"])
|
|
339
|
+
|
|
340
|
+
retry_after_from_header = retry_seconds is not None
|
|
297
341
|
|
|
298
342
|
# Use an exponential back-off if not set in a header
|
|
299
343
|
if retry_seconds is None:
|
|
@@ -302,7 +346,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
|
|
|
302
346
|
# Add jitter
|
|
303
347
|
jitter_factor = PREFECT_CLIENT_RETRY_JITTER_FACTOR.value()
|
|
304
348
|
if retry_seconds > 0 and jitter_factor > 0:
|
|
305
|
-
if
|
|
349
|
+
if retry_after_from_header:
|
|
306
350
|
# Always wait for _at least_ retry seconds if requested by the API
|
|
307
351
|
retry_seconds = bounded_poisson_interval(
|
|
308
352
|
retry_seconds, retry_seconds * (1 + jitter_factor)
|
|
@@ -327,6 +371,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
|
|
|
327
371
|
f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
|
|
328
372
|
exc_info=exc_info,
|
|
329
373
|
)
|
|
374
|
+
_record_if_maintenance_backoff(response, exc_info, retry_seconds)
|
|
330
375
|
await anyio.sleep(retry_seconds)
|
|
331
376
|
|
|
332
377
|
assert response is not None, (
|
|
@@ -563,7 +608,9 @@ class PrefectHttpxSyncClient(httpx.Client):
|
|
|
563
608
|
return response
|
|
564
609
|
|
|
565
610
|
if "Retry-After" in response.headers:
|
|
566
|
-
retry_seconds =
|
|
611
|
+
retry_seconds = _parse_retry_after(response.headers["Retry-After"])
|
|
612
|
+
|
|
613
|
+
retry_after_from_header = retry_seconds is not None
|
|
567
614
|
|
|
568
615
|
# Use an exponential back-off if not set in a header
|
|
569
616
|
if retry_seconds is None:
|
|
@@ -572,7 +619,7 @@ class PrefectHttpxSyncClient(httpx.Client):
|
|
|
572
619
|
# Add jitter
|
|
573
620
|
jitter_factor = PREFECT_CLIENT_RETRY_JITTER_FACTOR.value()
|
|
574
621
|
if retry_seconds > 0 and jitter_factor > 0:
|
|
575
|
-
if
|
|
622
|
+
if retry_after_from_header:
|
|
576
623
|
# Always wait for _at least_ retry seconds if requested by the API
|
|
577
624
|
retry_seconds = bounded_poisson_interval(
|
|
578
625
|
retry_seconds, retry_seconds * (1 + jitter_factor)
|
|
@@ -597,6 +644,7 @@ class PrefectHttpxSyncClient(httpx.Client):
|
|
|
597
644
|
f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
|
|
598
645
|
exc_info=exc_info,
|
|
599
646
|
)
|
|
647
|
+
_record_if_maintenance_backoff(response, exc_info, retry_seconds)
|
|
600
648
|
time.sleep(retry_seconds)
|
|
601
649
|
|
|
602
650
|
assert response is not None, (
|
|
@@ -85,7 +85,7 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
85
85
|
"""
|
|
86
86
|
|
|
87
87
|
_block_type_name = "Local File System"
|
|
88
|
-
_logo_url = "https://
|
|
88
|
+
_logo_url = "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/filesystem.png"
|
|
89
89
|
_documentation_url = (
|
|
90
90
|
"https://docs.prefect.io/latest/develop/results#specifying-a-default-filesystem"
|
|
91
91
|
)
|
|
@@ -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:
|
|
@@ -382,7 +388,7 @@ class RemoteFileSystem(WritableFileSystem, WritableDeploymentStorage):
|
|
|
382
388
|
"""
|
|
383
389
|
|
|
384
390
|
_block_type_name = "Remote File System"
|
|
385
|
-
_logo_url = "https://
|
|
391
|
+
_logo_url = "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/filesystem.png"
|
|
386
392
|
_documentation_url = (
|
|
387
393
|
"https://docs.prefect.io/latest/develop/results#specifying-a-default-filesystem"
|
|
388
394
|
)
|
|
@@ -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("/"):
|
|
@@ -701,7 +707,7 @@ class SMB(WritableFileSystem, WritableDeploymentStorage):
|
|
|
701
707
|
"""
|
|
702
708
|
|
|
703
709
|
_block_type_name = "SMB"
|
|
704
|
-
_logo_url = "https://
|
|
710
|
+
_logo_url = "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/smb.png"
|
|
705
711
|
_documentation_url = (
|
|
706
712
|
"https://docs.prefect.io/latest/develop/results#specifying-a-default-filesystem"
|
|
707
713
|
)
|
|
@@ -241,7 +241,14 @@ class Runner:
|
|
|
241
241
|
|
|
242
242
|
if name and ("/" in name or "%" in name):
|
|
243
243
|
raise ValueError("Runner name cannot contain '/' or '%'")
|
|
244
|
-
|
|
244
|
+
if name is None:
|
|
245
|
+
self.name: str = f"runner-{uuid4()}"
|
|
246
|
+
else:
|
|
247
|
+
# Only strip the suffix when a filename was actually passed; a `.` is
|
|
248
|
+
# legal in a runner name and `Path().stem` would otherwise treat
|
|
249
|
+
# everything after the last one as a file extension. Mirrors
|
|
250
|
+
# `RunnerDeployment.validate_name`.
|
|
251
|
+
self.name = Path(name).stem if name.endswith(".py") else name
|
|
245
252
|
self._logger: "logging.Logger" = get_logger("runner")
|
|
246
253
|
|
|
247
254
|
self.started: bool = False
|