prefect-client 3.4.1.dev3__tar.gz → 3.4.1.dev5__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.4.1.dev3 → prefect_client-3.4.1.dev5}/PKG-INFO +1 -1
- prefect_client-3.4.1.dev5/src/prefect/_build_info.py +5 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/bundles/__init__.py +1 -1
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/validators.py +0 -98
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/actions.py +13 -35
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/objects.py +14 -15
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/clients.py +4 -4
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flows.py +79 -28
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/runner.py +24 -16
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/__init__.py +23 -35
- prefect_client-3.4.1.dev5/src/prefect/types/names.py +139 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/dockerutils.py +18 -8
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/importtools.py +12 -4
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/base.py +32 -10
- prefect_client-3.4.1.dev3/src/prefect/_build_info.py +0 -5
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/.gitignore +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/LICENSE +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/README.md +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/pyproject.toml +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/__main__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/lineage.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/agent.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/automations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/base.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/context.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/engine.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/related.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/futures.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/main.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/plugins.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/py.typed +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/results.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/_observers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/submit.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/utils.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/schedules.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/serializers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/states.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/tasks.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/bootstrap.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/instrumentation.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/logging.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/processors.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/transactions.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/variables.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/utilities.py +0 -0
{prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/validators.py
RENAMED
@@ -10,7 +10,6 @@ from __future__ import annotations
|
|
10
10
|
|
11
11
|
import datetime
|
12
12
|
import os
|
13
|
-
import re
|
14
13
|
import urllib.parse
|
15
14
|
import warnings
|
16
15
|
from collections.abc import Iterable, Mapping, MutableMapping
|
@@ -36,59 +35,6 @@ M = TypeVar("M", bound=Mapping[str, Any])
|
|
36
35
|
MM = TypeVar("MM", bound=MutableMapping[str, Any])
|
37
36
|
|
38
37
|
|
39
|
-
LOWERCASE_LETTERS_NUMBERS_AND_DASHES_ONLY_REGEX = "^[a-z0-9-]*$"
|
40
|
-
LOWERCASE_LETTERS_NUMBERS_AND_UNDERSCORES_REGEX = "^[a-z0-9_]*$"
|
41
|
-
|
42
|
-
|
43
|
-
@overload
|
44
|
-
def raise_on_name_alphanumeric_dashes_only(
|
45
|
-
value: str, field_name: str = ...
|
46
|
-
) -> str: ...
|
47
|
-
|
48
|
-
|
49
|
-
@overload
|
50
|
-
def raise_on_name_alphanumeric_dashes_only(
|
51
|
-
value: None, field_name: str = ...
|
52
|
-
) -> None: ...
|
53
|
-
|
54
|
-
|
55
|
-
def raise_on_name_alphanumeric_dashes_only(
|
56
|
-
value: Optional[str], field_name: str = "value"
|
57
|
-
) -> Optional[str]:
|
58
|
-
if value is not None and not bool(
|
59
|
-
re.match(LOWERCASE_LETTERS_NUMBERS_AND_DASHES_ONLY_REGEX, value)
|
60
|
-
):
|
61
|
-
raise ValueError(
|
62
|
-
f"{field_name} must only contain lowercase letters, numbers, and dashes."
|
63
|
-
)
|
64
|
-
return value
|
65
|
-
|
66
|
-
|
67
|
-
@overload
|
68
|
-
def raise_on_name_alphanumeric_underscores_only(
|
69
|
-
value: str, field_name: str = ...
|
70
|
-
) -> str: ...
|
71
|
-
|
72
|
-
|
73
|
-
@overload
|
74
|
-
def raise_on_name_alphanumeric_underscores_only(
|
75
|
-
value: None, field_name: str = ...
|
76
|
-
) -> None: ...
|
77
|
-
|
78
|
-
|
79
|
-
def raise_on_name_alphanumeric_underscores_only(
|
80
|
-
value: Optional[str], field_name: str = "value"
|
81
|
-
) -> Optional[str]:
|
82
|
-
if value is not None and not re.match(
|
83
|
-
LOWERCASE_LETTERS_NUMBERS_AND_UNDERSCORES_REGEX, value
|
84
|
-
):
|
85
|
-
raise ValueError(
|
86
|
-
f"{field_name} must only contain lowercase letters, numbers, and"
|
87
|
-
" underscores."
|
88
|
-
)
|
89
|
-
return value
|
90
|
-
|
91
|
-
|
92
38
|
def validate_values_conform_to_schema(
|
93
39
|
values: Optional[Mapping[str, Any]],
|
94
40
|
schema: Optional[Mapping[str, Any]],
|
@@ -610,47 +556,3 @@ def validate_working_dir(v: Optional[Path | str]) -> Optional[Path]:
|
|
610
556
|
if isinstance(v, str):
|
611
557
|
return relative_path_to_current_platform(v)
|
612
558
|
return v
|
613
|
-
|
614
|
-
|
615
|
-
### UNCATEGORIZED VALIDATORS ###
|
616
|
-
|
617
|
-
# the above categories seem to be getting a bit unwieldy, so this is a temporary
|
618
|
-
# catch-all for validators until we organize these into files
|
619
|
-
|
620
|
-
|
621
|
-
@overload
|
622
|
-
def validate_block_document_name(value: str) -> str: ...
|
623
|
-
|
624
|
-
|
625
|
-
@overload
|
626
|
-
def validate_block_document_name(value: None) -> None: ...
|
627
|
-
|
628
|
-
|
629
|
-
def validate_block_document_name(value: Optional[str]) -> Optional[str]:
|
630
|
-
if value is not None:
|
631
|
-
raise_on_name_alphanumeric_dashes_only(value, field_name="Block document name")
|
632
|
-
return value
|
633
|
-
|
634
|
-
|
635
|
-
def validate_artifact_key(value: str) -> str:
|
636
|
-
raise_on_name_alphanumeric_dashes_only(value, field_name="Artifact key")
|
637
|
-
return value
|
638
|
-
|
639
|
-
|
640
|
-
@overload
|
641
|
-
def validate_variable_name(value: str) -> str: ...
|
642
|
-
|
643
|
-
|
644
|
-
@overload
|
645
|
-
def validate_variable_name(value: None) -> None: ...
|
646
|
-
|
647
|
-
|
648
|
-
def validate_variable_name(value: Optional[str]) -> Optional[str]:
|
649
|
-
if value is not None:
|
650
|
-
raise_on_name_alphanumeric_underscores_only(value, field_name="Variable name")
|
651
|
-
return value
|
652
|
-
|
653
|
-
|
654
|
-
def validate_block_type_slug(value: str):
|
655
|
-
raise_on_name_alphanumeric_dashes_only(value, field_name="Block type slug")
|
656
|
-
return value
|
{prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/actions.py
RENAMED
@@ -12,12 +12,8 @@ from prefect._internal.schemas.bases import ActionBaseModel
|
|
12
12
|
from prefect._internal.schemas.validators import (
|
13
13
|
convert_to_strings,
|
14
14
|
remove_old_deployment_fields,
|
15
|
-
validate_artifact_key,
|
16
|
-
validate_block_document_name,
|
17
|
-
validate_block_type_slug,
|
18
15
|
validate_name_present_on_nonanonymous_blocks,
|
19
16
|
validate_schedule_max_scheduled_runs,
|
20
|
-
validate_variable_name,
|
21
17
|
)
|
22
18
|
from prefect.client.schemas.objects import (
|
23
19
|
StateDetails,
|
@@ -34,7 +30,6 @@ from prefect.client.schemas.schedules import (
|
|
34
30
|
from prefect.schedules import Schedule
|
35
31
|
from prefect.settings import PREFECT_DEPLOYMENT_SCHEDULE_MAX_SCHEDULED_RUNS
|
36
32
|
from prefect.types import (
|
37
|
-
MAX_VARIABLE_NAME_LENGTH,
|
38
33
|
DateTime,
|
39
34
|
KeyValueLabelsField,
|
40
35
|
Name,
|
@@ -45,6 +40,12 @@ from prefect.types import (
|
|
45
40
|
PositiveInteger,
|
46
41
|
StrictVariableValue,
|
47
42
|
)
|
43
|
+
from prefect.types.names import (
|
44
|
+
ArtifactKey,
|
45
|
+
BlockDocumentName,
|
46
|
+
BlockTypeSlug,
|
47
|
+
VariableName,
|
48
|
+
)
|
48
49
|
from prefect.utilities.collections import visit_collection
|
49
50
|
from prefect.utilities.pydantic import get_class_fields_only
|
50
51
|
|
@@ -216,7 +217,7 @@ class DeploymentCreate(ActionBaseModel):
|
|
216
217
|
flow_id: UUID = Field(..., description="The ID of the flow to deploy.")
|
217
218
|
paused: Optional[bool] = Field(default=None)
|
218
219
|
schedules: list[DeploymentScheduleCreate] = Field(
|
219
|
-
default_factory=
|
220
|
+
default_factory=lambda: [],
|
220
221
|
description="A list of schedules for the deployment.",
|
221
222
|
)
|
222
223
|
concurrency_limit: Optional[int] = Field(
|
@@ -537,7 +538,7 @@ class SavedSearchCreate(ActionBaseModel):
|
|
537
538
|
|
538
539
|
name: str = Field(default=..., description="The name of the saved search.")
|
539
540
|
filters: list[objects.SavedSearchFilter] = Field(
|
540
|
-
default_factory=
|
541
|
+
default_factory=lambda: [], description="The filter set for the saved search."
|
541
542
|
)
|
542
543
|
|
543
544
|
|
@@ -585,7 +586,7 @@ class BlockTypeCreate(ActionBaseModel):
|
|
585
586
|
"""Data used by the Prefect REST API to create a block type."""
|
586
587
|
|
587
588
|
name: str = Field(default=..., description="A block type's name")
|
588
|
-
slug:
|
589
|
+
slug: BlockTypeSlug = Field(default=..., description="A block type's slug")
|
589
590
|
logo_url: Optional[objects.HttpUrl] = Field(
|
590
591
|
default=None, description="Web URL for the block type's logo"
|
591
592
|
)
|
@@ -601,9 +602,6 @@ class BlockTypeCreate(ActionBaseModel):
|
|
601
602
|
description="A code snippet demonstrating use of the corresponding block",
|
602
603
|
)
|
603
604
|
|
604
|
-
# validators
|
605
|
-
_validate_slug_format = field_validator("slug")(validate_block_type_slug)
|
606
|
-
|
607
605
|
|
608
606
|
class BlockTypeUpdate(ActionBaseModel):
|
609
607
|
"""Data used by the Prefect REST API to update a block type."""
|
@@ -638,7 +636,7 @@ class BlockSchemaCreate(ActionBaseModel):
|
|
638
636
|
class BlockDocumentCreate(ActionBaseModel):
|
639
637
|
"""Data used by the Prefect REST API to create a block document."""
|
640
638
|
|
641
|
-
name: Optional[
|
639
|
+
name: Optional[BlockDocumentName] = Field(
|
642
640
|
default=None, description="The name of the block document"
|
643
641
|
)
|
644
642
|
data: dict[str, Any] = Field(
|
@@ -658,8 +656,6 @@ class BlockDocumentCreate(ActionBaseModel):
|
|
658
656
|
),
|
659
657
|
)
|
660
658
|
|
661
|
-
_validate_name_format = field_validator("name")(validate_block_document_name)
|
662
|
-
|
663
659
|
@model_validator(mode="before")
|
664
660
|
def validate_name_is_present_if_not_anonymous(
|
665
661
|
cls, values: dict[str, Any]
|
@@ -814,7 +810,7 @@ class WorkQueueUpdate(ActionBaseModel):
|
|
814
810
|
class ArtifactCreate(ActionBaseModel):
|
815
811
|
"""Data used by the Prefect REST API to create an artifact."""
|
816
812
|
|
817
|
-
key: Optional[
|
813
|
+
key: Optional[ArtifactKey] = Field(default=None)
|
818
814
|
type: Optional[str] = Field(default=None)
|
819
815
|
description: Optional[str] = Field(default=None)
|
820
816
|
data: Optional[Union[dict[str, Any], Any]] = Field(default=None)
|
@@ -822,8 +818,6 @@ class ArtifactCreate(ActionBaseModel):
|
|
822
818
|
flow_run_id: Optional[UUID] = Field(default=None)
|
823
819
|
task_run_id: Optional[UUID] = Field(default=None)
|
824
820
|
|
825
|
-
_validate_artifact_format = field_validator("key")(validate_artifact_key)
|
826
|
-
|
827
821
|
|
828
822
|
class ArtifactUpdate(ActionBaseModel):
|
829
823
|
"""Data used by the Prefect REST API to update an artifact."""
|
@@ -836,12 +830,7 @@ class ArtifactUpdate(ActionBaseModel):
|
|
836
830
|
class VariableCreate(ActionBaseModel):
|
837
831
|
"""Data used by the Prefect REST API to create a Variable."""
|
838
832
|
|
839
|
-
name:
|
840
|
-
default=...,
|
841
|
-
description="The name of the variable",
|
842
|
-
examples=["my_variable"],
|
843
|
-
max_length=MAX_VARIABLE_NAME_LENGTH,
|
844
|
-
)
|
833
|
+
name: VariableName = Field(default=...)
|
845
834
|
value: StrictVariableValue = Field(
|
846
835
|
default=...,
|
847
836
|
description="The value of the variable",
|
@@ -849,19 +838,11 @@ class VariableCreate(ActionBaseModel):
|
|
849
838
|
)
|
850
839
|
tags: Optional[list[str]] = Field(default=None)
|
851
840
|
|
852
|
-
# validators
|
853
|
-
_validate_name_format = field_validator("name")(validate_variable_name)
|
854
|
-
|
855
841
|
|
856
842
|
class VariableUpdate(ActionBaseModel):
|
857
843
|
"""Data used by the Prefect REST API to update a Variable."""
|
858
844
|
|
859
|
-
name: Optional[
|
860
|
-
default=None,
|
861
|
-
description="The name of the variable",
|
862
|
-
examples=["my_variable"],
|
863
|
-
max_length=MAX_VARIABLE_NAME_LENGTH,
|
864
|
-
)
|
845
|
+
name: Optional[VariableName] = Field(default=None)
|
865
846
|
value: StrictVariableValue = Field(
|
866
847
|
default=None,
|
867
848
|
description="The value of the variable",
|
@@ -869,9 +850,6 @@ class VariableUpdate(ActionBaseModel):
|
|
869
850
|
)
|
870
851
|
tags: Optional[list[str]] = Field(default=None)
|
871
852
|
|
872
|
-
# validators
|
873
|
-
_validate_name_format = field_validator("name")(validate_variable_name)
|
874
|
-
|
875
853
|
|
876
854
|
class GlobalConcurrencyLimitCreate(ActionBaseModel):
|
877
855
|
"""Data used by the Prefect REST API to create a global concurrency limit."""
|
{prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/objects.py
RENAMED
@@ -19,6 +19,7 @@ from uuid import UUID, uuid4
|
|
19
19
|
|
20
20
|
import orjson
|
21
21
|
from pydantic import (
|
22
|
+
AfterValidator,
|
22
23
|
ConfigDict,
|
23
24
|
Discriminator,
|
24
25
|
Field,
|
@@ -40,9 +41,7 @@ from prefect._internal.schemas.fields import CreatedBy, UpdatedBy
|
|
40
41
|
from prefect._internal.schemas.validators import (
|
41
42
|
get_or_create_run_name,
|
42
43
|
list_length_50_or_less,
|
43
|
-
raise_on_name_alphanumeric_dashes_only,
|
44
44
|
set_run_policy_deprecated_fields,
|
45
|
-
validate_block_document_name,
|
46
45
|
validate_default_queue_id_not_none,
|
47
46
|
validate_max_metadata_length,
|
48
47
|
validate_name_present_on_nonanonymous_blocks,
|
@@ -61,6 +60,10 @@ from prefect.types import (
|
|
61
60
|
StrictVariableValue,
|
62
61
|
)
|
63
62
|
from prefect.types._datetime import DateTime, now
|
63
|
+
from prefect.types.names import (
|
64
|
+
BlockDocumentName,
|
65
|
+
raise_on_name_alphanumeric_dashes_only,
|
66
|
+
)
|
64
67
|
from prefect.utilities.asyncutils import run_coro_as_sync
|
65
68
|
from prefect.utilities.collections import AutoEnum, visit_collection
|
66
69
|
from prefect.utilities.names import generate_slug
|
@@ -1000,7 +1003,7 @@ class BlockSchema(ObjectBaseModel):
|
|
1000
1003
|
class BlockDocument(ObjectBaseModel):
|
1001
1004
|
"""An ORM representation of a block document."""
|
1002
1005
|
|
1003
|
-
name: Optional[
|
1006
|
+
name: Optional[BlockDocumentName] = Field(
|
1004
1007
|
default=None,
|
1005
1008
|
description=(
|
1006
1009
|
"The block document's name. Not required for anonymous block documents."
|
@@ -1029,8 +1032,6 @@ class BlockDocument(ObjectBaseModel):
|
|
1029
1032
|
),
|
1030
1033
|
)
|
1031
1034
|
|
1032
|
-
_validate_name_format = field_validator("name")(validate_block_document_name)
|
1033
|
-
|
1034
1035
|
@model_validator(mode="before")
|
1035
1036
|
@classmethod
|
1036
1037
|
def validate_name_is_present_if_not_anonymous(
|
@@ -1133,7 +1134,8 @@ class Deployment(ObjectBaseModel):
|
|
1133
1134
|
default=None, description="The concurrency limit for the deployment."
|
1134
1135
|
)
|
1135
1136
|
schedules: list[DeploymentSchedule] = Field(
|
1136
|
-
default_factory=
|
1137
|
+
default_factory=lambda: [],
|
1138
|
+
description="A list of schedules for the deployment.",
|
1137
1139
|
)
|
1138
1140
|
job_variables: dict[str, Any] = Field(
|
1139
1141
|
default_factory=dict,
|
@@ -1219,7 +1221,7 @@ class ConcurrencyLimit(ObjectBaseModel):
|
|
1219
1221
|
)
|
1220
1222
|
concurrency_limit: int = Field(default=..., description="The concurrency limit.")
|
1221
1223
|
active_slots: list[UUID] = Field(
|
1222
|
-
default_factory=
|
1224
|
+
default_factory=lambda: [],
|
1223
1225
|
description="A list of active run ids using a concurrency slot",
|
1224
1226
|
)
|
1225
1227
|
|
@@ -1300,7 +1302,8 @@ class SavedSearch(ObjectBaseModel):
|
|
1300
1302
|
|
1301
1303
|
name: str = Field(default=..., description="The name of the saved search.")
|
1302
1304
|
filters: list[SavedSearchFilter] = Field(
|
1303
|
-
default_factory=
|
1305
|
+
default_factory=lambda: [],
|
1306
|
+
description="The filter set for the saved search.",
|
1304
1307
|
)
|
1305
1308
|
|
1306
1309
|
|
@@ -1644,7 +1647,9 @@ class Variable(ObjectBaseModel):
|
|
1644
1647
|
|
1645
1648
|
class FlowRunInput(ObjectBaseModel):
|
1646
1649
|
flow_run_id: UUID = Field(description="The flow run ID associated with the input.")
|
1647
|
-
key: str = Field(
|
1650
|
+
key: Annotated[str, AfterValidator(raise_on_name_alphanumeric_dashes_only)] = Field(
|
1651
|
+
description="The key of the input."
|
1652
|
+
)
|
1648
1653
|
value: str = Field(description="The value of the input.")
|
1649
1654
|
sender: Optional[str] = Field(default=None, description="The sender of the input.")
|
1650
1655
|
|
@@ -1658,12 +1663,6 @@ class FlowRunInput(ObjectBaseModel):
|
|
1658
1663
|
"""
|
1659
1664
|
return orjson.loads(self.value)
|
1660
1665
|
|
1661
|
-
@field_validator("key", check_fields=False)
|
1662
|
-
@classmethod
|
1663
|
-
def validate_name_characters(cls, v: str) -> str:
|
1664
|
-
raise_on_name_alphanumeric_dashes_only(v)
|
1665
|
-
return v
|
1666
|
-
|
1667
1666
|
|
1668
1667
|
class GlobalConcurrencyLimit(ObjectBaseModel):
|
1669
1668
|
"""An ORM representation of a global concurrency limit"""
|
@@ -251,8 +251,8 @@ class EventsClient(abc.ABC):
|
|
251
251
|
|
252
252
|
async def __aexit__(
|
253
253
|
self,
|
254
|
-
exc_type: Optional[Type[
|
255
|
-
exc_val: Optional[
|
254
|
+
exc_type: Optional[Type[BaseException]],
|
255
|
+
exc_val: Optional[BaseException],
|
256
256
|
exc_tb: Optional[TracebackType],
|
257
257
|
) -> None:
|
258
258
|
del self._in_context
|
@@ -360,8 +360,8 @@ class PrefectEventsClient(EventsClient):
|
|
360
360
|
|
361
361
|
async def __aexit__(
|
362
362
|
self,
|
363
|
-
exc_type: Optional[Type[
|
364
|
-
exc_val: Optional[
|
363
|
+
exc_type: Optional[Type[BaseException]],
|
364
|
+
exc_val: Optional[BaseException],
|
365
365
|
exc_tb: Optional[TracebackType],
|
366
366
|
) -> None:
|
367
367
|
self._websocket = None
|
@@ -27,6 +27,7 @@ from typing import (
|
|
27
27
|
Coroutine,
|
28
28
|
Generic,
|
29
29
|
Iterable,
|
30
|
+
List,
|
30
31
|
NoReturn,
|
31
32
|
Optional,
|
32
33
|
Protocol,
|
@@ -2309,8 +2310,9 @@ def load_flow_from_entrypoint(
|
|
2309
2310
|
Extract a flow object from a script at an entrypoint by running all of the code in the file.
|
2310
2311
|
|
2311
2312
|
Args:
|
2312
|
-
entrypoint: a string in the format `<path_to_script>:<flow_func_name>`
|
2313
|
-
|
2313
|
+
entrypoint: a string in the format `<path_to_script>:<flow_func_name>`
|
2314
|
+
or a string in the format `<path_to_script>:<class_name>.<flow_method_name>`
|
2315
|
+
or a module path to a flow function
|
2314
2316
|
use_placeholder_flow: if True, use a placeholder Flow object if the actual flow object
|
2315
2317
|
cannot be loaded from the entrypoint (e.g. dependencies are missing)
|
2316
2318
|
|
@@ -2700,26 +2702,55 @@ def load_placeholder_flow(entrypoint: str, raises: Exception) -> Flow[P, Any]:
|
|
2700
2702
|
|
2701
2703
|
def safe_load_flow_from_entrypoint(entrypoint: str) -> Optional[Flow[P, Any]]:
|
2702
2704
|
"""
|
2703
|
-
|
2705
|
+
Safely load a Prefect flow from an entrypoint string. Returns None if loading fails.
|
2704
2706
|
|
2705
2707
|
Args:
|
2706
|
-
entrypoint:
|
2707
|
-
|
2708
|
+
entrypoint (str): A string identifying the flow to load. Can be in one of the following formats:
|
2709
|
+
- `<path_to_script>:<flow_func_name>`
|
2710
|
+
- `<path_to_script>:<class_name>.<flow_method_name>`
|
2711
|
+
- `<module_path>.<flow_func_name>`
|
2712
|
+
|
2713
|
+
Returns:
|
2714
|
+
Optional[Flow]: The loaded Prefect flow object, or None if loading fails due to errors
|
2715
|
+
(e.g. unresolved dependencies, syntax errors, or missing objects).
|
2708
2716
|
"""
|
2709
|
-
|
2710
|
-
|
2711
|
-
if ":" in entrypoint
|
2712
|
-
path = entrypoint.rsplit(":")[0]
|
2717
|
+
func_or_cls_def, source_code, parts = _entrypoint_definition_and_source(entrypoint)
|
2718
|
+
|
2719
|
+
path = entrypoint.rsplit(":", maxsplit=1)[0] if ":" in entrypoint else None
|
2713
2720
|
namespace = safe_load_namespace(source_code, filepath=path)
|
2714
|
-
if func_def.name in namespace:
|
2715
|
-
return namespace[func_def.name]
|
2716
|
-
else:
|
2717
|
-
# If the function is not in the namespace, if may be due to missing dependencies
|
2718
|
-
# for the function. We will attempt to compile each annotation and default value
|
2719
|
-
# and remove them from the function definition to see if the function can be
|
2720
|
-
# compiled without them.
|
2721
2721
|
|
2722
|
-
|
2722
|
+
if parts[0] not in namespace:
|
2723
|
+
# If the object is not in the namespace, it may be due to missing dependencies
|
2724
|
+
# in annotations or default values. We will attempt to sanitize them by removing
|
2725
|
+
# anything that cannot be compiled, and then recompile the function or class.
|
2726
|
+
if isinstance(func_or_cls_def, (ast.FunctionDef, ast.AsyncFunctionDef)):
|
2727
|
+
return _sanitize_and_load_flow(func_or_cls_def, namespace)
|
2728
|
+
elif (
|
2729
|
+
isinstance(func_or_cls_def, ast.ClassDef)
|
2730
|
+
and len(parts) >= 2
|
2731
|
+
and func_or_cls_def.name == parts[0]
|
2732
|
+
):
|
2733
|
+
method_name = parts[1]
|
2734
|
+
method_def = next(
|
2735
|
+
(
|
2736
|
+
stmt
|
2737
|
+
for stmt in func_or_cls_def.body
|
2738
|
+
if isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef))
|
2739
|
+
and stmt.name == method_name
|
2740
|
+
),
|
2741
|
+
None,
|
2742
|
+
)
|
2743
|
+
if method_def is not None:
|
2744
|
+
return _sanitize_and_load_flow(method_def, namespace)
|
2745
|
+
else:
|
2746
|
+
return None
|
2747
|
+
|
2748
|
+
obj = namespace.get(parts[0])
|
2749
|
+
for part in parts[1:]:
|
2750
|
+
obj = getattr(obj, part, None)
|
2751
|
+
if obj is None:
|
2752
|
+
return None
|
2753
|
+
return obj
|
2723
2754
|
|
2724
2755
|
|
2725
2756
|
def _sanitize_and_load_flow(
|
@@ -2853,7 +2884,7 @@ def load_flow_arguments_from_entrypoint(
|
|
2853
2884
|
or a module path to a flow function
|
2854
2885
|
"""
|
2855
2886
|
|
2856
|
-
func_def, source_code = _entrypoint_definition_and_source(entrypoint)
|
2887
|
+
func_def, source_code, _ = _entrypoint_definition_and_source(entrypoint)
|
2857
2888
|
path = None
|
2858
2889
|
if ":" in entrypoint:
|
2859
2890
|
path = entrypoint.rsplit(":")[0]
|
@@ -2930,26 +2961,45 @@ def is_entrypoint_async(entrypoint: str) -> bool:
|
|
2930
2961
|
Returns:
|
2931
2962
|
True if the function is asynchronous, False otherwise.
|
2932
2963
|
"""
|
2933
|
-
func_def, _ = _entrypoint_definition_and_source(entrypoint)
|
2964
|
+
func_def, _, _ = _entrypoint_definition_and_source(entrypoint)
|
2934
2965
|
return isinstance(func_def, ast.AsyncFunctionDef)
|
2935
2966
|
|
2936
2967
|
|
2937
2968
|
def _entrypoint_definition_and_source(
|
2938
2969
|
entrypoint: str,
|
2939
|
-
) -> Tuple[Union[ast.FunctionDef, ast.AsyncFunctionDef], str]:
|
2970
|
+
) -> Tuple[Union[ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef], str, List[str]]:
|
2971
|
+
"""
|
2972
|
+
Resolves and parses the source definition of a given entrypoint.
|
2973
|
+
|
2974
|
+
The entrypoint can be provided in one of the following formats:
|
2975
|
+
- '<path_to_script>:<flow_func_name>'
|
2976
|
+
- '<path_to_script>:<class_name>.<flow_method_name>'
|
2977
|
+
- '<module_path.to.flow_function>'
|
2978
|
+
|
2979
|
+
Returns:
|
2980
|
+
A tuple containing:
|
2981
|
+
- The AST node (FunctionDef, AsyncFunctionDef, or ClassDef) of the base object.
|
2982
|
+
- The full source code of the file or module as a string.
|
2983
|
+
- A list of attribute access parts from the object path (e.g., ['MyFlowClass', 'run']).
|
2984
|
+
|
2985
|
+
Raises:
|
2986
|
+
ValueError: If the module or target object cannot be found.
|
2987
|
+
"""
|
2940
2988
|
if ":" in entrypoint:
|
2941
|
-
|
2942
|
-
path, func_name = entrypoint.rsplit(":", maxsplit=1)
|
2989
|
+
path, object_path = entrypoint.rsplit(":", maxsplit=1)
|
2943
2990
|
source_code = Path(path).read_text()
|
2944
2991
|
else:
|
2945
|
-
path,
|
2992
|
+
path, object_path = entrypoint.rsplit(".", maxsplit=1)
|
2946
2993
|
spec = importlib.util.find_spec(path)
|
2947
2994
|
if not spec or not spec.origin:
|
2948
2995
|
raise ValueError(f"Could not find module {path!r}")
|
2949
2996
|
source_code = Path(spec.origin).read_text()
|
2950
2997
|
|
2951
2998
|
parsed_code = ast.parse(source_code)
|
2952
|
-
|
2999
|
+
parts = object_path.split(".")
|
3000
|
+
base_name = parts[0]
|
3001
|
+
|
3002
|
+
base_def = next(
|
2953
3003
|
(
|
2954
3004
|
node
|
2955
3005
|
for node in ast.walk(parsed_code)
|
@@ -2958,14 +3008,15 @@ def _entrypoint_definition_and_source(
|
|
2958
3008
|
(
|
2959
3009
|
ast.FunctionDef,
|
2960
3010
|
ast.AsyncFunctionDef,
|
3011
|
+
ast.ClassDef, # flow can be staticmethod/classmethod
|
2961
3012
|
),
|
2962
3013
|
)
|
2963
|
-
and node.name ==
|
3014
|
+
and node.name == base_name
|
2964
3015
|
),
|
2965
3016
|
None,
|
2966
3017
|
)
|
2967
3018
|
|
2968
|
-
if not
|
2969
|
-
raise ValueError(f"Could not find
|
3019
|
+
if not base_def:
|
3020
|
+
raise ValueError(f"Could not find object {base_name!r} in {path!r}")
|
2970
3021
|
|
2971
|
-
return
|
3022
|
+
return base_def, source_code, parts
|
@@ -89,9 +89,9 @@ from prefect.client.schemas.objects import (
|
|
89
89
|
)
|
90
90
|
from prefect.client.schemas.objects import Flow as APIFlow
|
91
91
|
from prefect.events import DeploymentTriggerTypes, TriggerTypes
|
92
|
+
from prefect.events.clients import EventsClient, get_events_client
|
92
93
|
from prefect.events.related import tags_as_related_resources
|
93
|
-
from prefect.events.schemas.events import RelatedResource
|
94
|
-
from prefect.events.utilities import emit_event
|
94
|
+
from prefect.events.schemas.events import Event, RelatedResource, Resource
|
95
95
|
from prefect.exceptions import Abort, ObjectNotFound
|
96
96
|
from prefect.flows import Flow, FlowStateHook, load_flow_from_flow_run
|
97
97
|
from prefect.logging.loggers import PrefectLogAdapter, flow_run_logger, get_logger
|
@@ -224,6 +224,7 @@ class Runner:
|
|
224
224
|
if self.heartbeat_seconds is not None and self.heartbeat_seconds < 30:
|
225
225
|
raise ValueError("Heartbeat must be 30 seconds or greater.")
|
226
226
|
self._heartbeat_task: asyncio.Task[None] | None = None
|
227
|
+
self._events_client: EventsClient = get_events_client(checkpoint_every=1)
|
227
228
|
|
228
229
|
self._exit_stack = AsyncExitStack()
|
229
230
|
self._limiter: anyio.CapacityLimiter | None = None
|
@@ -1005,7 +1006,7 @@ class Runner:
|
|
1005
1006
|
)
|
1006
1007
|
|
1007
1008
|
flow, deployment = await self._get_flow_and_deployment(flow_run)
|
1008
|
-
self._emit_flow_run_cancelled_event(
|
1009
|
+
await self._emit_flow_run_cancelled_event(
|
1009
1010
|
flow_run=flow_run, flow=flow, deployment=deployment
|
1010
1011
|
)
|
1011
1012
|
run_logger.info(f"Cancelled flow run '{flow_run.name}'!")
|
@@ -1064,14 +1065,18 @@ class Runner:
|
|
1064
1065
|
related = [RelatedResource.model_validate(r) for r in related]
|
1065
1066
|
related += tags_as_related_resources(set(tags))
|
1066
1067
|
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1068
|
+
await self._events_client.emit(
|
1069
|
+
Event(
|
1070
|
+
event="prefect.flow-run.heartbeat",
|
1071
|
+
resource=Resource(
|
1072
|
+
{
|
1073
|
+
"prefect.resource.id": f"prefect.flow-run.{flow_run.id}",
|
1074
|
+
"prefect.resource.name": flow_run.name,
|
1075
|
+
"prefect.version": __version__,
|
1076
|
+
}
|
1077
|
+
),
|
1078
|
+
related=related,
|
1079
|
+
)
|
1075
1080
|
)
|
1076
1081
|
|
1077
1082
|
def _event_resource(self):
|
@@ -1083,7 +1088,7 @@ class Runner:
|
|
1083
1088
|
"prefect.version": __version__,
|
1084
1089
|
}
|
1085
1090
|
|
1086
|
-
def _emit_flow_run_cancelled_event(
|
1091
|
+
async def _emit_flow_run_cancelled_event(
|
1087
1092
|
self,
|
1088
1093
|
flow_run: "FlowRun",
|
1089
1094
|
flow: "Optional[APIFlow]",
|
@@ -1118,10 +1123,12 @@ class Runner:
|
|
1118
1123
|
related = [RelatedResource.model_validate(r) for r in related]
|
1119
1124
|
related += tags_as_related_resources(set(tags))
|
1120
1125
|
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1126
|
+
await self._events_client.emit(
|
1127
|
+
Event(
|
1128
|
+
event="prefect.runner.cancelled-flow-run",
|
1129
|
+
resource=Resource(self._event_resource()),
|
1130
|
+
related=related,
|
1131
|
+
)
|
1125
1132
|
)
|
1126
1133
|
self._logger.debug(f"Emitted flow run heartbeat event for {flow_run.id}")
|
1127
1134
|
|
@@ -1502,6 +1509,7 @@ class Runner:
|
|
1502
1509
|
)
|
1503
1510
|
)
|
1504
1511
|
await self._exit_stack.enter_async_context(self._client)
|
1512
|
+
await self._exit_stack.enter_async_context(self._events_client)
|
1505
1513
|
|
1506
1514
|
if not hasattr(self, "_runs_task_group") or not self._runs_task_group:
|
1507
1515
|
self._runs_task_group: anyio.abc.TaskGroup = anyio.create_task_group()
|