prefect-client 3.2.13__tar.gz → 3.2.15.dev7__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.2.13 → prefect_client-3.2.15.dev7}/PKG-INFO +3 -2
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/pyproject.toml +2 -1
- prefect_client-3.2.15.dev7/src/prefect/_build_info.py +5 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/bundles.py +7 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/services.py +13 -3
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_flow_runs/client.py +34 -4
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/actions.py +14 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/objects.py +18 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/runner.py +1 -9
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/docker/docker_image.py +2 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/flow_engine.py +11 -5
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/flow_runs.py +1 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/flows.py +27 -9
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/locking/memory.py +16 -8
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/__init__.py +1 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/configuration.py +6 -4
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/formatters.py +3 -3
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/handlers.py +37 -26
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/results.py +9 -3
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/__init__.py +2 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/runner.py +1 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/server.py +12 -7
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/storage.py +37 -37
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/submit.py +36 -25
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runner/utils.py +9 -5
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +4 -4
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/flow_runs.py +21 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/task_runs.py +52 -1
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/tasks.py +5 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/task_engine.py +18 -24
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/tasks.py +31 -8
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/transactions.py +5 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/callables.py +2 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/engine.py +2 -2
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/importtools.py +6 -9
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/base.py +7 -3
- prefect_client-3.2.13/src/prefect/_build_info.py +0 -5
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/.gitignore +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/LICENSE +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/README.md +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/__main__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/lineage.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/annotations/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/annotations/pendulum.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/agent.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/automations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/base.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/context.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/engine.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/related.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/futures.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/main.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/plugins.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/py.typed +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/schedules.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/serializers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/flow_run_notification_policies.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/states.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/bootstrap.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/instrumentation.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/logging.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/processors.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/telemetry/services.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/variables.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/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.2.
|
3
|
+
Version: 3.2.15.dev7
|
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
|
@@ -48,13 +48,14 @@ Requires-Dist: pydantic-settings>2.2.1
|
|
48
48
|
Requires-Dist: python-dateutil<3.0.0,>=2.8.2
|
49
49
|
Requires-Dist: python-slugify<9.0,>=5.0
|
50
50
|
Requires-Dist: python-socks[asyncio]<3.0,>=2.5.3
|
51
|
+
Requires-Dist: pytz<2026,>=2021.1
|
51
52
|
Requires-Dist: pyyaml<7.0.0,>=5.4.1
|
52
53
|
Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
|
53
54
|
Requires-Dist: rich<14.0,>=11.0
|
54
55
|
Requires-Dist: ruamel-yaml>=0.17.0
|
55
56
|
Requires-Dist: sniffio<2.0.0,>=1.3.0
|
56
57
|
Requires-Dist: toml>=0.10.0
|
57
|
-
Requires-Dist: typing-extensions<5.0.0,>=4.
|
58
|
+
Requires-Dist: typing-extensions<5.0.0,>=4.10.0
|
58
59
|
Requires-Dist: ujson<6.0.0,>=5.8.0
|
59
60
|
Requires-Dist: uvicorn!=0.29.0,>=0.14.0
|
60
61
|
Requires-Dist: websockets<16.0,>=13.0
|
@@ -52,13 +52,14 @@ dependencies = [
|
|
52
52
|
"python-dateutil>=2.8.2,<3.0.0",
|
53
53
|
"python-slugify>=5.0,<9.0",
|
54
54
|
"python-socks[asyncio]>=2.5.3,<3.0",
|
55
|
+
"pytz>=2021.1,<2026",
|
55
56
|
"pyyaml>=5.4.1,<7.0.0",
|
56
57
|
"rfc3339-validator>=0.1.4,<0.2.0",
|
57
58
|
"rich>=11.0,<14.0",
|
58
59
|
"ruamel.yaml>=0.17.0",
|
59
60
|
"sniffio>=1.3.0,<2.0.0",
|
60
61
|
"toml>=0.10.0",
|
61
|
-
"typing_extensions>=4.
|
62
|
+
"typing_extensions>=4.10.0,<5.0.0",
|
62
63
|
"ujson>=5.8.0,<6.0.0",
|
63
64
|
"uvicorn>=0.14.0,!=0.29.0",
|
64
65
|
"websockets>=13.0,<16.0",
|
@@ -173,13 +173,16 @@ def execute_bundle_in_subprocess(
|
|
173
173
|
return process
|
174
174
|
|
175
175
|
|
176
|
-
def convert_step_to_command(
|
176
|
+
def convert_step_to_command(
|
177
|
+
step: dict[str, Any], key: str, quiet: bool = False
|
178
|
+
) -> list[str]:
|
177
179
|
"""
|
178
180
|
Converts a bundle upload or execution step to a command.
|
179
181
|
|
180
182
|
Args:
|
181
183
|
step: The step to convert.
|
182
184
|
key: The key to use for the remote file when downloading or uploading.
|
185
|
+
quiet: Whether to suppress `uv` output from the command.
|
183
186
|
|
184
187
|
Returns:
|
185
188
|
A list of strings representing the command to run the step.
|
@@ -187,6 +190,9 @@ def convert_step_to_command(step: dict[str, Any], key: str) -> list[str]:
|
|
187
190
|
# Start with uv run
|
188
191
|
command = ["uv", "run"]
|
189
192
|
|
193
|
+
if quiet:
|
194
|
+
command.append("--quiet")
|
195
|
+
|
190
196
|
step_keys = list(step.keys())
|
191
197
|
|
192
198
|
if len(step_keys) != 1:
|
{prefect_client-3.2.13 → prefect_client-3.2.15.dev7}/src/prefect/_internal/concurrency/services.py
RENAMED
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import abc
|
2
4
|
import asyncio
|
3
5
|
import concurrent.futures
|
@@ -375,6 +377,14 @@ class BatchedQueueService(QueueService[T]):
|
|
375
377
|
_max_batch_size: int
|
376
378
|
_min_interval: Optional[float] = None
|
377
379
|
|
380
|
+
@property
|
381
|
+
def min_interval(self) -> float | None:
|
382
|
+
return self.__class__._min_interval
|
383
|
+
|
384
|
+
@property
|
385
|
+
def max_batch_size(self) -> int:
|
386
|
+
return self.__class__._max_batch_size
|
387
|
+
|
378
388
|
async def _main_loop(self):
|
379
389
|
done = False
|
380
390
|
|
@@ -383,8 +393,8 @@ class BatchedQueueService(QueueService[T]):
|
|
383
393
|
batch_size = 0
|
384
394
|
|
385
395
|
# Pull items from the queue until we reach the batch size
|
386
|
-
deadline = get_deadline(self.
|
387
|
-
while batch_size < self.
|
396
|
+
deadline = get_deadline(self.min_interval)
|
397
|
+
while batch_size < self.max_batch_size:
|
388
398
|
try:
|
389
399
|
item = await self._queue_get_thread.submit(
|
390
400
|
create_call(self._queue.get, timeout=get_timeout(deadline))
|
@@ -401,7 +411,7 @@ class BatchedQueueService(QueueService[T]):
|
|
401
411
|
self,
|
402
412
|
item,
|
403
413
|
batch_size,
|
404
|
-
self.
|
414
|
+
self.max_batch_size,
|
405
415
|
)
|
406
416
|
except queue.Empty:
|
407
417
|
# Process the batch after `min_interval` even if it is smaller than
|
@@ -46,6 +46,9 @@ class FlowRunClient(BaseClient):
|
|
46
46
|
tags: "Iterable[str] | None" = None,
|
47
47
|
parent_task_run_id: "UUID | None" = None,
|
48
48
|
state: "State[R] | None" = None,
|
49
|
+
work_pool_name: str | None = None,
|
50
|
+
work_queue_name: str | None = None,
|
51
|
+
job_variables: dict[str, Any] | None = None,
|
49
52
|
) -> "FlowRun":
|
50
53
|
"""
|
51
54
|
Create a flow run for a flow.
|
@@ -59,7 +62,10 @@ class FlowRunClient(BaseClient):
|
|
59
62
|
parent_task_run_id: if a subflow run is being created, the placeholder task
|
60
63
|
run identifier in the parent flow
|
61
64
|
state: The initial state for the run. If not provided, defaults to
|
62
|
-
`
|
65
|
+
`Pending`.
|
66
|
+
work_pool_name: The name of the work pool to run the flow run in.
|
67
|
+
work_queue_name: The name of the work queue to place the flow run in.
|
68
|
+
job_variables: The job variables to use when setting up flow run infrastructure.
|
63
69
|
|
64
70
|
Raises:
|
65
71
|
httpx.RequestError: if the Prefect API does not successfully create a run for any reason
|
@@ -100,7 +106,16 @@ class FlowRunClient(BaseClient):
|
|
100
106
|
),
|
101
107
|
)
|
102
108
|
|
103
|
-
|
109
|
+
if work_pool_name is not None:
|
110
|
+
flow_run_create.work_pool_name = work_pool_name
|
111
|
+
if work_queue_name is not None:
|
112
|
+
flow_run_create.work_queue_name = work_queue_name
|
113
|
+
if job_variables is not None:
|
114
|
+
flow_run_create.job_variables = job_variables
|
115
|
+
|
116
|
+
flow_run_create_json = flow_run_create.model_dump(
|
117
|
+
mode="json", exclude_unset=True
|
118
|
+
)
|
104
119
|
response = self.request("POST", "/flow_runs/", json=flow_run_create_json)
|
105
120
|
|
106
121
|
flow_run = FlowRun.model_validate(response.json())
|
@@ -480,6 +495,9 @@ class FlowRunAsyncClient(BaseAsyncClient):
|
|
480
495
|
tags: "Iterable[str] | None" = None,
|
481
496
|
parent_task_run_id: "UUID | None" = None,
|
482
497
|
state: "State[R] | None" = None,
|
498
|
+
work_pool_name: str | None = None,
|
499
|
+
work_queue_name: str | None = None,
|
500
|
+
job_variables: dict[str, Any] | None = None,
|
483
501
|
) -> "FlowRun":
|
484
502
|
"""
|
485
503
|
Create a flow run for a flow.
|
@@ -493,7 +511,10 @@ class FlowRunAsyncClient(BaseAsyncClient):
|
|
493
511
|
parent_task_run_id: if a subflow run is being created, the placeholder task
|
494
512
|
run identifier in the parent flow
|
495
513
|
state: The initial state for the run. If not provided, defaults to
|
496
|
-
`
|
514
|
+
`Pending`.
|
515
|
+
work_pool_name: The name of the work pool to run the flow run in.
|
516
|
+
work_queue_name: The name of the work queue to place the flow run in.
|
517
|
+
job_variables: The job variables to use when setting up flow run infrastructure.
|
497
518
|
|
498
519
|
Raises:
|
499
520
|
httpx.RequestError: if the Prefect API does not successfully create a run for any reason
|
@@ -534,7 +555,16 @@ class FlowRunAsyncClient(BaseAsyncClient):
|
|
534
555
|
),
|
535
556
|
)
|
536
557
|
|
537
|
-
|
558
|
+
if work_pool_name is not None:
|
559
|
+
flow_run_create.work_pool_name = work_pool_name
|
560
|
+
if work_queue_name is not None:
|
561
|
+
flow_run_create.work_queue_name = work_queue_name
|
562
|
+
if job_variables is not None:
|
563
|
+
flow_run_create.job_variables = job_variables
|
564
|
+
|
565
|
+
flow_run_create_json = flow_run_create.model_dump(
|
566
|
+
mode="json", exclude_unset=True
|
567
|
+
)
|
538
568
|
response = await self.request("POST", "/flow_runs/", json=flow_run_create_json)
|
539
569
|
|
540
570
|
flow_run = FlowRun.model_validate(response.json())
|
@@ -23,6 +23,7 @@ from prefect._internal.schemas.validators import (
|
|
23
23
|
from prefect.client.schemas.objects import (
|
24
24
|
StateDetails,
|
25
25
|
StateType,
|
26
|
+
WorkPoolStorageConfiguration,
|
26
27
|
)
|
27
28
|
from prefect.client.schemas.schedules import (
|
28
29
|
SCHEDULE_TYPES,
|
@@ -38,6 +39,7 @@ from prefect.types import (
|
|
38
39
|
DateTime,
|
39
40
|
KeyValueLabelsField,
|
40
41
|
Name,
|
42
|
+
NameOrEmpty,
|
41
43
|
NonEmptyishName,
|
42
44
|
NonNegativeFloat,
|
43
45
|
NonNegativeInteger,
|
@@ -211,7 +213,7 @@ class DeploymentCreate(ActionBaseModel):
|
|
211
213
|
) -> Union[str, list[str]]:
|
212
214
|
return convert_to_strings(values)
|
213
215
|
|
214
|
-
name:
|
216
|
+
name: NameOrEmpty = Field(..., description="The name of the deployment.")
|
215
217
|
flow_id: UUID = Field(..., description="The ID of the flow to deploy.")
|
216
218
|
paused: Optional[bool] = Field(default=None)
|
217
219
|
schedules: list[DeploymentScheduleCreate] = Field(
|
@@ -443,6 +445,9 @@ class FlowRunCreate(ActionBaseModel):
|
|
443
445
|
idempotency_key: Optional[str] = Field(default=None)
|
444
446
|
|
445
447
|
labels: KeyValueLabelsField = Field(default_factory=dict)
|
448
|
+
work_pool_name: Optional[str] = Field(default=None)
|
449
|
+
work_queue_name: Optional[str] = Field(default=None)
|
450
|
+
job_variables: Optional[dict[str, Any]] = Field(default=None)
|
446
451
|
|
447
452
|
|
448
453
|
class DeploymentFlowRunCreate(ActionBaseModel):
|
@@ -684,6 +689,10 @@ class WorkPoolCreate(ActionBaseModel):
|
|
684
689
|
concurrency_limit: Optional[NonNegativeInteger] = Field(
|
685
690
|
default=None, description="A concurrency limit for the work pool."
|
686
691
|
)
|
692
|
+
storage_configuration: WorkPoolStorageConfiguration = Field(
|
693
|
+
default_factory=WorkPoolStorageConfiguration,
|
694
|
+
description="A storage configuration for the work pool.",
|
695
|
+
)
|
687
696
|
|
688
697
|
|
689
698
|
class WorkPoolUpdate(ActionBaseModel):
|
@@ -693,6 +702,10 @@ class WorkPoolUpdate(ActionBaseModel):
|
|
693
702
|
is_paused: Optional[bool] = Field(default=None)
|
694
703
|
base_job_template: Optional[dict[str, Any]] = Field(default=None)
|
695
704
|
concurrency_limit: Optional[int] = Field(default=None)
|
705
|
+
storage_configuration: Optional[WorkPoolStorageConfiguration] = Field(
|
706
|
+
default=None,
|
707
|
+
description="A storage configuration for the work pool.",
|
708
|
+
)
|
696
709
|
|
697
710
|
|
698
711
|
class WorkQueueCreate(ActionBaseModel):
|
@@ -1445,6 +1445,19 @@ class Agent(ObjectBaseModel):
|
|
1445
1445
|
)
|
1446
1446
|
|
1447
1447
|
|
1448
|
+
class WorkPoolStorageConfiguration(PrefectBaseModel):
|
1449
|
+
"""A work pool storage configuration"""
|
1450
|
+
|
1451
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
|
1452
|
+
|
1453
|
+
bundle_upload_step: Optional[dict[str, Any]] = Field(
|
1454
|
+
default=None, description="The bundle upload step for the work pool."
|
1455
|
+
)
|
1456
|
+
bundle_execution_step: Optional[dict[str, Any]] = Field(
|
1457
|
+
default=None, description="The bundle execution step for the work pool."
|
1458
|
+
)
|
1459
|
+
|
1460
|
+
|
1448
1461
|
class WorkPool(ObjectBaseModel):
|
1449
1462
|
"""An ORM representation of a work pool"""
|
1450
1463
|
|
@@ -1469,6 +1482,11 @@ class WorkPool(ObjectBaseModel):
|
|
1469
1482
|
default=None, description="The current status of the work pool."
|
1470
1483
|
)
|
1471
1484
|
|
1485
|
+
storage_configuration: WorkPoolStorageConfiguration = Field(
|
1486
|
+
default_factory=WorkPoolStorageConfiguration,
|
1487
|
+
description="The storage configuration for the work pool.",
|
1488
|
+
)
|
1489
|
+
|
1472
1490
|
# this required field has a default of None so that the custom validator
|
1473
1491
|
# below will be called and produce a more helpful error message. Because
|
1474
1492
|
# the field metadata is attached via an annotation, the default is hidden
|
@@ -676,15 +676,7 @@ class RunnerDeployment(BaseModel):
|
|
676
676
|
try:
|
677
677
|
module = importlib.import_module(mod_name)
|
678
678
|
flow_file = getattr(module, "__file__", None)
|
679
|
-
except ModuleNotFoundError
|
680
|
-
# 16458 adds an identifier to the module name, so checking
|
681
|
-
# for "__prefect_loader__" (2 underscores) will not match
|
682
|
-
if "__prefect_loader_" in str(exc):
|
683
|
-
raise ValueError(
|
684
|
-
"Cannot create a RunnerDeployment from a flow that has been"
|
685
|
-
" loaded from an entrypoint. To deploy a flow via"
|
686
|
-
" entrypoint, use RunnerDeployment.from_entrypoint instead."
|
687
|
-
)
|
679
|
+
except ModuleNotFoundError:
|
688
680
|
raise ValueError(no_file_location_error)
|
689
681
|
if not flow_file:
|
690
682
|
raise ValueError(no_file_location_error)
|
@@ -64,7 +64,8 @@ class DockerImage:
|
|
64
64
|
def build(self) -> None:
|
65
65
|
full_image_name = self.reference
|
66
66
|
build_kwargs = self.build_kwargs.copy()
|
67
|
-
|
67
|
+
if "context" not in build_kwargs:
|
68
|
+
build_kwargs["context"] = Path.cwd()
|
68
69
|
build_kwargs["tag"] = full_image_name
|
69
70
|
build_kwargs["pull"] = build_kwargs.get("pull", True)
|
70
71
|
|
@@ -707,7 +707,11 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
707
707
|
except Exception:
|
708
708
|
# regular exceptions are caught and re-raised to the user
|
709
709
|
raise
|
710
|
-
except (Abort, Pause):
|
710
|
+
except (Abort, Pause) as exc:
|
711
|
+
if getattr(exc, "state", None):
|
712
|
+
# we set attribute explicitly because
|
713
|
+
# internals will have already called the state change API
|
714
|
+
self.flow_run.state = exc.state
|
711
715
|
raise
|
712
716
|
except GeneratorExit:
|
713
717
|
# Do not capture generator exits as crashes
|
@@ -722,9 +726,7 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
722
726
|
repr(self.state) if PREFECT_DEBUG_MODE else str(self.state)
|
723
727
|
)
|
724
728
|
self.logger.log(
|
725
|
-
level=logging.INFO
|
726
|
-
if self.state.is_completed()
|
727
|
-
else logging.ERROR,
|
729
|
+
level=logging.INFO,
|
728
730
|
msg=f"Finished in state {display_state}",
|
729
731
|
)
|
730
732
|
|
@@ -1277,7 +1279,11 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
|
|
1277
1279
|
except Exception:
|
1278
1280
|
# regular exceptions are caught and re-raised to the user
|
1279
1281
|
raise
|
1280
|
-
except (Abort, Pause):
|
1282
|
+
except (Abort, Pause) as exc:
|
1283
|
+
if getattr(exc, "state", None):
|
1284
|
+
# we set attribute explicitly because
|
1285
|
+
# internals will have already called the state change API
|
1286
|
+
self.flow_run.state = exc.state
|
1281
1287
|
raise
|
1282
1288
|
except GeneratorExit:
|
1283
1289
|
# Do not capture generator exits as crashes
|
@@ -196,7 +196,7 @@ class Flow(Generic[P, R]):
|
|
196
196
|
# exactly in the @flow decorator
|
197
197
|
def __init__(
|
198
198
|
self,
|
199
|
-
fn: Callable[P, R],
|
199
|
+
fn: Callable[P, R] | "classmethod[Any, P, R]" | "staticmethod[P, R]",
|
200
200
|
name: Optional[str] = None,
|
201
201
|
version: Optional[str] = None,
|
202
202
|
flow_run_name: Optional[Union[Callable[[], str], str]] = None,
|
@@ -270,6 +270,13 @@ class Flow(Generic[P, R]):
|
|
270
270
|
" my_flow():\n\tpass"
|
271
271
|
)
|
272
272
|
|
273
|
+
if isinstance(fn, classmethod):
|
274
|
+
fn = cast(Callable[P, R], fn.__func__)
|
275
|
+
|
276
|
+
if isinstance(fn, staticmethod):
|
277
|
+
fn = cast(Callable[P, R], fn.__func__)
|
278
|
+
setattr(fn, "__prefect_static__", True)
|
279
|
+
|
273
280
|
if not callable(fn):
|
274
281
|
raise TypeError("'fn' must be callable")
|
275
282
|
|
@@ -396,16 +403,28 @@ class Flow(Generic[P, R]):
|
|
396
403
|
def ismethod(self) -> bool:
|
397
404
|
return hasattr(self.fn, "__prefect_self__")
|
398
405
|
|
406
|
+
@property
|
407
|
+
def isclassmethod(self) -> bool:
|
408
|
+
return hasattr(self.fn, "__prefect_cls__")
|
409
|
+
|
410
|
+
@property
|
411
|
+
def isstaticmethod(self) -> bool:
|
412
|
+
return getattr(self.fn, "__prefect_static__", False)
|
413
|
+
|
399
414
|
def __get__(self, instance: Any, owner: Any) -> "Flow[P, R]":
|
400
415
|
"""
|
401
|
-
Implement the descriptor protocol so that the flow can be used as an instance method.
|
416
|
+
Implement the descriptor protocol so that the flow can be used as an instance or class method.
|
402
417
|
When an instance method is loaded, this method is called with the "self" instance as
|
403
418
|
an argument. We return a copy of the flow with that instance bound to the flow's function.
|
404
419
|
"""
|
420
|
+
if self.isstaticmethod:
|
421
|
+
return self
|
405
422
|
|
406
|
-
#
|
423
|
+
# wrapped function is a classmethod
|
407
424
|
if instance is None:
|
408
|
-
|
425
|
+
bound_flow = copy(self)
|
426
|
+
setattr(bound_flow.fn, "__prefect_cls__", owner)
|
427
|
+
return bound_flow
|
409
428
|
|
410
429
|
# if the flow is being accessed on an instance, bind the instance to the __prefect_self__ attribute
|
411
430
|
# of the flow's function. This will allow it to be automatically added to the flow's parameters
|
@@ -636,6 +655,10 @@ class Flow(Generic[P, R]):
|
|
636
655
|
# do not serialize the bound self object
|
637
656
|
if self.ismethod and value is getattr(self.fn, "__prefect_self__", None):
|
638
657
|
continue
|
658
|
+
if self.isclassmethod and value is getattr(
|
659
|
+
self.fn, "__prefect_cls__", None
|
660
|
+
):
|
661
|
+
continue
|
639
662
|
if isinstance(value, (PrefectFuture, State)):
|
640
663
|
# Don't call jsonable_encoder() on a PrefectFuture or State to
|
641
664
|
# avoid triggering a __getitem__ call
|
@@ -1895,11 +1918,6 @@ class FlowDecorator:
|
|
1895
1918
|
>>> pass
|
1896
1919
|
"""
|
1897
1920
|
if __fn:
|
1898
|
-
if isinstance(__fn, (classmethod, staticmethod)):
|
1899
|
-
method_decorator = type(__fn).__name__
|
1900
|
-
raise TypeError(
|
1901
|
-
f"@{method_decorator} should be applied on top of @flow"
|
1902
|
-
)
|
1903
1921
|
return Flow(
|
1904
1922
|
fn=__fn,
|
1905
1923
|
name=name,
|
@@ -193,23 +193,31 @@ class MemoryLockManager(LockManager):
|
|
193
193
|
)
|
194
194
|
|
195
195
|
def wait_for_lock(self, key: str, timeout: Optional[float] = None) -> bool:
|
196
|
-
|
196
|
+
lock_info: _LockInfo | None = self._locks.get(key)
|
197
|
+
if lock_info is None:
|
198
|
+
return True
|
199
|
+
if lock_info["lock"].locked():
|
197
200
|
if timeout is not None:
|
198
|
-
lock_acquired = lock.acquire(timeout=timeout)
|
201
|
+
lock_acquired = lock_info["lock"].acquire(timeout=timeout)
|
199
202
|
else:
|
200
|
-
lock_acquired = lock.acquire()
|
203
|
+
lock_acquired = lock_info["lock"].acquire()
|
201
204
|
if lock_acquired:
|
202
|
-
lock.release()
|
205
|
+
lock_info["lock"].release()
|
203
206
|
return lock_acquired
|
204
207
|
return True
|
205
208
|
|
206
209
|
async def await_for_lock(self, key: str, timeout: Optional[float] = None) -> bool:
|
207
|
-
|
210
|
+
lock_info: _LockInfo | None = self._locks.get(key, None)
|
211
|
+
if lock_info is None:
|
212
|
+
return True
|
213
|
+
if lock_info["lock"].locked():
|
208
214
|
if timeout is not None:
|
209
|
-
lock_acquired = await asyncio.to_thread(
|
215
|
+
lock_acquired = await asyncio.to_thread(
|
216
|
+
lock_info["lock"].acquire, timeout=timeout
|
217
|
+
)
|
210
218
|
else:
|
211
|
-
lock_acquired = await asyncio.to_thread(lock.acquire)
|
219
|
+
lock_acquired = await asyncio.to_thread(lock_info["lock"].acquire)
|
212
220
|
if lock_acquired:
|
213
|
-
lock.release()
|
221
|
+
lock_info["lock"].release()
|
214
222
|
return lock_acquired
|
215
223
|
return True
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
import logging.config
|
3
5
|
import os
|
@@ -6,7 +8,7 @@ import string
|
|
6
8
|
import warnings
|
7
9
|
from functools import partial
|
8
10
|
from pathlib import Path
|
9
|
-
from typing import Any, Callable
|
11
|
+
from typing import Any, Callable
|
10
12
|
|
11
13
|
import yaml
|
12
14
|
|
@@ -21,7 +23,7 @@ from prefect.utilities.collections import dict_to_flatdict, flatdict_to_dict
|
|
21
23
|
DEFAULT_LOGGING_SETTINGS_PATH = Path(__file__).parent / "logging.yml"
|
22
24
|
|
23
25
|
# Stores the configuration used to setup logging in this Python process
|
24
|
-
PROCESS_LOGGING_CONFIG:
|
26
|
+
PROCESS_LOGGING_CONFIG: dict[str, Any] = {}
|
25
27
|
|
26
28
|
# Regex call to replace non-alphanumeric characters to '_' to create a valid env var
|
27
29
|
to_envvar: Callable[[str], str] = partial(re.sub, re.compile(r"[^0-9a-zA-Z]+"), "_")
|
@@ -60,7 +62,7 @@ def load_logging_config(path: Path) -> dict[str, Any]:
|
|
60
62
|
return flatdict_to_dict(flat_config)
|
61
63
|
|
62
64
|
|
63
|
-
def setup_logging(incremental:
|
65
|
+
def setup_logging(incremental: bool | None = None) -> dict[str, Any]:
|
64
66
|
"""
|
65
67
|
Sets up logging.
|
66
68
|
|
@@ -100,6 +102,6 @@ def setup_logging(incremental: Optional[bool] = None) -> dict[str, Any]:
|
|
100
102
|
for handler in extra_config.handlers:
|
101
103
|
logger.addHandler(handler)
|
102
104
|
|
103
|
-
PROCESS_LOGGING_CONFIG
|
105
|
+
PROCESS_LOGGING_CONFIG.update(config)
|
104
106
|
|
105
107
|
return config
|
@@ -78,7 +78,7 @@ class PrefectFormatter(logging.Formatter):
|
|
78
78
|
self,
|
79
79
|
format: str | None = None,
|
80
80
|
datefmt: str | None = None,
|
81
|
-
style:
|
81
|
+
style: Literal["%", "{", "$"] = "%",
|
82
82
|
validate: bool = True,
|
83
83
|
*,
|
84
84
|
defaults: dict[str, Any] | None = None,
|
@@ -93,8 +93,8 @@ class PrefectFormatter(logging.Formatter):
|
|
93
93
|
# See https://github.com/python/cpython/blob/c8c6113398ee9a7867fe9b08bc539cceb61e2aaa/Lib/logging/__init__.py#L546
|
94
94
|
# for implementation details
|
95
95
|
|
96
|
-
init_kwargs = {}
|
97
|
-
style_kwargs = {}
|
96
|
+
init_kwargs: dict[str, Any] = {}
|
97
|
+
style_kwargs: dict[str, Any] = {}
|
98
98
|
|
99
99
|
# defaults added in 3.10
|
100
100
|
if sys.version_info >= (3, 10):
|