prefect-client 3.4.5.dev4__tar.gz → 3.4.5.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.5.dev4 → prefect_client-3.4.5.dev5}/PKG-INFO +1 -1
- prefect_client-3.4.5.dev5/src/prefect/_build_info.py +5 -0
- prefect_client-3.4.5.dev5/src/prefect/assets/__init__.py +4 -0
- prefect_client-3.4.5.dev5/src/prefect/assets/core.py +71 -0
- prefect_client-3.4.5.dev5/src/prefect/assets/materialize.py +42 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/context.py +226 -2
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/runner.py +2 -2
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/server.py +2 -2
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/submit.py +2 -2
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/events.py +1 -1
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/task_workers.py +1 -1
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/task_engine.py +73 -25
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/tasks.py +100 -3
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/types/__init__.py +2 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/types/names.py +23 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/engine.py +15 -3
- prefect_client-3.4.5.dev4/src/prefect/_build_info.py +0 -5
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/.gitignore +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/LICENSE +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/README.md +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/pyproject.toml +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/__main__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/lineage.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/agent.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/automations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/engine.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/related.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/flows.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/futures.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/main.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/plugins.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/py.typed +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/results.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/_observers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runner/utils.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/schedules.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/serializers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/states.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/bootstrap.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/instrumentation.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/logging.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/processors.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/telemetry/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/transactions.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/variables.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/workers/utilities.py +0 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Any, ClassVar, Optional
|
4
|
+
|
5
|
+
from pydantic import ConfigDict, Field
|
6
|
+
|
7
|
+
from prefect._internal.schemas.bases import PrefectBaseModel
|
8
|
+
from prefect.types import URILike
|
9
|
+
|
10
|
+
|
11
|
+
class AssetProperties(PrefectBaseModel):
|
12
|
+
"""
|
13
|
+
Metadata properties to configure on an Asset
|
14
|
+
"""
|
15
|
+
|
16
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True)
|
17
|
+
|
18
|
+
name: Optional[str] = Field(
|
19
|
+
default=None, description="Human readable name of the Asset."
|
20
|
+
)
|
21
|
+
url: Optional[str] = Field(
|
22
|
+
default=None, description="Visitable url to view the Asset."
|
23
|
+
)
|
24
|
+
description: Optional[str] = Field(
|
25
|
+
default=None, description="Description of the Asset."
|
26
|
+
)
|
27
|
+
owners: Optional[list[str]] = Field(
|
28
|
+
default=None, description="Owners of the Asset."
|
29
|
+
)
|
30
|
+
|
31
|
+
|
32
|
+
class Asset(PrefectBaseModel):
|
33
|
+
"""
|
34
|
+
Assets are objects that represent materialized data,
|
35
|
+
providing a way to track lineage and dependencies.
|
36
|
+
"""
|
37
|
+
|
38
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True)
|
39
|
+
|
40
|
+
key: URILike
|
41
|
+
properties: Optional[AssetProperties] = Field(
|
42
|
+
default=None,
|
43
|
+
description="Properties of the asset. "
|
44
|
+
"Setting this will overwrite properties of a known asset.",
|
45
|
+
)
|
46
|
+
|
47
|
+
def __repr__(self) -> str:
|
48
|
+
return f"Asset(key={self.key!r})"
|
49
|
+
|
50
|
+
def add_metadata(self, metadata: dict[str, Any]) -> None:
|
51
|
+
from prefect.context import AssetContext
|
52
|
+
|
53
|
+
asset_ctx = AssetContext.get()
|
54
|
+
if not asset_ctx:
|
55
|
+
raise RuntimeError(
|
56
|
+
"Unable add Asset metadata when not inside of an AssetContext"
|
57
|
+
)
|
58
|
+
|
59
|
+
asset_ctx.add_asset_metadata(self.key, metadata)
|
60
|
+
|
61
|
+
|
62
|
+
def add_asset_metadata(asset_key: str, metadata: dict[str, Any]) -> None:
|
63
|
+
from prefect.context import AssetContext
|
64
|
+
|
65
|
+
asset_ctx = AssetContext.get()
|
66
|
+
if not asset_ctx:
|
67
|
+
raise RuntimeError(
|
68
|
+
"Unable to call `add_asset_metadata` when not inside of an AssetContext"
|
69
|
+
)
|
70
|
+
|
71
|
+
asset_ctx.add_asset_metadata(asset_key, metadata)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Callable, TypeVar, Union
|
4
|
+
|
5
|
+
from typing_extensions import ParamSpec, Unpack
|
6
|
+
|
7
|
+
from .core import Asset
|
8
|
+
|
9
|
+
T = TypeVar("T")
|
10
|
+
P = ParamSpec("P")
|
11
|
+
R = TypeVar("R")
|
12
|
+
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from prefect.tasks import MaterializingTask, TaskOptions
|
15
|
+
|
16
|
+
|
17
|
+
def materialize(
|
18
|
+
*assets: Union[str, Asset],
|
19
|
+
by: str | None = None,
|
20
|
+
**task_kwargs: Unpack[TaskOptions],
|
21
|
+
) -> Callable[[Callable[P, R]], MaterializingTask[P, R]]:
|
22
|
+
"""
|
23
|
+
Decorator for materializing assets.
|
24
|
+
|
25
|
+
Args:
|
26
|
+
*assets: Assets to materialize
|
27
|
+
by: An optional tool that is ultimately responsible for materializing the asset e.g. "dbt" or "spark"
|
28
|
+
**task_kwargs: Additional task configuration
|
29
|
+
"""
|
30
|
+
if not assets:
|
31
|
+
raise TypeError(
|
32
|
+
"materialize requires at least one asset argument, e.g. `@materialize(asset)`"
|
33
|
+
)
|
34
|
+
|
35
|
+
from prefect.tasks import MaterializingTask
|
36
|
+
|
37
|
+
def decorator(fn: Callable[P, R]) -> MaterializingTask[P, R]:
|
38
|
+
return MaterializingTask(
|
39
|
+
fn=fn, assets=assets, materialized_by=by, **task_kwargs
|
40
|
+
)
|
41
|
+
|
42
|
+
return decorator
|
@@ -7,13 +7,23 @@ For more user-accessible information about the current run, see [`prefect.runtim
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
import asyncio
|
10
|
+
import json
|
10
11
|
import os
|
11
12
|
import sys
|
12
13
|
import warnings
|
13
14
|
from collections.abc import AsyncGenerator, Generator, Mapping
|
14
15
|
from contextlib import ExitStack, asynccontextmanager, contextmanager
|
15
16
|
from contextvars import ContextVar, Token
|
16
|
-
from typing import
|
17
|
+
from typing import (
|
18
|
+
TYPE_CHECKING,
|
19
|
+
Any,
|
20
|
+
Callable,
|
21
|
+
ClassVar,
|
22
|
+
Optional,
|
23
|
+
TypeVar,
|
24
|
+
Union,
|
25
|
+
)
|
26
|
+
from uuid import UUID
|
17
27
|
|
18
28
|
from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
|
19
29
|
from typing_extensions import Self
|
@@ -21,6 +31,7 @@ from typing_extensions import Self
|
|
21
31
|
import prefect.settings
|
22
32
|
import prefect.types._datetime
|
23
33
|
from prefect._internal.compatibility.migration import getattr_migration
|
34
|
+
from prefect.assets import Asset
|
24
35
|
from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_client
|
25
36
|
from prefect.client.schemas import FlowRun, TaskRun
|
26
37
|
from prefect.events.worker import EventsWorker
|
@@ -48,9 +59,15 @@ if TYPE_CHECKING:
|
|
48
59
|
from prefect.tasks import Task
|
49
60
|
|
50
61
|
|
51
|
-
def serialize_context(
|
62
|
+
def serialize_context(
|
63
|
+
asset_ctx_kwargs: Union[dict[str, Any], None] = None,
|
64
|
+
) -> dict[str, Any]:
|
52
65
|
"""
|
53
66
|
Serialize the current context for use in a remote execution environment.
|
67
|
+
|
68
|
+
Optionally provide asset_ctx_kwargs to create new AssetContext, that will be used
|
69
|
+
in the remote execution environment. This is useful for TaskRunners, who rely on creating the
|
70
|
+
task run in the remote environment.
|
54
71
|
"""
|
55
72
|
flow_run_context = EngineContext.get()
|
56
73
|
task_run_context = TaskRunContext.get()
|
@@ -62,6 +79,11 @@ def serialize_context() -> dict[str, Any]:
|
|
62
79
|
"task_run_context": task_run_context.serialize() if task_run_context else {},
|
63
80
|
"tags_context": tags_context.serialize() if tags_context else {},
|
64
81
|
"settings_context": settings_context.serialize() if settings_context else {},
|
82
|
+
"asset_context": AssetContext.from_task_and_inputs(
|
83
|
+
**asset_ctx_kwargs
|
84
|
+
).serialize()
|
85
|
+
if asset_ctx_kwargs
|
86
|
+
else {},
|
65
87
|
}
|
66
88
|
|
67
89
|
|
@@ -112,6 +134,9 @@ def hydrated_context(
|
|
112
134
|
# Set up tags context
|
113
135
|
if tags_context := serialized_context.get("tags_context"):
|
114
136
|
stack.enter_context(tags(*tags_context["current_tags"]))
|
137
|
+
# Set up asset context
|
138
|
+
if asset_context := serialized_context.get("asset_context"):
|
139
|
+
stack.enter_context(AssetContext(**asset_context))
|
115
140
|
yield
|
116
141
|
|
117
142
|
|
@@ -373,6 +398,10 @@ class EngineContext(RunContext):
|
|
373
398
|
# Holds the ID of the object returned by the task run and task run state
|
374
399
|
task_run_results: dict[int, State] = Field(default_factory=dict)
|
375
400
|
|
401
|
+
# Tracking information needed to track asset linage between
|
402
|
+
# tasks and materialization
|
403
|
+
task_run_assets: dict[UUID, list[Asset]] = Field(default_factory=dict)
|
404
|
+
|
376
405
|
# Events worker to emit events
|
377
406
|
events: Optional[EventsWorker] = None
|
378
407
|
|
@@ -443,6 +472,201 @@ class TaskRunContext(RunContext):
|
|
443
472
|
)
|
444
473
|
|
445
474
|
|
475
|
+
class AssetContext(ContextModel):
|
476
|
+
"""
|
477
|
+
The asset context for a materializing task run. Contains all asset-related information needed
|
478
|
+
for asset event emission and downstream asset dependency propagation.
|
479
|
+
|
480
|
+
Attributes:
|
481
|
+
direct_asset_dependencies: Assets that this task directly depends on (from task.asset_deps)
|
482
|
+
downstream_assets: Assets that this task will create/materialize (from MaterializingTask.assets)
|
483
|
+
upstream_assets: Assets from upstream task dependencies
|
484
|
+
materialized_by: Tool that materialized the assets (from MaterializingTask.materialized_by)
|
485
|
+
task_run_id: ID of the associated task run
|
486
|
+
materialization_metadata: Metadata for materialized assets
|
487
|
+
"""
|
488
|
+
|
489
|
+
direct_asset_dependencies: list[Asset] = Field(default_factory=list)
|
490
|
+
downstream_assets: list[Asset] = Field(default_factory=list)
|
491
|
+
upstream_assets: list[Asset] = Field(default_factory=list)
|
492
|
+
materialized_by: Optional[str] = None
|
493
|
+
task_run_id: Optional[UUID] = None
|
494
|
+
materialization_metadata: dict[str, dict[str, Any]] = Field(default_factory=dict)
|
495
|
+
|
496
|
+
__var__: ClassVar[ContextVar[Self]] = ContextVar("asset_context")
|
497
|
+
|
498
|
+
@classmethod
|
499
|
+
def from_task_and_inputs(
|
500
|
+
cls,
|
501
|
+
task: "Task[Any, Any]",
|
502
|
+
task_run_id: UUID,
|
503
|
+
task_inputs: Optional[dict[str, set[Any]]] = None,
|
504
|
+
) -> "AssetContext":
|
505
|
+
"""
|
506
|
+
Create an AssetContext from a task and its resolved inputs.
|
507
|
+
|
508
|
+
Args:
|
509
|
+
task: The task instance
|
510
|
+
task_run_id: The task run ID
|
511
|
+
task_inputs: The resolved task inputs (TaskRunResult objects)
|
512
|
+
|
513
|
+
Returns:
|
514
|
+
Configured AssetContext
|
515
|
+
"""
|
516
|
+
from prefect.client.schemas import TaskRunResult
|
517
|
+
from prefect.tasks import MaterializingTask
|
518
|
+
|
519
|
+
upstream_assets: list[Asset] = []
|
520
|
+
|
521
|
+
# Get upstream assets from engine context instead of TaskRunResult.assets
|
522
|
+
flow_ctx = FlowRunContext.get()
|
523
|
+
if task_inputs and flow_ctx:
|
524
|
+
for inputs in task_inputs.values():
|
525
|
+
for task_input in inputs:
|
526
|
+
if isinstance(task_input, TaskRunResult):
|
527
|
+
# Look up assets in the engine context
|
528
|
+
task_assets = flow_ctx.task_run_assets.get(task_input.id)
|
529
|
+
if task_assets:
|
530
|
+
upstream_assets.extend(task_assets)
|
531
|
+
|
532
|
+
ctx = cls(
|
533
|
+
direct_asset_dependencies=task.asset_deps[:] if task.asset_deps else [],
|
534
|
+
downstream_assets=task.assets[:]
|
535
|
+
if isinstance(task, MaterializingTask) and task.assets
|
536
|
+
else [],
|
537
|
+
upstream_assets=upstream_assets,
|
538
|
+
materialized_by=task.materialized_by
|
539
|
+
if isinstance(task, MaterializingTask)
|
540
|
+
else None,
|
541
|
+
task_run_id=task_run_id,
|
542
|
+
)
|
543
|
+
ctx.update_tracked_assets()
|
544
|
+
|
545
|
+
return ctx
|
546
|
+
|
547
|
+
def add_asset_metadata(self, asset_key: str, metadata: dict[str, Any]) -> None:
|
548
|
+
"""
|
549
|
+
Add metadata for a materialized asset.
|
550
|
+
|
551
|
+
Args:
|
552
|
+
asset_key: The asset key
|
553
|
+
metadata: Metadata dictionary to add
|
554
|
+
"""
|
555
|
+
|
556
|
+
existing = self.materialization_metadata.get(asset_key, {})
|
557
|
+
self.materialization_metadata[asset_key] = existing | metadata
|
558
|
+
|
559
|
+
@staticmethod
|
560
|
+
def asset_as_resource(asset: Asset) -> dict[str, str]:
|
561
|
+
"""Convert Asset to event resource format."""
|
562
|
+
resource = {"prefect.resource.id": asset.key}
|
563
|
+
|
564
|
+
if asset.properties:
|
565
|
+
properties_dict = asset.properties.model_dump(exclude_unset=True)
|
566
|
+
|
567
|
+
if "name" in properties_dict:
|
568
|
+
resource["prefect.resource.name"] = properties_dict["name"]
|
569
|
+
|
570
|
+
if "description" in properties_dict:
|
571
|
+
resource["prefect.asset.description"] = properties_dict["description"]
|
572
|
+
|
573
|
+
if "url" in properties_dict:
|
574
|
+
resource["prefect.asset.url"] = properties_dict["url"]
|
575
|
+
|
576
|
+
if "owners" in properties_dict:
|
577
|
+
resource["prefect.asset.owners"] = json.dumps(properties_dict["owners"])
|
578
|
+
|
579
|
+
return resource
|
580
|
+
|
581
|
+
@staticmethod
|
582
|
+
def asset_as_related(asset: Asset) -> dict[str, str]:
|
583
|
+
"""Convert Asset to event related format."""
|
584
|
+
return {
|
585
|
+
"prefect.resource.id": asset.key,
|
586
|
+
"prefect.resource.role": "asset",
|
587
|
+
}
|
588
|
+
|
589
|
+
@staticmethod
|
590
|
+
def related_materialized_by(by: str) -> dict[str, str]:
|
591
|
+
"""Create a related resource for the tool that performed the materialization"""
|
592
|
+
return {
|
593
|
+
"prefect.resource.id": by,
|
594
|
+
"prefect.resource.role": "asset-materialized-by",
|
595
|
+
}
|
596
|
+
|
597
|
+
def emit_events(self, state: State) -> None:
|
598
|
+
"""
|
599
|
+
Emit asset reference and materialization events based on task completion.
|
600
|
+
"""
|
601
|
+
|
602
|
+
from prefect.events import emit_event
|
603
|
+
|
604
|
+
if state.name == "Cached":
|
605
|
+
return
|
606
|
+
if state.is_failed():
|
607
|
+
event_status = "failed"
|
608
|
+
elif state.is_completed():
|
609
|
+
event_status = "succeeded"
|
610
|
+
else:
|
611
|
+
return
|
612
|
+
|
613
|
+
asset_deps_related: list[Asset] = []
|
614
|
+
|
615
|
+
# Emit reference events for direct asset dependencies
|
616
|
+
for asset in self.direct_asset_dependencies:
|
617
|
+
emit_event(
|
618
|
+
event=f"prefect.asset.reference.{event_status}",
|
619
|
+
resource=self.asset_as_resource(asset),
|
620
|
+
related=[],
|
621
|
+
)
|
622
|
+
asset_deps_related.append(self.asset_as_related(asset))
|
623
|
+
|
624
|
+
# Emit materialization events for downstream assets
|
625
|
+
if self.downstream_assets:
|
626
|
+
upstream_related = [self.asset_as_related(a) for a in self.upstream_assets]
|
627
|
+
all_related = upstream_related + asset_deps_related
|
628
|
+
|
629
|
+
if self.materialized_by:
|
630
|
+
all_related.append(self.related_materialized_by(self.materialized_by))
|
631
|
+
|
632
|
+
for asset in self.downstream_assets:
|
633
|
+
emit_event(
|
634
|
+
event=f"prefect.asset.materialization.{event_status}",
|
635
|
+
resource=self.asset_as_resource(asset),
|
636
|
+
related=all_related,
|
637
|
+
payload=self.materialization_metadata.get(asset.key),
|
638
|
+
)
|
639
|
+
|
640
|
+
def update_tracked_assets(self) -> None:
|
641
|
+
"""
|
642
|
+
Update the flow run context with assets that should be propagated downstream.
|
643
|
+
"""
|
644
|
+
if not (flow_run_context := FlowRunContext.get()):
|
645
|
+
return
|
646
|
+
|
647
|
+
if not self.task_run_id:
|
648
|
+
return
|
649
|
+
|
650
|
+
if self.downstream_assets:
|
651
|
+
# MaterializingTask: propagate the downstream assets (what we create)
|
652
|
+
assets_for_downstream = self.downstream_assets[:]
|
653
|
+
else:
|
654
|
+
# Regular task: propagate upstream assets + direct dependencies
|
655
|
+
assets_for_downstream = (
|
656
|
+
list(self.upstream_assets) + self.direct_asset_dependencies
|
657
|
+
)
|
658
|
+
|
659
|
+
flow_run_context.task_run_assets[self.task_run_id] = assets_for_downstream
|
660
|
+
|
661
|
+
def serialize(self: Self, include_secrets: bool = True) -> dict[str, Any]:
|
662
|
+
"""Serialize the AssetContext for distributed execution."""
|
663
|
+
return self.model_dump(
|
664
|
+
exclude_unset=True,
|
665
|
+
serialize_as_any=True,
|
666
|
+
context={"include_secrets": include_secrets},
|
667
|
+
)
|
668
|
+
|
669
|
+
|
446
670
|
class TagsContext(ContextModel):
|
447
671
|
"""
|
448
672
|
The context for `prefect.tags` management.
|
@@ -1222,14 +1222,14 @@ async def deploy(
|
|
1222
1222
|
" or specify a remote storage location for the flow with `.from_source`."
|
1223
1223
|
" If you are attempting to deploy a flow to a local process work pool,"
|
1224
1224
|
" consider using `flow.serve` instead. See the documentation for more"
|
1225
|
-
" information: https://docs.prefect.io/latest/
|
1225
|
+
" information: https://docs.prefect.io/latest/how-to-guides/deployments/run-flows-in-local-processes"
|
1226
1226
|
)
|
1227
1227
|
elif work_pool.type == "process" and not ignore_warnings:
|
1228
1228
|
console.print(
|
1229
1229
|
"Looks like you're deploying to a process work pool. If you're creating a"
|
1230
1230
|
" deployment for local development, calling `.serve` on your flow is a great"
|
1231
1231
|
" way to get started. See the documentation for more information:"
|
1232
|
-
" https://docs.prefect.io/latest/
|
1232
|
+
" https://docs.prefect.io/latest/how-to-guides/deployments/run-flows-in-local-processes "
|
1233
1233
|
" Set `ignore_warnings=True` to suppress this message.",
|
1234
1234
|
style="yellow",
|
1235
1235
|
)
|
@@ -257,7 +257,7 @@ def _build_generic_endpoint_for_flows(
|
|
257
257
|
@deprecated_callable(
|
258
258
|
start_date=datetime(2025, 4, 1),
|
259
259
|
end_date=datetime(2025, 10, 1),
|
260
|
-
help="Use background tasks (https://docs.prefect.io/v3/
|
260
|
+
help="Use background tasks (https://docs.prefect.io/v3/concepts/tasks#background-tasks) or `run_deployment` and `.serve` instead of submitting runs to the Runner webserver.",
|
261
261
|
)
|
262
262
|
async def build_server(runner: "Runner") -> FastAPI:
|
263
263
|
"""
|
@@ -306,7 +306,7 @@ async def build_server(runner: "Runner") -> FastAPI:
|
|
306
306
|
@deprecated_callable(
|
307
307
|
start_date=datetime(2025, 4, 1),
|
308
308
|
end_date=datetime(2025, 10, 1),
|
309
|
-
help="Use background tasks (https://docs.prefect.io/v3/
|
309
|
+
help="Use background tasks (https://docs.prefect.io/v3/concepts/flows-and-tasks#background-tasks) or `run_deployment` and `.serve` instead of submitting runs to the Runner webserver.",
|
310
310
|
)
|
311
311
|
def start_webserver(runner: "Runner", log_level: str | None = None) -> None:
|
312
312
|
"""
|
@@ -124,7 +124,7 @@ def submit_to_runner(
|
|
124
124
|
@deprecated_callable(
|
125
125
|
start_date=datetime(2025, 4, 1),
|
126
126
|
end_date=datetime(2025, 10, 1),
|
127
|
-
help="Use background tasks (https://docs.prefect.io/v3/
|
127
|
+
help="Use background tasks (https://docs.prefect.io/v3/concepts/flows-and-tasks#background-tasks) or `run_deployment` and `.serve` instead of submitting runs to the Runner webserver.",
|
128
128
|
)
|
129
129
|
@sync_compatible
|
130
130
|
async def submit_to_runner(
|
@@ -196,7 +196,7 @@ async def submit_to_runner(
|
|
196
196
|
@deprecated_callable(
|
197
197
|
start_date=datetime(2025, 4, 1),
|
198
198
|
end_date=datetime(2025, 10, 1),
|
199
|
-
help="Use background tasks (https://docs.prefect.io/v3/
|
199
|
+
help="Use background tasks (https://docs.prefect.io/v3/concepts/flows-and-tasks#background-tasks) or `run_deployment` and `.serve` instead of submitting runs to the Runner webserver.",
|
200
200
|
)
|
201
201
|
@sync_compatible
|
202
202
|
async def wait_for_submitted_runs(
|
@@ -51,7 +51,7 @@ async def create_events(
|
|
51
51
|
"""
|
52
52
|
Record a batch of Events.
|
53
53
|
|
54
|
-
For more information, see https://docs.prefect.io/v3/
|
54
|
+
For more information, see https://docs.prefect.io/v3/concepts/events.
|
55
55
|
"""
|
56
56
|
if ephemeral_request:
|
57
57
|
await EventsPipeline().process_events(events)
|
{prefect_client-3.4.5.dev4 → prefect_client-3.4.5.dev5}/src/prefect/server/api/task_workers.py
RENAMED
@@ -23,7 +23,7 @@ async def read_task_workers(
|
|
23
23
|
"""
|
24
24
|
Read active task workers. Optionally filter by task keys.
|
25
25
|
|
26
|
-
For more information, see https://docs.prefect.io/v3/
|
26
|
+
For more information, see https://docs.prefect.io/v3/concepts/flows-and-tasks#background-tasks.
|
27
27
|
"""
|
28
28
|
|
29
29
|
if task_worker_filter and task_worker_filter.task_keys:
|