prefect-client 3.3.5.dev3__tar.gz → 3.3.6.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/PKG-INFO +2 -2
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/pyproject.toml +1 -1
- prefect_client-3.3.6.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/bundles.py +14 -2
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/cache_policies.py +4 -4
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/context.py +3 -1
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/context.py +1 -3
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/flows.py +139 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/runner.py +8 -3
- prefect_client-3.3.6.dev1/src/prefect/utilities/_ast.py +117 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/base.py +166 -7
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/process.py +60 -3
- prefect_client-3.3.5.dev3/src/prefect/_build_info.py +0 -5
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/.gitignore +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/LICENSE +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/README.md +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/lineage.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/base.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/futures.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/submit.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runner/utils.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/flow_run_notification_policies.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/tasks.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/bootstrap.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/instrumentation.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/logging.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/processors.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/telemetry/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/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.3.
|
3
|
+
Version: 3.3.6.dev1
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
|
6
6
|
Project-URL: Documentation, https://docs.prefect.io
|
@@ -47,7 +47,7 @@ Requires-Dist: prometheus-client>=0.20.0
|
|
47
47
|
Requires-Dist: pydantic!=2.10.0,<3.0.0,>=2.9
|
48
48
|
Requires-Dist: pydantic-core<3.0.0,>=2.12.0
|
49
49
|
Requires-Dist: pydantic-extra-types<3.0.0,>=2.8.2
|
50
|
-
Requires-Dist: pydantic-settings
|
50
|
+
Requires-Dist: pydantic-settings!=2.9.0,<3.0.0,>2.2.1
|
51
51
|
Requires-Dist: python-dateutil<3.0.0,>=2.8.2
|
52
52
|
Requires-Dist: python-slugify<9.0,>=5.0
|
53
53
|
Requires-Dist: python-socks[asyncio]<3.0,>=2.5.3
|
@@ -51,7 +51,7 @@ dependencies = [
|
|
51
51
|
"pydantic>=2.9,<3.0.0,!=2.10.0",
|
52
52
|
"pydantic_core>=2.12.0,<3.0.0",
|
53
53
|
"pydantic_extra_types>=2.8.2,<3.0.0",
|
54
|
-
"pydantic_settings>2.2.1",
|
54
|
+
"pydantic_settings>2.2.1,<3.0.0,!=2.9.0",
|
55
55
|
"python-dateutil>=2.8.2,<3.0.0",
|
56
56
|
"python-slugify>=5.0,<9.0",
|
57
57
|
"python-socks[asyncio]>=2.5.3,<3.0",
|
{prefect_client-3.3.5.dev3 → prefect_client-3.3.6.dev1}/src/prefect/_experimental/bundles.py
RENAMED
@@ -8,6 +8,7 @@ import multiprocessing.context
|
|
8
8
|
import os
|
9
9
|
import subprocess
|
10
10
|
import sys
|
11
|
+
from pathlib import Path
|
11
12
|
from typing import Any, TypedDict
|
12
13
|
|
13
14
|
import cloudpickle
|
@@ -99,7 +100,9 @@ def extract_flow_from_bundle(bundle: SerializedBundle) -> Flow[Any, Any]:
|
|
99
100
|
|
100
101
|
|
101
102
|
def _extract_and_run_flow(
|
102
|
-
bundle: SerializedBundle,
|
103
|
+
bundle: SerializedBundle,
|
104
|
+
cwd: Path | str | None = None,
|
105
|
+
env: dict[str, Any] | None = None,
|
103
106
|
) -> None:
|
104
107
|
"""
|
105
108
|
Extracts a flow from a bundle and runs it.
|
@@ -108,6 +111,7 @@ def _extract_and_run_flow(
|
|
108
111
|
|
109
112
|
Args:
|
110
113
|
bundle: The bundle to extract and run.
|
114
|
+
cwd: The working directory to use when running the flow.
|
111
115
|
env: The environment to use when running the flow.
|
112
116
|
"""
|
113
117
|
|
@@ -120,6 +124,9 @@ def _extract_and_run_flow(
|
|
120
124
|
context = _deserialize_bundle_object(bundle["context"])
|
121
125
|
flow_run = FlowRun.model_validate(bundle["flow_run"])
|
122
126
|
|
127
|
+
if cwd:
|
128
|
+
os.chdir(cwd)
|
129
|
+
|
123
130
|
with SettingsContext(
|
124
131
|
profile=settings_context.profile,
|
125
132
|
settings=Settings(),
|
@@ -138,6 +145,8 @@ def _extract_and_run_flow(
|
|
138
145
|
|
139
146
|
def execute_bundle_in_subprocess(
|
140
147
|
bundle: SerializedBundle,
|
148
|
+
env: dict[str, Any] | None = None,
|
149
|
+
cwd: Path | str | None = None,
|
141
150
|
) -> multiprocessing.context.SpawnProcess:
|
142
151
|
"""
|
143
152
|
Executes a bundle in a subprocess.
|
@@ -150,6 +159,7 @@ def execute_bundle_in_subprocess(
|
|
150
159
|
"""
|
151
160
|
|
152
161
|
ctx = multiprocessing.get_context("spawn")
|
162
|
+
env = env or {}
|
153
163
|
|
154
164
|
# Install dependencies if necessary
|
155
165
|
if dependencies := bundle.get("dependencies"):
|
@@ -164,7 +174,9 @@ def execute_bundle_in_subprocess(
|
|
164
174
|
kwargs={
|
165
175
|
"bundle": bundle,
|
166
176
|
"env": get_current_settings().to_environment_variables(exclude_unset=True)
|
167
|
-
| os.environ
|
177
|
+
| os.environ
|
178
|
+
| env,
|
179
|
+
"cwd": cwd,
|
168
180
|
},
|
169
181
|
)
|
170
182
|
|
@@ -33,9 +33,9 @@ def _register_stable_transforms() -> None:
|
|
33
33
|
so that cache keys that utilize them are deterministic across invocations.
|
34
34
|
"""
|
35
35
|
try:
|
36
|
-
import pandas as pd
|
36
|
+
import pandas as pd # pyright: ignore
|
37
37
|
|
38
|
-
STABLE_TRANSFORMS[pd.DataFrame] = lambda df: [
|
38
|
+
STABLE_TRANSFORMS[pd.DataFrame] = lambda df: [ # pyright: ignore
|
39
39
|
df[col] for col in sorted(df.columns)
|
40
40
|
]
|
41
41
|
except (ImportError, ModuleNotFoundError):
|
@@ -183,7 +183,7 @@ class CompoundCachePolicy(CachePolicy):
|
|
183
183
|
Any keys that return `None` will be ignored.
|
184
184
|
"""
|
185
185
|
|
186
|
-
policies: list[CachePolicy] = field(default_factory=
|
186
|
+
policies: list[CachePolicy] = field(default_factory=lambda: [])
|
187
187
|
|
188
188
|
def __post_init__(self) -> None:
|
189
189
|
# flatten any CompoundCachePolicies
|
@@ -349,7 +349,7 @@ class Inputs(CachePolicy):
|
|
349
349
|
Policy that computes a cache key based on a hash of the runtime inputs provided to the task..
|
350
350
|
"""
|
351
351
|
|
352
|
-
exclude: list[str] = field(default_factory=
|
352
|
+
exclude: list[str] = field(default_factory=lambda: [])
|
353
353
|
|
354
354
|
def compute_key(
|
355
355
|
self,
|
@@ -13,7 +13,9 @@ class ConcurrencyContext(ContextModel):
|
|
13
13
|
# Track the slots that have been acquired but were not able to be released
|
14
14
|
# due to cancellation or some other error. These slots are released when
|
15
15
|
# the context manager exits.
|
16
|
-
cleanup_slots: list[tuple[list[str], int, float]] = Field(
|
16
|
+
cleanup_slots: list[tuple[list[str], int, float]] = Field(
|
17
|
+
default_factory=lambda: []
|
18
|
+
)
|
17
19
|
|
18
20
|
def __exit__(self, *exc_info: Any) -> None:
|
19
21
|
if self.cleanup_slots:
|
@@ -18,8 +18,6 @@ from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, TypeVar, Un
|
|
18
18
|
from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
|
19
19
|
from typing_extensions import Self
|
20
20
|
|
21
|
-
import prefect.logging
|
22
|
-
import prefect.logging.configuration
|
23
21
|
import prefect.settings
|
24
22
|
import prefect.types._datetime
|
25
23
|
from prefect._internal.compatibility.migration import getattr_migration
|
@@ -128,7 +126,7 @@ class ContextModel(BaseModel):
|
|
128
126
|
def __init__(self, **kwargs: Any) -> None: ...
|
129
127
|
|
130
128
|
# The context variable for storing data must be defined by the child class
|
131
|
-
__var__: ClassVar[ContextVar[
|
129
|
+
__var__: ClassVar[ContextVar[Any]]
|
132
130
|
_token: Optional[Token[Self]] = PrivateAttr(None)
|
133
131
|
model_config: ClassVar[ConfigDict] = ConfigDict(
|
134
132
|
arbitrary_types_allowed=True,
|
@@ -40,6 +40,7 @@ from typing import (
|
|
40
40
|
from uuid import UUID
|
41
41
|
|
42
42
|
import pydantic
|
43
|
+
from exceptiongroup import BaseExceptionGroup, ExceptionGroup
|
43
44
|
from pydantic.v1 import BaseModel as V1BaseModel
|
44
45
|
from pydantic.v1.decorator import ValidatedFunction as V1ValidatedFunction
|
45
46
|
from pydantic.v1.errors import ConfigError # TODO
|
@@ -105,6 +106,9 @@ from ._internal.pydantic.v2_validated_func import (
|
|
105
106
|
V2ValidatedFunction as ValidatedFunction,
|
106
107
|
)
|
107
108
|
|
109
|
+
if TYPE_CHECKING:
|
110
|
+
from prefect.workers.base import BaseWorker
|
111
|
+
|
108
112
|
T = TypeVar("T") # Generic type var for capturing the inner return type of async funcs
|
109
113
|
R = TypeVar("R") # The return type of the user's function
|
110
114
|
P = ParamSpec("P") # The parameters of the flow
|
@@ -1984,6 +1988,141 @@ class FlowDecorator:
|
|
1984
1988
|
flow: FlowDecorator = FlowDecorator()
|
1985
1989
|
|
1986
1990
|
|
1991
|
+
class InfrastructureBoundFlow(Flow[P, R]):
|
1992
|
+
"""
|
1993
|
+
EXPERIMENTAL: This class is experimental and may be removed or changed in future
|
1994
|
+
releases.
|
1995
|
+
|
1996
|
+
A flow that is bound to running on a specific infrastructure.
|
1997
|
+
|
1998
|
+
Attributes:
|
1999
|
+
work_pool: The name of the work pool to run the flow on. The base job
|
2000
|
+
configuration of the work pool will determine the configuration of the
|
2001
|
+
infrastructure the flow will run on.
|
2002
|
+
job_variables: Infrastructure configuration that will override the base job
|
2003
|
+
configuration of the work pool.
|
2004
|
+
worker_cls: The class of the worker to use to spin up infrastructure and submit
|
2005
|
+
the flow to it.
|
2006
|
+
"""
|
2007
|
+
|
2008
|
+
def __init__(
|
2009
|
+
self,
|
2010
|
+
*args: Any,
|
2011
|
+
work_pool: str,
|
2012
|
+
job_variables: dict[str, Any],
|
2013
|
+
worker_cls: type["BaseWorker[Any, Any, Any]"],
|
2014
|
+
**kwargs: Any,
|
2015
|
+
):
|
2016
|
+
super().__init__(*args, **kwargs)
|
2017
|
+
self.work_pool = work_pool
|
2018
|
+
self.job_variables = job_variables
|
2019
|
+
self.worker_cls = worker_cls
|
2020
|
+
|
2021
|
+
@overload
|
2022
|
+
def __call__(self: "Flow[P, NoReturn]", *args: P.args, **kwargs: P.kwargs) -> None:
|
2023
|
+
# `NoReturn` matches if a type can't be inferred for the function which stops a
|
2024
|
+
# sync function from matching the `Coroutine` overload
|
2025
|
+
...
|
2026
|
+
|
2027
|
+
@overload
|
2028
|
+
def __call__(
|
2029
|
+
self: "Flow[P, Coroutine[Any, Any, T]]",
|
2030
|
+
*args: P.args,
|
2031
|
+
**kwargs: P.kwargs,
|
2032
|
+
) -> Coroutine[Any, Any, T]: ...
|
2033
|
+
|
2034
|
+
@overload
|
2035
|
+
def __call__(
|
2036
|
+
self: "Flow[P, T]",
|
2037
|
+
*args: P.args,
|
2038
|
+
**kwargs: P.kwargs,
|
2039
|
+
) -> T: ...
|
2040
|
+
|
2041
|
+
@overload
|
2042
|
+
def __call__(
|
2043
|
+
self: "Flow[P, Coroutine[Any, Any, T]]",
|
2044
|
+
*args: P.args,
|
2045
|
+
return_state: Literal[True],
|
2046
|
+
**kwargs: P.kwargs,
|
2047
|
+
) -> Awaitable[State[T]]: ...
|
2048
|
+
|
2049
|
+
@overload
|
2050
|
+
def __call__(
|
2051
|
+
self: "Flow[P, T]",
|
2052
|
+
*args: P.args,
|
2053
|
+
return_state: Literal[True],
|
2054
|
+
**kwargs: P.kwargs,
|
2055
|
+
) -> State[T]: ...
|
2056
|
+
|
2057
|
+
def __call__(
|
2058
|
+
self,
|
2059
|
+
*args: "P.args",
|
2060
|
+
return_state: bool = False,
|
2061
|
+
wait_for: Optional[Iterable[PrefectFuture[Any]]] = None,
|
2062
|
+
**kwargs: "P.kwargs",
|
2063
|
+
):
|
2064
|
+
async def modified_call(
|
2065
|
+
*args: P.args,
|
2066
|
+
return_state: bool = False,
|
2067
|
+
# TODO: Handle wait_for once we have an asynchronous way to wait for futures
|
2068
|
+
# We should wait locally for futures to resolve before spinning up
|
2069
|
+
# infrastructure.
|
2070
|
+
wait_for: Optional[Iterable[PrefectFuture[Any]]] = None,
|
2071
|
+
**kwargs: P.kwargs,
|
2072
|
+
) -> R | State[R]:
|
2073
|
+
try:
|
2074
|
+
async with self.worker_cls(work_pool_name=self.work_pool) as worker:
|
2075
|
+
parameters = get_call_parameters(self, args, kwargs)
|
2076
|
+
future = await worker.submit(
|
2077
|
+
flow=self,
|
2078
|
+
parameters=parameters,
|
2079
|
+
job_variables=self.job_variables,
|
2080
|
+
)
|
2081
|
+
if return_state:
|
2082
|
+
await future.wait_async()
|
2083
|
+
return future.state
|
2084
|
+
return await future.aresult()
|
2085
|
+
except (ExceptionGroup, BaseExceptionGroup) as exc:
|
2086
|
+
# For less verbose tracebacks
|
2087
|
+
exceptions = exc.exceptions
|
2088
|
+
if len(exceptions) == 1:
|
2089
|
+
raise exceptions[0] from None
|
2090
|
+
else:
|
2091
|
+
raise
|
2092
|
+
|
2093
|
+
if inspect.iscoroutinefunction(self.fn):
|
2094
|
+
return modified_call(
|
2095
|
+
*args, return_state=return_state, wait_for=wait_for, **kwargs
|
2096
|
+
)
|
2097
|
+
else:
|
2098
|
+
return run_coro_as_sync(
|
2099
|
+
modified_call(
|
2100
|
+
*args,
|
2101
|
+
return_state=return_state,
|
2102
|
+
wait_for=wait_for,
|
2103
|
+
**kwargs,
|
2104
|
+
)
|
2105
|
+
)
|
2106
|
+
|
2107
|
+
|
2108
|
+
def bind_flow_to_infrastructure(
|
2109
|
+
flow: Flow[P, R],
|
2110
|
+
work_pool: str,
|
2111
|
+
worker_cls: type["BaseWorker[Any, Any, Any]"],
|
2112
|
+
job_variables: dict[str, Any] | None = None,
|
2113
|
+
) -> InfrastructureBoundFlow[P, R]:
|
2114
|
+
new = InfrastructureBoundFlow[P, R](
|
2115
|
+
flow.fn,
|
2116
|
+
work_pool=work_pool,
|
2117
|
+
job_variables=job_variables or {},
|
2118
|
+
worker_cls=worker_cls,
|
2119
|
+
)
|
2120
|
+
# Copy all attributes from the original flow
|
2121
|
+
for attr, value in flow.__dict__.items():
|
2122
|
+
setattr(new, attr, value)
|
2123
|
+
return new
|
2124
|
+
|
2125
|
+
|
1987
2126
|
def _raise_on_name_with_banned_characters(name: Optional[str]) -> Optional[str]:
|
1988
2127
|
"""
|
1989
2128
|
Raise an InvalidNameError if the given name contains any invalid
|
@@ -636,7 +636,12 @@ class Runner:
|
|
636
636
|
|
637
637
|
return process
|
638
638
|
|
639
|
-
async def execute_bundle(
|
639
|
+
async def execute_bundle(
|
640
|
+
self,
|
641
|
+
bundle: SerializedBundle,
|
642
|
+
cwd: Path | str | None = None,
|
643
|
+
env: dict[str, str | None] | None = None,
|
644
|
+
) -> None:
|
640
645
|
"""
|
641
646
|
Executes a bundle in a subprocess.
|
642
647
|
"""
|
@@ -651,7 +656,7 @@ class Runner:
|
|
651
656
|
if not self._acquire_limit_slot(flow_run.id):
|
652
657
|
return
|
653
658
|
|
654
|
-
process = execute_bundle_in_subprocess(bundle)
|
659
|
+
process = execute_bundle_in_subprocess(bundle, cwd=cwd, env=env)
|
655
660
|
|
656
661
|
if process.pid is None:
|
657
662
|
# This shouldn't happen because `execute_bundle_in_subprocess` starts the process
|
@@ -776,7 +781,7 @@ class Runner:
|
|
776
781
|
if command is None:
|
777
782
|
runner_command = [get_sys_executable(), "-m", "prefect.engine"]
|
778
783
|
else:
|
779
|
-
runner_command = shlex.split(command)
|
784
|
+
runner_command = shlex.split(command, posix=(os.name != "nt"))
|
780
785
|
|
781
786
|
flow_run_logger = self._get_flow_run_logger(flow_run)
|
782
787
|
|
@@ -0,0 +1,117 @@
|
|
1
|
+
import ast
|
2
|
+
import math
|
3
|
+
from typing import TYPE_CHECKING, Literal
|
4
|
+
|
5
|
+
import anyio
|
6
|
+
from typing_extensions import TypeAlias
|
7
|
+
|
8
|
+
from prefect.logging.loggers import get_logger
|
9
|
+
from prefect.settings import get_current_settings
|
10
|
+
from prefect.utilities.asyncutils import LazySemaphore
|
11
|
+
from prefect.utilities.filesystem import get_open_file_limit
|
12
|
+
|
13
|
+
# Only allow half of the open file limit to be open at once to allow for other
|
14
|
+
# actors to open files.
|
15
|
+
OPEN_FILE_SEMAPHORE = LazySemaphore(lambda: math.floor(get_open_file_limit() * 0.5))
|
16
|
+
|
17
|
+
# this potentially could be a TypedDict, but you
|
18
|
+
# need some way to convince the type checker that
|
19
|
+
# Literal["flow_name", "task_name"] are being provided
|
20
|
+
DecoratedFnMetadata: TypeAlias = dict[str, str]
|
21
|
+
|
22
|
+
|
23
|
+
async def find_prefect_decorated_functions_in_file(
|
24
|
+
path: anyio.Path, decorator_module: str, decorator_name: Literal["flow", "task"]
|
25
|
+
) -> list[DecoratedFnMetadata]:
|
26
|
+
logger = get_logger()
|
27
|
+
decorator_name_key = f"{decorator_name}_name"
|
28
|
+
decorated_functions: list[DecoratedFnMetadata] = []
|
29
|
+
|
30
|
+
async with OPEN_FILE_SEMAPHORE:
|
31
|
+
try:
|
32
|
+
async with await anyio.open_file(path) as f:
|
33
|
+
try:
|
34
|
+
tree = ast.parse(await f.read())
|
35
|
+
except SyntaxError:
|
36
|
+
if get_current_settings().debug_mode:
|
37
|
+
logger.debug(
|
38
|
+
f"Could not parse {path} as a Python file. Skipping."
|
39
|
+
)
|
40
|
+
return decorated_functions
|
41
|
+
except Exception as exc:
|
42
|
+
if get_current_settings().debug_mode:
|
43
|
+
logger.debug(f"Could not open {path}: {exc}. Skipping.")
|
44
|
+
return decorated_functions
|
45
|
+
|
46
|
+
for node in ast.walk(tree):
|
47
|
+
if isinstance(
|
48
|
+
node,
|
49
|
+
(
|
50
|
+
ast.FunctionDef,
|
51
|
+
ast.AsyncFunctionDef,
|
52
|
+
),
|
53
|
+
):
|
54
|
+
for decorator in node.decorator_list:
|
55
|
+
# handles @decorator_name
|
56
|
+
is_name_match = (
|
57
|
+
isinstance(decorator, ast.Name) and decorator.id == decorator_name
|
58
|
+
)
|
59
|
+
# handles @decorator_name()
|
60
|
+
is_func_name_match = (
|
61
|
+
isinstance(decorator, ast.Call)
|
62
|
+
and isinstance(decorator.func, ast.Name)
|
63
|
+
and decorator.func.id == decorator_name
|
64
|
+
)
|
65
|
+
# handles @decorator_module.decorator_name
|
66
|
+
is_module_attribute_match = (
|
67
|
+
isinstance(decorator, ast.Attribute)
|
68
|
+
and isinstance(decorator.value, ast.Name)
|
69
|
+
and decorator.value.id == decorator_module
|
70
|
+
and decorator.attr == decorator_name
|
71
|
+
)
|
72
|
+
# handles @decorator_module.decorator_name()
|
73
|
+
is_module_attribute_func_match = (
|
74
|
+
isinstance(decorator, ast.Call)
|
75
|
+
and isinstance(decorator.func, ast.Attribute)
|
76
|
+
and decorator.func.attr == decorator_name
|
77
|
+
and isinstance(decorator.func.value, ast.Name)
|
78
|
+
and decorator.func.value.id == decorator_module
|
79
|
+
)
|
80
|
+
if is_name_match or is_module_attribute_match:
|
81
|
+
decorated_functions.append(
|
82
|
+
{
|
83
|
+
decorator_name_key: node.name,
|
84
|
+
"function_name": node.name,
|
85
|
+
"filepath": str(path),
|
86
|
+
}
|
87
|
+
)
|
88
|
+
if is_func_name_match or is_module_attribute_func_match:
|
89
|
+
name_kwarg_node = None
|
90
|
+
if TYPE_CHECKING:
|
91
|
+
assert isinstance(decorator, ast.Call)
|
92
|
+
for kw in decorator.keywords:
|
93
|
+
if kw.arg == "name":
|
94
|
+
name_kwarg_node = kw
|
95
|
+
break
|
96
|
+
if name_kwarg_node is not None and isinstance(
|
97
|
+
name_kwarg_node.value, ast.Constant
|
98
|
+
):
|
99
|
+
decorated_fn_name = name_kwarg_node.value.value
|
100
|
+
else:
|
101
|
+
decorated_fn_name = node.name
|
102
|
+
decorated_functions.append(
|
103
|
+
{
|
104
|
+
decorator_name_key: decorated_fn_name,
|
105
|
+
"function_name": node.name,
|
106
|
+
"filepath": str(path),
|
107
|
+
}
|
108
|
+
)
|
109
|
+
return decorated_functions
|
110
|
+
|
111
|
+
|
112
|
+
async def find_flow_functions_in_file(path: anyio.Path) -> list[DecoratedFnMetadata]:
|
113
|
+
return await find_prefect_decorated_functions_in_file(path, "prefect", "flow")
|
114
|
+
|
115
|
+
|
116
|
+
async def find_task_functions_in_file(path: anyio.Path) -> list[DecoratedFnMetadata]:
|
117
|
+
return await find_prefect_decorated_functions_in_file(path, "prefect", "task")
|