prefect-client 3.7.7.dev2__tar.gz → 3.7.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.7.7.dev2 → prefect_client-3.7.8}/PKG-INFO +2 -2
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/pyproject.toml +1 -1
- prefect_client-3.7.8/src/prefect/_build_info.py +5 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/validators.py +27 -4
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_asyncio.py +55 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/clients.py +42 -6
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_workspace_resolver.py +17 -12
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/storage.py +45 -2
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/_ui_static.py +0 -1
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/server.py +3 -21
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/workers.py +1 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_transport.py +6 -1
- prefect_client-3.7.7.dev2/src/prefect/_build_info.py +0 -5
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/.gitignore +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/LICENSE +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/README.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/hatch_build.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/__main__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_flow_run_suspension.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/ast_utils.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/buildx.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/deprecated.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/engine.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/git.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/launchers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/metrics.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/observers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/apply.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/collections.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/diagnostics.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/manager.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/spec.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/startup.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/result_records.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schema.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/_registry.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/states.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/version_checking.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/versioning.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/waiters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/agent.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/automations.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_file_collector.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_path_resolver.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_zip_builder.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/execute.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/worker_channel.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/context.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/engine.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/related.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flows.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/futures.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/_filelock.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/main.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/plugins.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/py.typed +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/results.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_workspace_starter.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/schedules.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/serializers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/_types.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/plugins.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/worker_channel.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/states.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/tasks.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/transactions.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/names.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/variables.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_cleanup.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_cleanup_handlers.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/__init__.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_state.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_sync.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prefect-client
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.8
|
|
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
|
|
@@ -29,7 +29,7 @@ Requires-Dist: cloudpickle<4.0,>=2.0
|
|
|
29
29
|
Requires-Dist: coolname<6.0.0,>=1.0.4
|
|
30
30
|
Requires-Dist: dateparser<2.0.0,>=1.1.1
|
|
31
31
|
Requires-Dist: exceptiongroup>=1.0.0
|
|
32
|
-
Requires-Dist: fastapi<1.0.0,>=0.
|
|
32
|
+
Requires-Dist: fastapi<1.0.0,>=0.139.0
|
|
33
33
|
Requires-Dist: fsspec>=2022.5.0
|
|
34
34
|
Requires-Dist: graphviz>=0.20.1
|
|
35
35
|
Requires-Dist: griffe<3.0.0,>=0.49.0
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/validators.py
RENAMED
|
@@ -321,6 +321,7 @@ def normalize_rrule_string(
|
|
|
321
321
|
rrule_string: str,
|
|
322
322
|
*,
|
|
323
323
|
now: Optional[datetime.datetime] = None,
|
|
324
|
+
timezone: Optional[str] = None,
|
|
324
325
|
) -> str:
|
|
325
326
|
"""Inject a `DTSTART` line into an rrule string if it doesn't already have one.
|
|
326
327
|
|
|
@@ -350,8 +351,16 @@ def normalize_rrule_string(
|
|
|
350
351
|
datetimes, ~3 MB).
|
|
351
352
|
|
|
352
353
|
Strings that already contain a `DTSTART` are returned unchanged.
|
|
354
|
+
|
|
355
|
+
The injected anchor is written as a floating (offset-less) `DTSTART`,
|
|
356
|
+
which `RRuleSchedule.to_rrule` later relabels with the schedule's
|
|
357
|
+
timezone. `timezone` is the schedule's IANA timezone (defaulting to
|
|
358
|
+
UTC); the recent anchor's wall-clock digits are computed in it so the
|
|
359
|
+
floating anchor lands on the intended local instant rather than being
|
|
360
|
+
shifted by the timezone's UTC offset (PrefectHQ/prefect#22455).
|
|
353
361
|
"""
|
|
354
362
|
import dateutil.rrule
|
|
363
|
+
import dateutil.tz
|
|
355
364
|
|
|
356
365
|
# Already anchored — leave it alone.
|
|
357
366
|
if "DTSTART" in rrule_string.upper():
|
|
@@ -400,10 +409,22 @@ def normalize_rrule_string(
|
|
|
400
409
|
unit_seconds = 1 if freq == dateutil.rrule.SECONDLY else 60
|
|
401
410
|
period_seconds = unit_seconds * interval
|
|
402
411
|
|
|
412
|
+
# The injected `DTSTART` is serialized as floating (no offset/`Z`) and
|
|
413
|
+
# `RRuleSchedule.to_rrule` later relabels it with the schedule's timezone
|
|
414
|
+
# via `.replace(tzinfo=...)`, which keeps the wall-clock digits without
|
|
415
|
+
# converting the offset. The anchor's wall-clock digits must therefore be
|
|
416
|
+
# computed in the schedule's own timezone; computing them in UTC shifts
|
|
417
|
+
# every occurrence forward by the timezone's offset, suppressing runs on
|
|
418
|
+
# the deploy day (PrefectHQ/prefect#22455).
|
|
419
|
+
anchor_tz = dateutil.tz.gettz(timezone) if timezone else datetime.timezone.utc
|
|
420
|
+
if anchor_tz is None:
|
|
421
|
+
anchor_tz = datetime.timezone.utc
|
|
422
|
+
|
|
403
423
|
if now is None:
|
|
404
|
-
now = datetime.datetime.now(datetime.timezone.utc)
|
|
405
|
-
|
|
406
|
-
now = now.
|
|
424
|
+
now = datetime.datetime.now(datetime.timezone.utc)
|
|
425
|
+
if now.tzinfo is None:
|
|
426
|
+
now = now.replace(tzinfo=datetime.timezone.utc)
|
|
427
|
+
now = now.astimezone(anchor_tz).replace(tzinfo=None)
|
|
407
428
|
|
|
408
429
|
delta_seconds = (now - DEFAULT_RRULE_ANCHOR).total_seconds()
|
|
409
430
|
if delta_seconds <= 0:
|
|
@@ -443,7 +464,9 @@ def normalize_schedule_rrule(schedule: _T) -> _T:
|
|
|
443
464
|
rrule = getattr(schedule, "rrule", None)
|
|
444
465
|
if not isinstance(rrule, str):
|
|
445
466
|
return schedule
|
|
446
|
-
normalized = normalize_rrule_string(
|
|
467
|
+
normalized = normalize_rrule_string(
|
|
468
|
+
rrule, timezone=getattr(schedule, "timezone", None)
|
|
469
|
+
)
|
|
447
470
|
if normalized == rrule:
|
|
448
471
|
return schedule
|
|
449
472
|
return type(schedule)(rrule=normalized, timezone=schedule.timezone) # type: ignore[call-arg]
|
|
@@ -43,6 +43,51 @@ class AcquireConcurrencySlotTimeoutError(TimeoutError):
|
|
|
43
43
|
logger: logging.Logger = get_logger("concurrency")
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
def _format_http_status_error(exc: httpx.HTTPStatusError) -> str:
|
|
47
|
+
"""Format an HTTP status error from the server into a compact string.
|
|
48
|
+
|
|
49
|
+
Handles both Prefect API payloads (`exception_detail`) and raw FastAPI
|
|
50
|
+
payloads (`detail`), extracting Pydantic-style validation errors and
|
|
51
|
+
dropping the leading `body` location component.
|
|
52
|
+
"""
|
|
53
|
+
status_code = exc.response.status_code
|
|
54
|
+
reason = exc.response.reason_phrase
|
|
55
|
+
status_text = f"{status_code} {reason}" if reason else str(status_code)
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
body = exc.response.json()
|
|
59
|
+
except Exception:
|
|
60
|
+
body = None
|
|
61
|
+
|
|
62
|
+
messages: list[str] = []
|
|
63
|
+
if isinstance(body, dict):
|
|
64
|
+
errors = body.get("exception_detail") or body.get("detail")
|
|
65
|
+
if isinstance(errors, list):
|
|
66
|
+
for error in errors:
|
|
67
|
+
if not isinstance(error, dict):
|
|
68
|
+
continue
|
|
69
|
+
msg = error.get("msg")
|
|
70
|
+
if not isinstance(msg, str):
|
|
71
|
+
continue
|
|
72
|
+
loc = error.get("loc")
|
|
73
|
+
if isinstance(loc, (list, tuple)) and loc:
|
|
74
|
+
if loc[0] == "body":
|
|
75
|
+
loc = loc[1:]
|
|
76
|
+
field = ".".join(str(part) for part in loc)
|
|
77
|
+
else:
|
|
78
|
+
field = ""
|
|
79
|
+
if field:
|
|
80
|
+
messages.append(f"{field}: {msg}")
|
|
81
|
+
else:
|
|
82
|
+
messages.append(msg)
|
|
83
|
+
elif isinstance(errors, str):
|
|
84
|
+
messages.append(errors)
|
|
85
|
+
|
|
86
|
+
if messages:
|
|
87
|
+
return f"{status_text}: {'; '.join(messages)}"
|
|
88
|
+
return status_text
|
|
89
|
+
|
|
90
|
+
|
|
46
91
|
async def aacquire_concurrency_slots(
|
|
47
92
|
names: list[str],
|
|
48
93
|
slots: int,
|
|
@@ -59,6 +104,11 @@ async def aacquire_concurrency_slots(
|
|
|
59
104
|
raise AcquireConcurrencySlotTimeoutError(
|
|
60
105
|
f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
|
|
61
106
|
) from timeout
|
|
107
|
+
except httpx.HTTPStatusError as exc:
|
|
108
|
+
raise ConcurrencySlotAcquisitionError(
|
|
109
|
+
f"Unable to acquire concurrency slots on {names!r}: "
|
|
110
|
+
f"{_format_http_status_error(exc)}"
|
|
111
|
+
) from exc
|
|
62
112
|
except Exception as exc:
|
|
63
113
|
raise ConcurrencySlotAcquisitionError(
|
|
64
114
|
f"Unable to acquire concurrency slots on {names!r}"
|
|
@@ -104,6 +154,11 @@ async def aacquire_concurrency_slots_with_lease(
|
|
|
104
154
|
raise AcquireConcurrencySlotTimeoutError(
|
|
105
155
|
f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
|
|
106
156
|
) from timeout
|
|
157
|
+
except httpx.HTTPStatusError as exc:
|
|
158
|
+
raise ConcurrencySlotAcquisitionError(
|
|
159
|
+
f"Unable to acquire concurrency slots on {names!r}: "
|
|
160
|
+
f"{_format_http_status_error(exc)}"
|
|
161
|
+
) from exc
|
|
107
162
|
except Exception as exc:
|
|
108
163
|
raise ConcurrencySlotAcquisitionError(
|
|
109
164
|
f"Unable to acquire concurrency slots on {names!r}"
|
|
@@ -436,8 +436,17 @@ class PrefectEventsClient(EventsClient):
|
|
|
436
436
|
# Clear the unconfirmed events here, because they are going back through emit
|
|
437
437
|
# and will be added again through the normal checkpointing process
|
|
438
438
|
self._unconfirmed_events = []
|
|
439
|
-
|
|
440
|
-
|
|
439
|
+
try:
|
|
440
|
+
while events_to_resend:
|
|
441
|
+
event = events_to_resend.pop(0)
|
|
442
|
+
await self.emit(event)
|
|
443
|
+
except Exception:
|
|
444
|
+
# If a resend fails partway through (emit() has its own retry
|
|
445
|
+
# budget), restore the events that were never attempted so a later
|
|
446
|
+
# reconnect can retry them. The event whose emit() failed was
|
|
447
|
+
# already added back to the buffer by emit() itself.
|
|
448
|
+
self._unconfirmed_events.extend(events_to_resend)
|
|
449
|
+
raise
|
|
441
450
|
logger.debug("Finished resending unconfirmed events.")
|
|
442
451
|
self._start_checkpoint_task()
|
|
443
452
|
|
|
@@ -452,17 +461,44 @@ class PrefectEventsClient(EventsClient):
|
|
|
452
461
|
|
|
453
462
|
async def _checkpoint_loop(self) -> None:
|
|
454
463
|
"""Periodically checkpoint unconfirmed events on a time interval,
|
|
455
|
-
independent of the count-based checkpoint in _checkpoint.
|
|
464
|
+
independent of the count-based checkpoint in _checkpoint.
|
|
465
|
+
|
|
466
|
+
If the connection has been lost (e.g. a server restart closed it),
|
|
467
|
+
reconnects and resends the unconfirmed events rather than leaving them
|
|
468
|
+
stranded until the next emit."""
|
|
456
469
|
while True:
|
|
457
470
|
await asyncio.sleep(self._checkpoint_interval)
|
|
458
|
-
if
|
|
459
|
-
|
|
471
|
+
if not self._unconfirmed_events:
|
|
472
|
+
continue
|
|
473
|
+
try:
|
|
474
|
+
if self._websocket:
|
|
460
475
|
await self._force_checkpoint()
|
|
476
|
+
continue
|
|
477
|
+
# The connection was lost while events were still unconfirmed;
|
|
478
|
+
# reconnect to resend them rather than waiting for the next emit.
|
|
479
|
+
await self._reconnect()
|
|
480
|
+
except ConnectionClosed:
|
|
481
|
+
# The connection died since the last checkpoint; reconnect and
|
|
482
|
+
# resend the unconfirmed events. _reconnect() tears down the
|
|
483
|
+
# dead connection before connecting again.
|
|
484
|
+
try:
|
|
485
|
+
await self._reconnect()
|
|
461
486
|
except Exception:
|
|
462
487
|
logger.debug(
|
|
463
|
-
"
|
|
488
|
+
"Reconnecting during time-based checkpoint failed, "
|
|
489
|
+
"will retry next interval.",
|
|
464
490
|
exc_info=True,
|
|
465
491
|
)
|
|
492
|
+
continue
|
|
493
|
+
except Exception:
|
|
494
|
+
logger.debug(
|
|
495
|
+
"Time-based checkpoint failed, will retry next interval.",
|
|
496
|
+
exc_info=True,
|
|
497
|
+
)
|
|
498
|
+
continue
|
|
499
|
+
# A successful _reconnect() resent the unconfirmed events and
|
|
500
|
+
# started a replacement checkpoint task, so this task is done.
|
|
501
|
+
return
|
|
466
502
|
|
|
467
503
|
async def _force_checkpoint(self) -> None:
|
|
468
504
|
"""Checkpoint all unconfirmed events unconditionally."""
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_workspace_resolver.py
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
|
-
import builtins
|
|
5
4
|
import contextlib
|
|
6
5
|
import os
|
|
7
6
|
import sys
|
|
@@ -20,7 +19,8 @@ from prefect.deployments.steps.core import (
|
|
|
20
19
|
run_steps,
|
|
21
20
|
)
|
|
22
21
|
from prefect.filesystems import LocalFileSystem
|
|
23
|
-
from prefect.logging.
|
|
22
|
+
from prefect.logging.handlers import APILogHandler
|
|
23
|
+
from prefect.logging.loggers import PrefectLogAdapter, flow_run_logger
|
|
24
24
|
from prefect.utilities.filesystem import relative_path_to_current_platform
|
|
25
25
|
from prefect.utilities.processutils import get_sys_executable
|
|
26
26
|
|
|
@@ -29,7 +29,6 @@ if TYPE_CHECKING:
|
|
|
29
29
|
from prefect.client.schemas.objects import FlowRun
|
|
30
30
|
from prefect.client.schemas.responses import DeploymentResponse
|
|
31
31
|
|
|
32
|
-
LOGGER = get_logger("prefect.runner.workspace_resolver")
|
|
33
32
|
STORAGE_BASE_PATH_PLACEHOLDER = "$STORAGE_BASE_PATH"
|
|
34
33
|
|
|
35
34
|
|
|
@@ -67,11 +66,6 @@ def get_workspace_resolver_command(
|
|
|
67
66
|
]
|
|
68
67
|
|
|
69
68
|
|
|
70
|
-
def _stderr_print(*args: Any, **kwargs: Any) -> None:
|
|
71
|
-
kwargs.pop("style", None)
|
|
72
|
-
builtins.print(*args, file=sys.stderr, **kwargs)
|
|
73
|
-
|
|
74
|
-
|
|
75
69
|
def _resolve_runtime_entrypoint(entrypoint: str) -> str:
|
|
76
70
|
if ":" not in entrypoint:
|
|
77
71
|
return entrypoint
|
|
@@ -211,6 +205,7 @@ async def _ensure_entrypoint_in_workspace(
|
|
|
211
205
|
workspace_root: Path,
|
|
212
206
|
source_cwd: Path,
|
|
213
207
|
storage_base_path: Path | None,
|
|
208
|
+
logger: PrefectLogAdapter,
|
|
214
209
|
) -> Path:
|
|
215
210
|
if _has_entrypoint_file(deployment.entrypoint, workspace_root):
|
|
216
211
|
return workspace_root
|
|
@@ -229,6 +224,7 @@ async def _ensure_entrypoint_in_workspace(
|
|
|
229
224
|
workspace_root,
|
|
230
225
|
source_cwd,
|
|
231
226
|
storage_base_path,
|
|
227
|
+
logger,
|
|
232
228
|
)
|
|
233
229
|
return workspace_root
|
|
234
230
|
|
|
@@ -259,6 +255,7 @@ async def _pull_storage_into_workspace(
|
|
|
259
255
|
workspace_root: Path,
|
|
260
256
|
source_cwd: Path,
|
|
261
257
|
storage_base_path: Path | None,
|
|
258
|
+
logger: PrefectLogAdapter,
|
|
262
259
|
) -> Path:
|
|
263
260
|
local_path = _workspace_destination_for_deployment_path(
|
|
264
261
|
deployment.path, workspace_root, storage_base_path
|
|
@@ -285,7 +282,7 @@ async def _pull_storage_into_workspace(
|
|
|
285
282
|
)
|
|
286
283
|
storage_block = LocalFileSystem(basepath=from_path)
|
|
287
284
|
|
|
288
|
-
|
|
285
|
+
logger.info("Downloading flow code from storage at %r", from_path)
|
|
289
286
|
await storage_block.get_directory(from_path=from_path, local_path=str(local_path))
|
|
290
287
|
return local_path
|
|
291
288
|
|
|
@@ -301,6 +298,8 @@ async def prepare_workspace(
|
|
|
301
298
|
f"Deployment {deployment.id} does not have an entrypoint and can not be run."
|
|
302
299
|
)
|
|
303
300
|
|
|
301
|
+
run_logger = flow_run_logger(flow_run)
|
|
302
|
+
|
|
304
303
|
source_cwd = Path.cwd().resolve()
|
|
305
304
|
storage_base_path = _get_configured_storage_base_path()
|
|
306
305
|
resolved_workspace_root = Path(workspace_root).expanduser().resolve()
|
|
@@ -314,6 +313,7 @@ async def prepare_workspace(
|
|
|
314
313
|
resolved_workspace_root,
|
|
315
314
|
source_cwd,
|
|
316
315
|
storage_base_path,
|
|
316
|
+
run_logger,
|
|
317
317
|
)
|
|
318
318
|
local_runtime_directory = _resolve_local_runtime_directory(
|
|
319
319
|
deployment.path, source_cwd, storage_base_path
|
|
@@ -326,7 +326,9 @@ async def prepare_workspace(
|
|
|
326
326
|
working_directory = resolved_workspace_root
|
|
327
327
|
step_selected_working_directory = False
|
|
328
328
|
os.chdir(resolved_workspace_root)
|
|
329
|
-
|
|
329
|
+
run_logger.info(
|
|
330
|
+
"Running %s deployment pull step(s)", len(deployment.pull_steps)
|
|
331
|
+
)
|
|
330
332
|
|
|
331
333
|
def _track_step_workspace(
|
|
332
334
|
_step: dict[str, Any],
|
|
@@ -359,10 +361,10 @@ async def prepare_workspace(
|
|
|
359
361
|
with _observe_step_completion(_track_step_workspace):
|
|
360
362
|
await run_steps(
|
|
361
363
|
deployment.pull_steps,
|
|
362
|
-
print_function=
|
|
364
|
+
print_function=run_logger.warning,
|
|
363
365
|
deployment=deployment,
|
|
364
366
|
flow_run=flow_run,
|
|
365
|
-
logger=
|
|
367
|
+
logger=run_logger,
|
|
366
368
|
)
|
|
367
369
|
finally:
|
|
368
370
|
_PULL_STEP_SOURCE_CWD.reset(source_cwd_token)
|
|
@@ -374,6 +376,7 @@ async def prepare_workspace(
|
|
|
374
376
|
resolved_workspace_root,
|
|
375
377
|
source_cwd,
|
|
376
378
|
storage_base_path,
|
|
379
|
+
run_logger,
|
|
377
380
|
)
|
|
378
381
|
|
|
379
382
|
os.chdir(working_directory)
|
|
@@ -436,6 +439,8 @@ async def _main_async(argv: list[str] | None = None) -> int:
|
|
|
436
439
|
sys.stdout.write(result.model_dump_json())
|
|
437
440
|
sys.stdout.write("\n")
|
|
438
441
|
return 1
|
|
442
|
+
finally:
|
|
443
|
+
await APILogHandler.aflush()
|
|
439
444
|
|
|
440
445
|
result = PreparedWorkspaceResult(status="success", workspace=workspace)
|
|
441
446
|
sys.stdout.write(result.model_dump_json())
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import os
|
|
3
4
|
import re
|
|
4
5
|
import shutil
|
|
6
|
+
import stat
|
|
5
7
|
import subprocess
|
|
8
|
+
import sys
|
|
6
9
|
import warnings
|
|
7
10
|
from copy import deepcopy
|
|
8
11
|
from pathlib import Path
|
|
@@ -31,6 +34,41 @@ from prefect.logging.loggers import get_logger
|
|
|
31
34
|
from prefect.utilities.collections import visit_collection
|
|
32
35
|
|
|
33
36
|
|
|
37
|
+
def _clear_read_only_attributes(path: Path) -> None:
|
|
38
|
+
"""
|
|
39
|
+
Recursively clear the read-only attribute on files within a directory.
|
|
40
|
+
|
|
41
|
+
On Windows, git writes pack and loose object files as read-only (mode
|
|
42
|
+
`0o444`). A subsequent `git pull` that needs to repack or replace those
|
|
43
|
+
files then fails with `[WinError 5] Access is denied`. Marking the files
|
|
44
|
+
as writable beforehand lets git manage them. This is a no-op on
|
|
45
|
+
non-Windows platforms, where read-only object files do not block git.
|
|
46
|
+
"""
|
|
47
|
+
if sys.platform != "win32":
|
|
48
|
+
return
|
|
49
|
+
if not path.exists():
|
|
50
|
+
return
|
|
51
|
+
for entry in path.rglob("*"):
|
|
52
|
+
try:
|
|
53
|
+
if entry.is_file() and not entry.is_symlink():
|
|
54
|
+
os.chmod(entry, stat.S_IWRITE | stat.S_IREAD)
|
|
55
|
+
except OSError:
|
|
56
|
+
# Best effort: if a single file can't be made writable, let git
|
|
57
|
+
# surface the underlying error rather than masking it here.
|
|
58
|
+
continue
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _rmtree_including_read_only(path: Path) -> None:
|
|
62
|
+
"""
|
|
63
|
+
Remove a directory tree, first clearing read-only attributes so that
|
|
64
|
+
read-only git object files (mode `0o444` on Windows) do not raise
|
|
65
|
+
`[WinError 5] Access is denied` during deletion. This is a plain
|
|
66
|
+
`shutil.rmtree` on non-Windows platforms.
|
|
67
|
+
"""
|
|
68
|
+
_clear_read_only_attributes(path)
|
|
69
|
+
shutil.rmtree(path)
|
|
70
|
+
|
|
71
|
+
|
|
34
72
|
@runtime_checkable
|
|
35
73
|
class RunnerStorage(Protocol):
|
|
36
74
|
"""
|
|
@@ -393,6 +431,11 @@ class GitRepository:
|
|
|
393
431
|
f"does not match the configured repository {configured_repo_url}"
|
|
394
432
|
)
|
|
395
433
|
|
|
434
|
+
# On Windows, git object files are read-only, which prevents git
|
|
435
|
+
# from repacking or replacing them during a pull. Clear the
|
|
436
|
+
# read-only attribute first to avoid `[WinError 5] Access is denied`.
|
|
437
|
+
_clear_read_only_attributes(git_dir)
|
|
438
|
+
|
|
396
439
|
# Sparsely checkout the repository if directories are specified and the repo is not in sparse-checkout mode already
|
|
397
440
|
if self._directories and not await self.is_sparsely_checked_out():
|
|
398
441
|
await run_process(
|
|
@@ -423,7 +466,7 @@ class GitRepository:
|
|
|
423
466
|
self._logger.error(
|
|
424
467
|
f"Failed to fetch latest changes with exit code {exc}"
|
|
425
468
|
)
|
|
426
|
-
|
|
469
|
+
_rmtree_including_read_only(self.destination)
|
|
427
470
|
await self._clone_repo()
|
|
428
471
|
|
|
429
472
|
await run_process(
|
|
@@ -449,7 +492,7 @@ class GitRepository:
|
|
|
449
492
|
self._logger.error(
|
|
450
493
|
f"Failed to pull latest changes with exit code {exc}"
|
|
451
494
|
)
|
|
452
|
-
|
|
495
|
+
_rmtree_including_read_only(self.destination)
|
|
453
496
|
await self._clone_repo()
|
|
454
497
|
|
|
455
498
|
else:
|
|
@@ -43,7 +43,6 @@ from fastapi.openapi.utils import get_openapi
|
|
|
43
43
|
from fastapi.responses import JSONResponse, RedirectResponse
|
|
44
44
|
from fastapi.staticfiles import StaticFiles
|
|
45
45
|
from packaging.version import Version
|
|
46
|
-
from starlette.exceptions import HTTPException
|
|
47
46
|
from typing_extensions import Self
|
|
48
47
|
|
|
49
48
|
import prefect
|
|
@@ -176,21 +175,6 @@ def _install_sqlite_locked_log_filter() -> None:
|
|
|
176
175
|
_SQLITE_LOCKED_LOG_FILTER = filter_
|
|
177
176
|
|
|
178
177
|
|
|
179
|
-
class SPAStaticFiles(StaticFiles):
|
|
180
|
-
"""
|
|
181
|
-
Implementation of `StaticFiles` for serving single page applications.
|
|
182
|
-
|
|
183
|
-
Adds `get_response` handling to ensure that when a resource isn't found the
|
|
184
|
-
application still returns the index.
|
|
185
|
-
"""
|
|
186
|
-
|
|
187
|
-
async def get_response(self, path: str, scope: Any) -> Response:
|
|
188
|
-
try:
|
|
189
|
-
return await super().get_response(path, scope)
|
|
190
|
-
except HTTPException:
|
|
191
|
-
return await super().get_response("./index.html", scope)
|
|
192
|
-
|
|
193
|
-
|
|
194
178
|
def _normalize_ui_base_url(base_url: str) -> str:
|
|
195
179
|
if not base_url:
|
|
196
180
|
return "/"
|
|
@@ -616,7 +600,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
|
|
|
616
600
|
static_dir=build_static_dir("v1", str(prefect.__ui_static_subpath__)),
|
|
617
601
|
base_url=v1_base_url,
|
|
618
602
|
cache_key=f"v1:{prefect.__version__}:{v1_base_url}",
|
|
619
|
-
mount_name="ui_v1",
|
|
620
603
|
),
|
|
621
604
|
UIBundle(
|
|
622
605
|
version="v2",
|
|
@@ -624,7 +607,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
|
|
|
624
607
|
static_dir=build_static_dir("v2", str(prefect.__ui_v2_static_subpath__)),
|
|
625
608
|
base_url=v2_base_url,
|
|
626
609
|
cache_key=f"v2:{prefect.__version__}:{v2_base_url}",
|
|
627
|
-
mount_name="ui_v2",
|
|
628
610
|
),
|
|
629
611
|
]
|
|
630
612
|
|
|
@@ -767,10 +749,10 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
|
|
|
767
749
|
if bundle is None:
|
|
768
750
|
continue
|
|
769
751
|
|
|
770
|
-
ui_app.
|
|
752
|
+
ui_app.frontend(
|
|
771
753
|
bundle.base_url,
|
|
772
|
-
|
|
773
|
-
|
|
754
|
+
directory=bundle.static_dir,
|
|
755
|
+
fallback="index.html",
|
|
774
756
|
)
|
|
775
757
|
|
|
776
758
|
return ui_app
|
|
@@ -1148,6 +1148,7 @@ async def worker_channel_connect(
|
|
|
1148
1148
|
work_pool_id=ready.payload.initial_snapshot.work_pool.id,
|
|
1149
1149
|
consumer_id=hello.payload.consumer_id,
|
|
1150
1150
|
worker_name=hello.payload.worker_name,
|
|
1151
|
+
work_pool_updated=ready.payload.initial_snapshot.work_pool.updated,
|
|
1151
1152
|
cleanup_queue=(
|
|
1152
1153
|
cleanup_queue
|
|
1153
1154
|
if CLEANUP_DELIVERY_CAPABILITY
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_transport.py
RENAMED
|
@@ -143,7 +143,12 @@ class WorkerChannelTransport:
|
|
|
143
143
|
|
|
144
144
|
status_code = self._status_code_from_exception(exc)
|
|
145
145
|
if status_code is not None:
|
|
146
|
-
if status_code
|
|
146
|
+
if status_code == 401:
|
|
147
|
+
return WorkerChannelTerminalError(
|
|
148
|
+
WorkerChannelCloseReason.AUTHENTICATION_FAILED.value,
|
|
149
|
+
"Worker channel setup was rejected by the server",
|
|
150
|
+
)
|
|
151
|
+
if status_code == 403:
|
|
147
152
|
return WorkerChannelTerminalError(
|
|
148
153
|
WorkerChannelCloseReason.AUTHORIZATION_FAILED.value,
|
|
149
154
|
"Worker channel setup was rejected by the server",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/execute.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/diagnostics.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/manager.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/ci_detection.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/device_id.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/milestones.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/backports.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/blocks.py
RENAMED
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/deprecated.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/migration.py
RENAMED
|
File without changes
|