prefect-client 3.6.7.dev3__tar.gz → 3.6.8.dev3__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.6.7.dev3 → prefect_client-3.6.8.dev3}/PKG-INFO +1 -1
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/__init__.py +8 -5
- prefect_client-3.6.8.dev3/src/prefect/_build_info.py +5 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/bundles/__init__.py +8 -4
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/notifications.py +1 -1
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/cache_policies.py +12 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_deployments/client.py +12 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/clients.py +24 -12
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/flow_runs.py +31 -10
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/logging.yml +2 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/main.py +12 -6
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runner/storage.py +30 -1
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/serializers.py +17 -1
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/background_workers.py +16 -3
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/tasks.py +26 -18
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/schema_tools/validation.py +1 -1
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/urls.py +7 -3
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/base.py +0 -8
- prefect_client-3.6.7.dev3/src/prefect/_build_info.py +0 -5
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/.gitignore +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/LICENSE +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/README.md +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/pyproject.toml +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/__main__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_states.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/agent.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/automations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/base.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/context.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/engine.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/related.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/flows.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/futures.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/plugins.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/py.typed +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/results.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runner/_observers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/schedules.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/states.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/transactions.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/_schema.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/types/names.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/variables.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/workers/utilities.py +0 -0
|
@@ -12,21 +12,22 @@ if TYPE_CHECKING:
|
|
|
12
12
|
from importlib.machinery import ModuleSpec
|
|
13
13
|
from .main import (
|
|
14
14
|
allow_failure,
|
|
15
|
+
aresume_flow_run,
|
|
16
|
+
aserve,
|
|
15
17
|
flow,
|
|
16
18
|
Flow,
|
|
17
19
|
get_client,
|
|
18
20
|
get_run_logger,
|
|
21
|
+
pause_flow_run,
|
|
22
|
+
resume_flow_run,
|
|
23
|
+
serve,
|
|
19
24
|
State,
|
|
25
|
+
suspend_flow_run,
|
|
20
26
|
tags,
|
|
21
27
|
task,
|
|
22
28
|
Task,
|
|
23
29
|
Transaction,
|
|
24
30
|
unmapped,
|
|
25
|
-
serve,
|
|
26
|
-
aserve,
|
|
27
|
-
pause_flow_run,
|
|
28
|
-
resume_flow_run,
|
|
29
|
-
suspend_flow_run,
|
|
30
31
|
)
|
|
31
32
|
from prefect.deployments.runner import deploy
|
|
32
33
|
|
|
@@ -118,6 +119,7 @@ _initialize_plugins()
|
|
|
118
119
|
|
|
119
120
|
_public_api: dict[str, tuple[Optional[str], str]] = {
|
|
120
121
|
"allow_failure": (__spec__.parent, ".main"),
|
|
122
|
+
"aresume_flow_run": (__spec__.parent, ".main"),
|
|
121
123
|
"aserve": (__spec__.parent, ".main"),
|
|
122
124
|
"deploy": (__spec__.parent, ".deployments.runner"),
|
|
123
125
|
"flow": (__spec__.parent, ".main"),
|
|
@@ -140,6 +142,7 @@ _public_api: dict[str, tuple[Optional[str], str]] = {
|
|
|
140
142
|
__all__ = [
|
|
141
143
|
"__version__",
|
|
142
144
|
"allow_failure",
|
|
145
|
+
"aresume_flow_run",
|
|
143
146
|
"aserve",
|
|
144
147
|
"deploy",
|
|
145
148
|
"flow",
|
|
@@ -38,14 +38,18 @@ logger: logging.Logger = get_logger(__name__)
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def _get_uv_path() -> str:
|
|
41
|
+
"""
|
|
42
|
+
Get the path to the uv binary.
|
|
43
|
+
|
|
44
|
+
First tries to use the uv Python package to find the binary.
|
|
45
|
+
Falls back to "uv" string (assumes uv is in PATH).
|
|
46
|
+
"""
|
|
41
47
|
try:
|
|
42
48
|
import uv
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
return uv.find_uv_bin()
|
|
45
51
|
except (ImportError, ModuleNotFoundError, FileNotFoundError):
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return uv_path
|
|
52
|
+
return "uv"
|
|
49
53
|
|
|
50
54
|
|
|
51
55
|
class SerializedBundle(TypedDict):
|
|
@@ -679,7 +679,7 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
|
|
|
679
679
|
token=self.token.get_secret_value(),
|
|
680
680
|
fullpath=self.path,
|
|
681
681
|
host=self.hostname,
|
|
682
|
-
|
|
682
|
+
user=self.botname,
|
|
683
683
|
channels=self.channels,
|
|
684
684
|
include_image=self.include_image,
|
|
685
685
|
port=self.port,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from copy import deepcopy
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
+
from logging import Logger
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import (
|
|
6
7
|
TYPE_CHECKING,
|
|
@@ -16,6 +17,7 @@ from typing_extensions import Self
|
|
|
16
17
|
|
|
17
18
|
from prefect.context import TaskRunContext
|
|
18
19
|
from prefect.exceptions import HashError
|
|
20
|
+
from prefect.logging import get_logger
|
|
19
21
|
from prefect.utilities.hashing import hash_objects
|
|
20
22
|
|
|
21
23
|
if TYPE_CHECKING:
|
|
@@ -25,6 +27,8 @@ if TYPE_CHECKING:
|
|
|
25
27
|
|
|
26
28
|
STABLE_TRANSFORMS: dict[type, Callable[[Any], Any]] = {}
|
|
27
29
|
|
|
30
|
+
logger: Logger = get_logger(__name__)
|
|
31
|
+
|
|
28
32
|
|
|
29
33
|
def _register_stable_transforms() -> None:
|
|
30
34
|
"""
|
|
@@ -291,6 +295,13 @@ class TaskSource(CachePolicy):
|
|
|
291
295
|
) -> Optional[str]:
|
|
292
296
|
if not task_ctx:
|
|
293
297
|
return None
|
|
298
|
+
|
|
299
|
+
# Use stored source code if available (works after cloudpickle serialization)
|
|
300
|
+
lines = getattr(task_ctx.task, "source_code", None)
|
|
301
|
+
if lines is not None:
|
|
302
|
+
return hash_objects(lines, raise_on_failure=True)
|
|
303
|
+
|
|
304
|
+
# Fall back to inspect.getsource for local execution
|
|
294
305
|
try:
|
|
295
306
|
lines = inspect.getsource(task_ctx.task)
|
|
296
307
|
except TypeError:
|
|
@@ -300,6 +311,7 @@ class TaskSource(CachePolicy):
|
|
|
300
311
|
lines = task_ctx.task.fn.__code__.co_code
|
|
301
312
|
else:
|
|
302
313
|
raise
|
|
314
|
+
|
|
303
315
|
return hash_objects(lines, raise_on_failure=True)
|
|
304
316
|
|
|
305
317
|
|
|
@@ -157,6 +157,12 @@ class DeploymentClient(BaseClient):
|
|
|
157
157
|
payload["version_info"] = deployment_create.version_info.model_dump(
|
|
158
158
|
mode="json"
|
|
159
159
|
)
|
|
160
|
+
if deployment_create.concurrency_options:
|
|
161
|
+
payload["concurrency_options"] = (
|
|
162
|
+
deployment_create.concurrency_options.model_dump(
|
|
163
|
+
mode="json", exclude_unset=True
|
|
164
|
+
)
|
|
165
|
+
)
|
|
160
166
|
|
|
161
167
|
try:
|
|
162
168
|
response = self.request("POST", "/deployments/", json=payload)
|
|
@@ -823,6 +829,12 @@ class DeploymentAsyncClient(BaseAsyncClient):
|
|
|
823
829
|
payload["version_info"] = deployment_create.version_info.model_dump(
|
|
824
830
|
mode="json"
|
|
825
831
|
)
|
|
832
|
+
if deployment_create.concurrency_options:
|
|
833
|
+
payload["concurrency_options"] = (
|
|
834
|
+
deployment_create.concurrency_options.model_dump(
|
|
835
|
+
mode="json", exclude_unset=True
|
|
836
|
+
)
|
|
837
|
+
)
|
|
826
838
|
|
|
827
839
|
try:
|
|
828
840
|
response = await self.request("POST", "/deployments/", json=payload)
|
|
@@ -281,7 +281,11 @@ class PrefectEventsClient(EventsClient):
|
|
|
281
281
|
# Don't handle any errors in the initial connection, because these are most
|
|
282
282
|
# likely a permission or configuration issue that should propagate
|
|
283
283
|
await super().__aenter__()
|
|
284
|
-
|
|
284
|
+
try:
|
|
285
|
+
await self._reconnect()
|
|
286
|
+
except Exception as e:
|
|
287
|
+
self._log_connection_error(e)
|
|
288
|
+
raise
|
|
285
289
|
return self
|
|
286
290
|
|
|
287
291
|
async def __aexit__(
|
|
@@ -298,6 +302,18 @@ class PrefectEventsClient(EventsClient):
|
|
|
298
302
|
message = f"EventsClient(id={id(self)}): " + message
|
|
299
303
|
logger.debug(message, *args, **kwargs)
|
|
300
304
|
|
|
305
|
+
def _log_connection_error(self, error: Exception) -> None:
|
|
306
|
+
logger.warning(
|
|
307
|
+
"Unable to connect to %r. "
|
|
308
|
+
"Please check your network settings to ensure websocket connections "
|
|
309
|
+
"to the API are allowed. Otherwise event data (including task run data) may be lost. "
|
|
310
|
+
"Reason: %s. "
|
|
311
|
+
"Set PREFECT_DEBUG_MODE=1 to see the full error.",
|
|
312
|
+
self._events_socket_url,
|
|
313
|
+
str(error),
|
|
314
|
+
exc_info=PREFECT_DEBUG_MODE.value(),
|
|
315
|
+
)
|
|
316
|
+
|
|
301
317
|
async def _reconnect(self) -> None:
|
|
302
318
|
logger.debug("Reconnecting websocket connection.")
|
|
303
319
|
|
|
@@ -315,15 +331,10 @@ class PrefectEventsClient(EventsClient):
|
|
|
315
331
|
await pong
|
|
316
332
|
logger.debug("Pong received. Websocket connected.")
|
|
317
333
|
except Exception as e:
|
|
318
|
-
#
|
|
319
|
-
#
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
"Unable to connect to %r. "
|
|
323
|
-
"Please check your network settings to ensure websocket connections "
|
|
324
|
-
"to the API are allowed. Otherwise event data (including task run data) may be lost. "
|
|
325
|
-
"Reason: %s. "
|
|
326
|
-
"Set PREFECT_DEBUG_MODE=1 to see the full error.",
|
|
334
|
+
# Log at debug level during reconnection attempts - the warning will
|
|
335
|
+
# only be logged if all reconnection attempts fail (in _emit)
|
|
336
|
+
logger.debug(
|
|
337
|
+
"Unable to connect to %r, will retry. Reason: %s",
|
|
327
338
|
self._events_socket_url,
|
|
328
339
|
str(e),
|
|
329
340
|
exc_info=PREFECT_DEBUG_MODE.value(),
|
|
@@ -391,10 +402,11 @@ class PrefectEventsClient(EventsClient):
|
|
|
391
402
|
await self._checkpoint()
|
|
392
403
|
|
|
393
404
|
return
|
|
394
|
-
except ConnectionClosed:
|
|
405
|
+
except ConnectionClosed as e:
|
|
395
406
|
self._log_debug("Got ConnectionClosed error.")
|
|
396
407
|
if i == self._reconnection_attempts:
|
|
397
|
-
# this was our final chance,
|
|
408
|
+
# this was our final chance, log warning and raise
|
|
409
|
+
self._log_connection_error(e)
|
|
398
410
|
raise
|
|
399
411
|
|
|
400
412
|
if i > 2:
|
|
@@ -11,6 +11,7 @@ from uuid import UUID, uuid4
|
|
|
11
11
|
|
|
12
12
|
import anyio
|
|
13
13
|
|
|
14
|
+
from prefect._internal.compatibility.async_dispatch import async_dispatch
|
|
14
15
|
from prefect.client.orchestration import PrefectClient, get_client
|
|
15
16
|
from prefect.client.schemas import FlowRun
|
|
16
17
|
from prefect.client.schemas.objects import (
|
|
@@ -42,9 +43,7 @@ from prefect.states import (
|
|
|
42
43
|
Paused,
|
|
43
44
|
Suspended,
|
|
44
45
|
)
|
|
45
|
-
from prefect.utilities.asyncutils import
|
|
46
|
-
sync_compatible,
|
|
47
|
-
)
|
|
46
|
+
from prefect.utilities.asyncutils import sync_compatible
|
|
48
47
|
from prefect.utilities.engine import (
|
|
49
48
|
propose_state,
|
|
50
49
|
)
|
|
@@ -459,28 +458,50 @@ async def suspend_flow_run(
|
|
|
459
458
|
raise Pause(state=state)
|
|
460
459
|
|
|
461
460
|
|
|
462
|
-
|
|
463
|
-
async def resume_flow_run(
|
|
461
|
+
async def aresume_flow_run(
|
|
464
462
|
flow_run_id: UUID, run_input: dict[str, Any] | None = None
|
|
465
463
|
) -> None:
|
|
466
464
|
"""
|
|
467
|
-
Resumes a paused flow.
|
|
465
|
+
Resumes a paused flow asynchronously.
|
|
468
466
|
|
|
469
467
|
Args:
|
|
470
468
|
flow_run_id: the flow_run_id to resume
|
|
471
469
|
run_input: a dictionary of inputs to provide to the flow run.
|
|
472
470
|
"""
|
|
473
|
-
|
|
474
|
-
async with client:
|
|
471
|
+
async with get_client() as client:
|
|
475
472
|
flow_run = await client.read_flow_run(flow_run_id)
|
|
476
473
|
|
|
477
|
-
if not flow_run.state.is_paused():
|
|
474
|
+
if not flow_run.state or not flow_run.state.is_paused():
|
|
478
475
|
raise NotPausedError("Cannot resume a run that isn't paused!")
|
|
479
476
|
|
|
480
477
|
response = await client.resume_flow_run(flow_run_id, run_input=run_input)
|
|
481
478
|
|
|
482
479
|
if response.status == SetStateStatus.REJECT:
|
|
483
|
-
if response.state.type == StateType.FAILED:
|
|
480
|
+
if response.state and response.state.type == StateType.FAILED:
|
|
481
|
+
raise FlowPauseTimeout("Flow run can no longer be resumed.")
|
|
482
|
+
else:
|
|
483
|
+
raise RuntimeError(f"Cannot resume this run: {response.details.reason}")
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
@async_dispatch(aresume_flow_run)
|
|
487
|
+
def resume_flow_run(flow_run_id: UUID, run_input: dict[str, Any] | None = None) -> None:
|
|
488
|
+
"""
|
|
489
|
+
Resumes a paused flow.
|
|
490
|
+
|
|
491
|
+
Args:
|
|
492
|
+
flow_run_id: the flow_run_id to resume
|
|
493
|
+
run_input: a dictionary of inputs to provide to the flow run.
|
|
494
|
+
"""
|
|
495
|
+
with get_client(sync_client=True) as client:
|
|
496
|
+
flow_run = client.read_flow_run(flow_run_id)
|
|
497
|
+
|
|
498
|
+
if not flow_run.state or not flow_run.state.is_paused():
|
|
499
|
+
raise NotPausedError("Cannot resume a run that isn't paused!")
|
|
500
|
+
|
|
501
|
+
response = client.resume_flow_run(flow_run_id, run_input=run_input)
|
|
502
|
+
|
|
503
|
+
if response.status == SetStateStatus.REJECT:
|
|
504
|
+
if response.state and response.state.type == StateType.FAILED:
|
|
484
505
|
raise FlowPauseTimeout("Flow run can no longer be resumed.")
|
|
485
506
|
else:
|
|
486
507
|
raise RuntimeError(f"Cannot resume this run: {response.details.reason}")
|
|
@@ -43,6 +43,7 @@ handlers:
|
|
|
43
43
|
level: 0
|
|
44
44
|
class: prefect.logging.handlers.PrefectConsoleHandler
|
|
45
45
|
formatter: standard
|
|
46
|
+
stream: ext://sys.stderr
|
|
46
47
|
styles:
|
|
47
48
|
log.web_url: bright_blue
|
|
48
49
|
log.local_url: bright_blue
|
|
@@ -69,6 +70,7 @@ handlers:
|
|
|
69
70
|
level: 0
|
|
70
71
|
class: logging.StreamHandler
|
|
71
72
|
formatter: debug
|
|
73
|
+
stream: ext://sys.stderr
|
|
72
74
|
|
|
73
75
|
worker_api:
|
|
74
76
|
level: 0
|
|
@@ -8,7 +8,12 @@ from prefect.tasks import task, Task
|
|
|
8
8
|
from prefect.context import tags
|
|
9
9
|
from prefect.utilities.annotations import unmapped, allow_failure
|
|
10
10
|
from prefect._result_records import ResultRecordMetadata
|
|
11
|
-
from prefect.flow_runs import
|
|
11
|
+
from prefect.flow_runs import (
|
|
12
|
+
aresume_flow_run,
|
|
13
|
+
pause_flow_run,
|
|
14
|
+
resume_flow_run,
|
|
15
|
+
suspend_flow_run,
|
|
16
|
+
)
|
|
12
17
|
from prefect.client.orchestration import get_client
|
|
13
18
|
from prefect.client.cloud import get_cloud_client
|
|
14
19
|
import prefect.variables # pyright: ignore[reportUnusedImport] # TODO: Does this need to be imported here?
|
|
@@ -58,20 +63,21 @@ flow: FlowDecorator
|
|
|
58
63
|
# Declare API for type-checkers
|
|
59
64
|
__all__ = [
|
|
60
65
|
"allow_failure",
|
|
66
|
+
"aresume_flow_run",
|
|
67
|
+
"aserve",
|
|
61
68
|
"flow",
|
|
62
69
|
"Flow",
|
|
63
70
|
"get_client",
|
|
64
71
|
"get_cloud_client",
|
|
65
72
|
"get_run_logger",
|
|
73
|
+
"pause_flow_run",
|
|
74
|
+
"resume_flow_run",
|
|
75
|
+
"serve",
|
|
66
76
|
"State",
|
|
77
|
+
"suspend_flow_run",
|
|
67
78
|
"tags",
|
|
68
79
|
"task",
|
|
69
80
|
"Task",
|
|
70
81
|
"Transaction",
|
|
71
82
|
"unmapped",
|
|
72
|
-
"serve",
|
|
73
|
-
"aserve",
|
|
74
|
-
"pause_flow_run",
|
|
75
|
-
"resume_flow_run",
|
|
76
|
-
"suspend_flow_run",
|
|
77
83
|
]
|
|
@@ -919,7 +919,36 @@ def _format_token_from_credentials(
|
|
|
919
919
|
if username:
|
|
920
920
|
return f"{username}:{user_provided_token}"
|
|
921
921
|
|
|
922
|
-
#
|
|
922
|
+
# Netloc-based provider detection for dict credentials (e.g., from YAML block references).
|
|
923
|
+
# When credentials come from deployment YAML like:
|
|
924
|
+
# credentials: "{{ prefect.blocks.gitlab-credentials.my-block }}"
|
|
925
|
+
# they resolve to dicts, not Block instances, so the protocol check above doesn't apply.
|
|
926
|
+
# This provides sensible defaults for common git providers.
|
|
927
|
+
if "bitbucketserver" in netloc:
|
|
928
|
+
if ":" not in user_provided_token:
|
|
929
|
+
raise ValueError(
|
|
930
|
+
"Please provide a `username` and a `password` or `token` in your"
|
|
931
|
+
" BitBucketCredentials block to clone a repo from BitBucket Server."
|
|
932
|
+
)
|
|
933
|
+
return user_provided_token
|
|
934
|
+
|
|
935
|
+
elif "bitbucket" in netloc:
|
|
936
|
+
if (
|
|
937
|
+
user_provided_token.startswith("x-token-auth:")
|
|
938
|
+
or ":" in user_provided_token
|
|
939
|
+
):
|
|
940
|
+
return user_provided_token
|
|
941
|
+
return f"x-token-auth:{user_provided_token}"
|
|
942
|
+
|
|
943
|
+
elif "gitlab" in netloc:
|
|
944
|
+
if user_provided_token.startswith("oauth2:"):
|
|
945
|
+
return user_provided_token
|
|
946
|
+
# Deploy tokens contain ":" (username:token format) and should not get oauth2: prefix
|
|
947
|
+
if ":" in user_provided_token:
|
|
948
|
+
return user_provided_token
|
|
949
|
+
return f"oauth2:{user_provided_token}"
|
|
950
|
+
|
|
951
|
+
# GitHub and other providers: plain token
|
|
923
952
|
return user_provided_token
|
|
924
953
|
|
|
925
954
|
|
|
@@ -41,6 +41,21 @@ D = TypeVar("D", default=Any)
|
|
|
41
41
|
_TYPE_ADAPTER_CACHE: dict[str, TypeAdapter[Any]] = {}
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def _get_importable_class(cls: type) -> type:
|
|
45
|
+
"""
|
|
46
|
+
Get an importable class from a potentially parameterized generic.
|
|
47
|
+
|
|
48
|
+
For Pydantic generic models like `APIResult[str]`, the class name includes
|
|
49
|
+
type parameters (e.g., `APIResult[str]`) which cannot be imported. This
|
|
50
|
+
function extracts the origin class (e.g., `APIResult`) which can be imported.
|
|
51
|
+
"""
|
|
52
|
+
if hasattr(cls, "__pydantic_generic_metadata__"):
|
|
53
|
+
origin = cls.__pydantic_generic_metadata__.get("origin")
|
|
54
|
+
if origin is not None:
|
|
55
|
+
return origin
|
|
56
|
+
return cls
|
|
57
|
+
|
|
58
|
+
|
|
44
59
|
def prefect_json_object_encoder(obj: Any) -> Any:
|
|
45
60
|
"""
|
|
46
61
|
`JSONEncoder.default` for encoding objects into JSON with extended type support.
|
|
@@ -58,8 +73,9 @@ def prefect_json_object_encoder(obj: Any) -> Any:
|
|
|
58
73
|
),
|
|
59
74
|
}
|
|
60
75
|
else:
|
|
76
|
+
importable_class = _get_importable_class(obj.__class__)
|
|
61
77
|
return {
|
|
62
|
-
"__class__": to_qualified_name(
|
|
78
|
+
"__class__": to_qualified_name(importable_class),
|
|
63
79
|
"data": custom_pydantic_encoder({}, obj),
|
|
64
80
|
}
|
|
65
81
|
|
{prefect_client-3.6.7.dev3 → prefect_client-3.6.8.dev3}/src/prefect/server/api/background_workers.py
RENAMED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from contextlib import asynccontextmanager
|
|
3
|
+
from logging import Logger
|
|
3
4
|
from typing import Any, AsyncGenerator, Callable
|
|
4
5
|
|
|
5
6
|
from docket import Docket, Worker
|
|
6
7
|
|
|
8
|
+
from prefect.logging import get_logger
|
|
7
9
|
from prefect.server.api.flow_runs import delete_flow_run_logs
|
|
8
10
|
from prefect.server.api.task_runs import delete_task_run_logs
|
|
11
|
+
from prefect.server.events.services import triggers as _triggers_module # noqa: F401
|
|
9
12
|
from prefect.server.models.deployments import mark_deployments_ready
|
|
10
13
|
from prefect.server.models.work_queues import mark_work_queues_ready
|
|
11
|
-
|
|
12
|
-
# Import task functions that need to be registered with docket
|
|
13
14
|
from prefect.server.services.cancellation_cleanup import (
|
|
14
15
|
cancel_child_task_runs,
|
|
15
16
|
cancel_subflow_run,
|
|
@@ -21,6 +22,8 @@ from prefect.server.services.perpetual_services import (
|
|
|
21
22
|
)
|
|
22
23
|
from prefect.server.services.repossessor import revoke_expired_lease
|
|
23
24
|
|
|
25
|
+
logger: Logger = get_logger(__name__)
|
|
26
|
+
|
|
24
27
|
# Task functions to register with docket for background processing
|
|
25
28
|
task_functions: list[Callable[..., Any]] = [
|
|
26
29
|
# Simple background tasks (from Alex's PR #19377)
|
|
@@ -63,6 +66,16 @@ async def background_worker(
|
|
|
63
66
|
if worker_task:
|
|
64
67
|
worker_task.cancel()
|
|
65
68
|
try:
|
|
66
|
-
|
|
69
|
+
logger.debug(
|
|
70
|
+
"Waiting for background worker to finish after cancellation..."
|
|
71
|
+
)
|
|
72
|
+
await asyncio.wait_for(worker_task, timeout=5.0)
|
|
73
|
+
logger.debug(
|
|
74
|
+
"Background worker finished successfully after cancellation"
|
|
75
|
+
)
|
|
76
|
+
except asyncio.TimeoutError:
|
|
77
|
+
logger.debug(
|
|
78
|
+
"Background worker did not finish within 5 seconds after cancellation. Proceeding with shutdown"
|
|
79
|
+
)
|
|
67
80
|
except asyncio.CancelledError:
|
|
68
81
|
pass
|
|
@@ -456,6 +456,14 @@ class Task(Generic[P, R]):
|
|
|
456
456
|
update_wrapper(self, fn)
|
|
457
457
|
self.fn = fn
|
|
458
458
|
|
|
459
|
+
# Capture source code for cache key computation
|
|
460
|
+
# This is stored on the task so it survives cloudpickle serialization
|
|
461
|
+
# to remote environments where the source file is not available
|
|
462
|
+
try:
|
|
463
|
+
self.source_code: str | None = inspect.getsource(fn)
|
|
464
|
+
except (TypeError, OSError):
|
|
465
|
+
self.source_code = None
|
|
466
|
+
|
|
459
467
|
# the task is considered async if its function is async or an async
|
|
460
468
|
# generator
|
|
461
469
|
self.isasync: bool = inspect.iscoroutinefunction(
|
|
@@ -1088,17 +1096,17 @@ class Task(Generic[P, R]):
|
|
|
1088
1096
|
# These preserve full parameter type checking when users call tasks normally
|
|
1089
1097
|
@overload
|
|
1090
1098
|
def __call__(
|
|
1091
|
-
self: "Task[P, Coroutine[Any, Any,
|
|
1099
|
+
self: "Task[P, Coroutine[Any, Any, T]]",
|
|
1092
1100
|
*args: P.args,
|
|
1093
1101
|
**kwargs: P.kwargs,
|
|
1094
|
-
) -> Coroutine[Any, Any,
|
|
1102
|
+
) -> Coroutine[Any, Any, T]: ...
|
|
1095
1103
|
|
|
1096
1104
|
@overload
|
|
1097
1105
|
def __call__(
|
|
1098
|
-
self: "Task[P,
|
|
1106
|
+
self: "Task[P, T]",
|
|
1099
1107
|
*args: P.args,
|
|
1100
1108
|
**kwargs: P.kwargs,
|
|
1101
|
-
) ->
|
|
1109
|
+
) -> T: ...
|
|
1102
1110
|
|
|
1103
1111
|
@overload
|
|
1104
1112
|
def __call__(
|
|
@@ -1116,65 +1124,65 @@ class Task(Generic[P, R]):
|
|
|
1116
1124
|
# are advanced use cases.
|
|
1117
1125
|
@overload
|
|
1118
1126
|
def __call__(
|
|
1119
|
-
self: "Task[..., Coroutine[Any, Any,
|
|
1127
|
+
self: "Task[..., Coroutine[Any, Any, T]]",
|
|
1120
1128
|
*args: Any,
|
|
1121
1129
|
return_state: Literal[False],
|
|
1122
1130
|
wait_for: Optional[OneOrManyFutureOrResult[Any]] = None,
|
|
1123
1131
|
**kwargs: Any,
|
|
1124
|
-
) -> Coroutine[Any, Any,
|
|
1132
|
+
) -> Coroutine[Any, Any, T]: ...
|
|
1125
1133
|
|
|
1126
1134
|
@overload
|
|
1127
1135
|
def __call__(
|
|
1128
|
-
self: "Task[..., Coroutine[Any, Any,
|
|
1136
|
+
self: "Task[..., Coroutine[Any, Any, T]]",
|
|
1129
1137
|
*args: Any,
|
|
1130
1138
|
return_state: Literal[True],
|
|
1131
1139
|
wait_for: Optional[OneOrManyFutureOrResult[Any]] = None,
|
|
1132
1140
|
**kwargs: Any,
|
|
1133
|
-
) -> State[
|
|
1141
|
+
) -> State[T]: ...
|
|
1134
1142
|
|
|
1135
1143
|
@overload
|
|
1136
1144
|
def __call__(
|
|
1137
|
-
self: "Task[...,
|
|
1145
|
+
self: "Task[..., T]",
|
|
1138
1146
|
*args: Any,
|
|
1139
1147
|
return_state: Literal[False],
|
|
1140
1148
|
wait_for: Optional[OneOrManyFutureOrResult[Any]] = None,
|
|
1141
1149
|
**kwargs: Any,
|
|
1142
|
-
) ->
|
|
1150
|
+
) -> T: ...
|
|
1143
1151
|
|
|
1144
1152
|
@overload
|
|
1145
1153
|
def __call__(
|
|
1146
|
-
self: "Task[...,
|
|
1154
|
+
self: "Task[..., T]",
|
|
1147
1155
|
*args: Any,
|
|
1148
1156
|
return_state: Literal[True],
|
|
1149
1157
|
wait_for: Optional[OneOrManyFutureOrResult[Any]] = None,
|
|
1150
1158
|
**kwargs: Any,
|
|
1151
|
-
) -> State[
|
|
1159
|
+
) -> State[T]: ...
|
|
1152
1160
|
|
|
1153
1161
|
@overload
|
|
1154
1162
|
def __call__(
|
|
1155
|
-
self: "Task[..., Coroutine[Any, Any,
|
|
1163
|
+
self: "Task[..., Coroutine[Any, Any, T]]",
|
|
1156
1164
|
*args: Any,
|
|
1157
1165
|
wait_for: OneOrManyFutureOrResult[Any],
|
|
1158
1166
|
return_state: Literal[False] = False,
|
|
1159
1167
|
**kwargs: Any,
|
|
1160
|
-
) -> Coroutine[Any, Any,
|
|
1168
|
+
) -> Coroutine[Any, Any, T]: ...
|
|
1161
1169
|
|
|
1162
1170
|
@overload
|
|
1163
1171
|
def __call__(
|
|
1164
|
-
self: "Task[...,
|
|
1172
|
+
self: "Task[..., T]",
|
|
1165
1173
|
*args: Any,
|
|
1166
1174
|
wait_for: OneOrManyFutureOrResult[Any],
|
|
1167
1175
|
return_state: Literal[False] = False,
|
|
1168
1176
|
**kwargs: Any,
|
|
1169
|
-
) ->
|
|
1177
|
+
) -> T: ...
|
|
1170
1178
|
|
|
1171
1179
|
def __call__(
|
|
1172
|
-
self: "Union[Task[...,
|
|
1180
|
+
self: "Union[Task[..., T], Task[..., NoReturn]]",
|
|
1173
1181
|
*args: Any,
|
|
1174
1182
|
return_state: bool = False,
|
|
1175
1183
|
wait_for: Optional[OneOrManyFutureOrResult[Any]] = None,
|
|
1176
1184
|
**kwargs: Any,
|
|
1177
|
-
) -> Union[
|
|
1185
|
+
) -> Union[T, State[T], None]:
|
|
1178
1186
|
"""
|
|
1179
1187
|
Run the task and return the result. If `return_state` is True returns
|
|
1180
1188
|
the result is wrapped in a Prefect State which provides error handling.
|
|
@@ -257,7 +257,7 @@ def preprocess_schema(
|
|
|
257
257
|
|
|
258
258
|
if "definitions" in schema: # Also process definitions for reused models
|
|
259
259
|
definitions = cast(dict[str, Any], schema["definitions"])
|
|
260
|
-
for definition in definitions.values():
|
|
260
|
+
for definition in list(definitions.values()):
|
|
261
261
|
if "properties" in definition:
|
|
262
262
|
required_fields = definition.get("required", [])
|
|
263
263
|
process_properties(
|
|
@@ -4,7 +4,7 @@ import socket
|
|
|
4
4
|
import urllib.parse
|
|
5
5
|
from logging import Logger
|
|
6
6
|
from string import Formatter
|
|
7
|
-
from typing import TYPE_CHECKING, Any, Literal, Optional, Union
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal, Optional, Union, cast
|
|
8
8
|
from urllib.parse import urlparse
|
|
9
9
|
from uuid import UUID
|
|
10
10
|
|
|
@@ -251,9 +251,13 @@ def url_for(
|
|
|
251
251
|
)
|
|
252
252
|
assert url_format is not None
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
# Use duck-typing to handle both client-side and server-side ReceivedEvent
|
|
255
|
+
if name == "received-event" and hasattr(obj, "occurred"):
|
|
256
|
+
# Cast to ReceivedEvent for type checking - we've verified it has the
|
|
257
|
+
# required attributes via hasattr and name check above
|
|
258
|
+
event = cast(ReceivedEvent, obj)
|
|
255
259
|
url = url_format.format(
|
|
256
|
-
occurred=
|
|
260
|
+
occurred=event.occurred.strftime("%Y-%m-%d"), obj_id=obj_id
|
|
257
261
|
)
|
|
258
262
|
else:
|
|
259
263
|
obj_keys = [
|
|
@@ -536,7 +536,6 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
536
536
|
self._limit = limit
|
|
537
537
|
self._limiter: Optional[anyio.CapacityLimiter] = None
|
|
538
538
|
self._submitting_flow_run_ids: set[UUID] = set()
|
|
539
|
-
self._cancelling_flow_run_ids: set[UUID] = set()
|
|
540
539
|
self._scheduled_task_scopes: set[anyio.CancelScope] = set()
|
|
541
540
|
self._worker_metadata_sent = False
|
|
542
541
|
|
|
@@ -1539,13 +1538,6 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
|
|
|
1539
1538
|
f"Flow run '{flow_run.id}' was deleted before it could be marked as cancelled"
|
|
1540
1539
|
)
|
|
1541
1540
|
|
|
1542
|
-
# Do not remove the flow run from the cancelling set immediately because
|
|
1543
|
-
# the API caches responses for the `read_flow_runs` and we do not want to
|
|
1544
|
-
# duplicate cancellations.
|
|
1545
|
-
await self._schedule_task(
|
|
1546
|
-
60 * 10, self._cancelling_flow_run_ids.remove, flow_run.id
|
|
1547
|
-
)
|
|
1548
|
-
|
|
1549
1541
|
async def _set_work_pool_template(
|
|
1550
1542
|
self, work_pool: "WorkPool", job_template: dict[str, Any]
|
|
1551
1543
|
):
|
|
File without changes
|
|
File without changes
|