prefect-client 3.4.7.dev9__tar.gz → 3.4.8.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/PKG-INFO +1 -1
- prefect_client-3.4.8.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/assets/core.py +2 -2
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/server.py +2 -0
- prefect_client-3.4.8.dev1/src/prefect/settings/models/_defaults.py +152 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/logging.py +6 -4
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/results.py +7 -3
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/root.py +19 -100
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/root.py +7 -4
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/tasks.py +74 -26
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/types/__init__.py +2 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/types/names.py +50 -0
- prefect_client-3.4.7.dev9/src/prefect/_build_info.py +0 -5
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/.gitignore +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/LICENSE +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/README.md +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/pyproject.toml +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/lineage.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/context.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/cli/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/cli/automations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/flows.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/futures.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/_observers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/submit.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runner/utils.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/bootstrap.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/instrumentation.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/logging.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/processors.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/telemetry/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/callables.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/engine.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/filesystem.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/processutils.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/templating.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/workers/utilities.py +0 -0
|
@@ -5,7 +5,7 @@ from typing import Any, ClassVar, Optional
|
|
|
5
5
|
from pydantic import ConfigDict, Field
|
|
6
6
|
|
|
7
7
|
from prefect._internal.schemas.bases import PrefectBaseModel
|
|
8
|
-
from prefect.types import
|
|
8
|
+
from prefect.types import ValidAssetKey
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class AssetProperties(PrefectBaseModel):
|
|
@@ -37,7 +37,7 @@ class Asset(PrefectBaseModel):
|
|
|
37
37
|
|
|
38
38
|
model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True)
|
|
39
39
|
|
|
40
|
-
key:
|
|
40
|
+
key: ValidAssetKey
|
|
41
41
|
properties: Optional[AssetProperties] = Field(
|
|
42
42
|
default=None,
|
|
43
43
|
description="Properties of the asset. "
|
|
@@ -922,6 +922,8 @@ class SubprocessASGIServer:
|
|
|
922
922
|
self.server_process.wait(timeout=5)
|
|
923
923
|
except subprocess.TimeoutExpired:
|
|
924
924
|
self.server_process.kill()
|
|
925
|
+
# Ensure the process is reaped to avoid ResourceWarning
|
|
926
|
+
self.server_process.wait()
|
|
925
927
|
finally:
|
|
926
928
|
self.server_process = None
|
|
927
929
|
if self.port in self._instances:
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from pydantic import SecretStr, ValidationInfo
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from prefect.settings.models.root import Settings
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def default_profiles_path(values: dict[str, Any]) -> Path:
|
|
13
|
+
"""Default profiles_path based on home directory."""
|
|
14
|
+
home = values.get("home", Path("~/.prefect").expanduser())
|
|
15
|
+
if not isinstance(home, Path):
|
|
16
|
+
home = Path("~/.prefect").expanduser()
|
|
17
|
+
return home / "profiles.toml"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def substitute_home_template(v: Any, info: ValidationInfo) -> Any:
|
|
21
|
+
"""Validator that substitutes $PREFECT_HOME in a path string if present."""
|
|
22
|
+
home_path = info.data.get("home")
|
|
23
|
+
|
|
24
|
+
path_str: str | None = None
|
|
25
|
+
if isinstance(v, Path):
|
|
26
|
+
return v
|
|
27
|
+
elif isinstance(v, str):
|
|
28
|
+
path_str = v
|
|
29
|
+
elif v is None:
|
|
30
|
+
return None
|
|
31
|
+
else:
|
|
32
|
+
return v
|
|
33
|
+
|
|
34
|
+
if path_str and "$PREFECT_HOME" in path_str:
|
|
35
|
+
if home_path and isinstance(home_path, Path):
|
|
36
|
+
resolved_str = path_str.replace("$PREFECT_HOME", str(home_path))
|
|
37
|
+
try:
|
|
38
|
+
return Path(resolved_str)
|
|
39
|
+
except Exception as e:
|
|
40
|
+
raise ValueError(
|
|
41
|
+
f"Error creating path after substituting $PREFECT_HOME: {e}"
|
|
42
|
+
) from e
|
|
43
|
+
else:
|
|
44
|
+
raise ValueError(
|
|
45
|
+
f'Cannot resolve $PREFECT_HOME in "{path_str}" because '
|
|
46
|
+
f"PREFECT_HOME setting ({home_path!r}) is not a valid resolved path."
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
return path_str
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def default_local_storage_path(values: dict[str, Any]) -> Path:
|
|
53
|
+
"""Default local_storage_path based on home directory."""
|
|
54
|
+
home = values.get("home")
|
|
55
|
+
if not isinstance(home, Path):
|
|
56
|
+
home = Path("~/.prefect").expanduser()
|
|
57
|
+
return home / "storage"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def default_memo_store_path(values: dict[str, Any]) -> Path:
|
|
61
|
+
"""Default memo_store_path based on home directory."""
|
|
62
|
+
home = values.get("home")
|
|
63
|
+
if not isinstance(home, Path):
|
|
64
|
+
home = Path("~/.prefect").expanduser()
|
|
65
|
+
return home / "memo_store.toml"
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def default_logging_config_path(values: dict[str, Any]) -> Path:
|
|
69
|
+
"""Default logging_config_path based on home directory."""
|
|
70
|
+
home = values.get("home")
|
|
71
|
+
if not isinstance(home, Path):
|
|
72
|
+
home = Path("~/.prefect").expanduser()
|
|
73
|
+
return home / "logging.yml"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def default_database_connection_url(settings: "Settings") -> SecretStr:
|
|
77
|
+
value: str = f"sqlite+aiosqlite:///{settings.home}/prefect.db"
|
|
78
|
+
if settings.server.database.driver == "postgresql+asyncpg":
|
|
79
|
+
required = [
|
|
80
|
+
"host",
|
|
81
|
+
"user",
|
|
82
|
+
"name",
|
|
83
|
+
"password",
|
|
84
|
+
]
|
|
85
|
+
missing = [
|
|
86
|
+
attr for attr in required if getattr(settings.server.database, attr) is None
|
|
87
|
+
]
|
|
88
|
+
if missing:
|
|
89
|
+
raise ValueError(
|
|
90
|
+
f"Missing required database connection settings: {', '.join(missing)}"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
from sqlalchemy import URL
|
|
94
|
+
|
|
95
|
+
value = URL(
|
|
96
|
+
drivername=settings.server.database.driver,
|
|
97
|
+
host=settings.server.database.host,
|
|
98
|
+
port=settings.server.database.port or 5432,
|
|
99
|
+
username=settings.server.database.user,
|
|
100
|
+
password=(
|
|
101
|
+
settings.server.database.password.get_secret_value()
|
|
102
|
+
if settings.server.database.password
|
|
103
|
+
else None
|
|
104
|
+
),
|
|
105
|
+
database=settings.server.database.name,
|
|
106
|
+
query=[], # type: ignore
|
|
107
|
+
).render_as_string(hide_password=False)
|
|
108
|
+
|
|
109
|
+
elif settings.server.database.driver == "sqlite+aiosqlite":
|
|
110
|
+
if settings.server.database.name:
|
|
111
|
+
value = (
|
|
112
|
+
f"{settings.server.database.driver}:///{settings.server.database.name}"
|
|
113
|
+
)
|
|
114
|
+
else:
|
|
115
|
+
value = f"sqlite+aiosqlite:///{settings.home}/prefect.db"
|
|
116
|
+
|
|
117
|
+
elif settings.server.database.driver:
|
|
118
|
+
raise ValueError(
|
|
119
|
+
f"Unsupported database driver: {settings.server.database.driver}"
|
|
120
|
+
)
|
|
121
|
+
return SecretStr(value)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def default_ui_url(settings: "Settings") -> str | None:
|
|
125
|
+
value = settings.ui_url
|
|
126
|
+
if value is not None:
|
|
127
|
+
return value
|
|
128
|
+
|
|
129
|
+
# Otherwise, infer a value from the API URL
|
|
130
|
+
ui_url = api_url = settings.api.url
|
|
131
|
+
|
|
132
|
+
if not api_url:
|
|
133
|
+
return None
|
|
134
|
+
assert ui_url is not None
|
|
135
|
+
|
|
136
|
+
cloud_url = settings.cloud.api_url
|
|
137
|
+
cloud_ui_url = settings.cloud.ui_url
|
|
138
|
+
if api_url.startswith(cloud_url) and cloud_ui_url:
|
|
139
|
+
ui_url = ui_url.replace(cloud_url, cloud_ui_url)
|
|
140
|
+
|
|
141
|
+
if ui_url.endswith("/api"):
|
|
142
|
+
# Handles open-source APIs
|
|
143
|
+
ui_url = ui_url[:-4]
|
|
144
|
+
|
|
145
|
+
# Handles Cloud APIs with content after `/api`
|
|
146
|
+
ui_url = ui_url.replace("/api/", "/")
|
|
147
|
+
|
|
148
|
+
# Update routing
|
|
149
|
+
ui_url = ui_url.replace("/accounts/", "/account/")
|
|
150
|
+
ui_url = ui_url.replace("/workspaces/", "/workspace/")
|
|
151
|
+
|
|
152
|
+
return ui_url
|
{prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/logging.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from functools import partial
|
|
2
2
|
from pathlib import Path
|
|
3
|
-
from typing import Annotated, Any, ClassVar, Literal,
|
|
3
|
+
from typing import Annotated, Any, ClassVar, Literal, Union
|
|
4
4
|
|
|
5
5
|
from pydantic import (
|
|
6
6
|
AliasChoices,
|
|
@@ -15,6 +15,8 @@ from typing_extensions import Self
|
|
|
15
15
|
from prefect.settings.base import PrefectBaseSettings, build_settings_config
|
|
16
16
|
from prefect.types import LogLevel, validate_set_T_from_delim_string
|
|
17
17
|
|
|
18
|
+
from ._defaults import default_logging_config_path
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
def max_log_size_smaller_than_batch_size(values: dict[str, Any]) -> dict[str, Any]:
|
|
20
22
|
"""
|
|
@@ -95,9 +97,9 @@ class LoggingSettings(PrefectBaseSettings):
|
|
|
95
97
|
description="The default logging level for Prefect loggers.",
|
|
96
98
|
)
|
|
97
99
|
|
|
98
|
-
config_path:
|
|
99
|
-
|
|
100
|
-
description="
|
|
100
|
+
config_path: Path = Field(
|
|
101
|
+
default_factory=default_logging_config_path,
|
|
102
|
+
description="A path to a logging configuration file. Defaults to $PREFECT_HOME/logging.yml",
|
|
101
103
|
validation_alias=AliasChoices(
|
|
102
104
|
AliasPath("config_path"),
|
|
103
105
|
"prefect_logging_config_path",
|
{prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/results.py
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from pathlib import Path
|
|
2
4
|
from typing import ClassVar, Optional
|
|
3
5
|
|
|
@@ -6,6 +8,8 @@ from pydantic_settings import SettingsConfigDict
|
|
|
6
8
|
|
|
7
9
|
from prefect.settings.base import PrefectBaseSettings, build_settings_config
|
|
8
10
|
|
|
11
|
+
from ._defaults import default_local_storage_path
|
|
12
|
+
|
|
9
13
|
|
|
10
14
|
class ResultsSettings(PrefectBaseSettings):
|
|
11
15
|
"""
|
|
@@ -34,9 +38,9 @@ class ResultsSettings(PrefectBaseSettings):
|
|
|
34
38
|
),
|
|
35
39
|
)
|
|
36
40
|
|
|
37
|
-
local_storage_path:
|
|
38
|
-
|
|
39
|
-
description="The
|
|
41
|
+
local_storage_path: Path = Field(
|
|
42
|
+
default_factory=default_local_storage_path,
|
|
43
|
+
description="The default location for locally persisted results. Defaults to $PREFECT_HOME/storage.",
|
|
40
44
|
validation_alias=AliasChoices(
|
|
41
45
|
AliasPath("local_storage_path"),
|
|
42
46
|
"prefect_results_local_storage_path",
|
|
@@ -21,6 +21,12 @@ from prefect.settings.models.testing import TestingSettings
|
|
|
21
21
|
from prefect.settings.models.worker import WorkerSettings
|
|
22
22
|
from prefect.utilities.collections import deep_merge_dicts, set_in_dict
|
|
23
23
|
|
|
24
|
+
from ._defaults import (
|
|
25
|
+
default_database_connection_url,
|
|
26
|
+
default_profiles_path,
|
|
27
|
+
default_ui_url,
|
|
28
|
+
substitute_home_template,
|
|
29
|
+
)
|
|
24
30
|
from .api import APISettings
|
|
25
31
|
from .cli import CLISettings
|
|
26
32
|
from .client import ClientSettings
|
|
@@ -52,9 +58,12 @@ class Settings(PrefectBaseSettings):
|
|
|
52
58
|
description="The path to the Prefect home directory. Defaults to ~/.prefect",
|
|
53
59
|
)
|
|
54
60
|
|
|
55
|
-
profiles_path:
|
|
56
|
-
|
|
57
|
-
description=
|
|
61
|
+
profiles_path: Annotated[Path, BeforeValidator(substitute_home_template)] = Field(
|
|
62
|
+
default_factory=default_profiles_path,
|
|
63
|
+
description=(
|
|
64
|
+
"The path to a profiles configuration file. Supports $PREFECT_HOME templating."
|
|
65
|
+
" Defaults to $PREFECT_HOME/profiles.toml."
|
|
66
|
+
),
|
|
58
67
|
)
|
|
59
68
|
|
|
60
69
|
debug_mode: bool = Field(
|
|
@@ -175,14 +184,14 @@ class Settings(PrefectBaseSettings):
|
|
|
175
184
|
|
|
176
185
|
@model_validator(mode="after")
|
|
177
186
|
def post_hoc_settings(self) -> Self:
|
|
178
|
-
"""
|
|
187
|
+
"""Handle remaining complex default assignments that aren't yet migrated to dependent settings.
|
|
179
188
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
189
|
+
With Pydantic 2.10's dependent settings feature, we've migrated simple path-based defaults
|
|
190
|
+
to use default_factory. The remaining items here require access to the full Settings instance
|
|
191
|
+
or have complex interdependencies that will be migrated in future PRs.
|
|
183
192
|
"""
|
|
184
193
|
if self.ui_url is None:
|
|
185
|
-
self.ui_url =
|
|
194
|
+
self.ui_url = default_ui_url(self)
|
|
186
195
|
self.__pydantic_fields_set__.remove("ui_url")
|
|
187
196
|
if self.server.ui.api_url is None:
|
|
188
197
|
if self.api.url:
|
|
@@ -193,27 +202,15 @@ class Settings(PrefectBaseSettings):
|
|
|
193
202
|
f"http://{self.server.api.host}:{self.server.api.port}/api"
|
|
194
203
|
)
|
|
195
204
|
self.server.ui.__pydantic_fields_set__.remove("api_url")
|
|
196
|
-
if self.profiles_path is None or "PREFECT_HOME" in str(self.profiles_path):
|
|
197
|
-
self.profiles_path = Path(f"{self.home}/profiles.toml")
|
|
198
|
-
self.__pydantic_fields_set__.remove("profiles_path")
|
|
199
|
-
if self.results.local_storage_path is None:
|
|
200
|
-
self.results.local_storage_path = Path(f"{self.home}/storage")
|
|
201
|
-
self.results.__pydantic_fields_set__.remove("local_storage_path")
|
|
202
|
-
if self.server.memo_store_path is None:
|
|
203
|
-
self.server.memo_store_path = Path(f"{self.home}/memo_store.toml")
|
|
204
|
-
self.server.__pydantic_fields_set__.remove("memo_store_path")
|
|
205
205
|
if self.debug_mode or self.testing.test_mode:
|
|
206
206
|
self.logging.level = "DEBUG"
|
|
207
207
|
self.internal.logging_level = "DEBUG"
|
|
208
208
|
self.logging.__pydantic_fields_set__.remove("level")
|
|
209
209
|
self.internal.__pydantic_fields_set__.remove("logging_level")
|
|
210
210
|
|
|
211
|
-
if self.logging.config_path is None:
|
|
212
|
-
self.logging.config_path = Path(f"{self.home}/logging.yml")
|
|
213
|
-
self.logging.__pydantic_fields_set__.remove("config_path")
|
|
214
211
|
# Set default database connection URL if not provided
|
|
215
212
|
if self.server.database.connection_url is None:
|
|
216
|
-
self.server.database.connection_url =
|
|
213
|
+
self.server.database.connection_url = default_database_connection_url(self)
|
|
217
214
|
self.server.database.__pydantic_fields_set__.remove("connection_url")
|
|
218
215
|
db_url = self.server.database.connection_url.get_secret_value()
|
|
219
216
|
if (
|
|
@@ -238,6 +235,7 @@ class Settings(PrefectBaseSettings):
|
|
|
238
235
|
)
|
|
239
236
|
self.server.database.connection_url = SecretStr(db_url)
|
|
240
237
|
self.server.database.__pydantic_fields_set__.remove("connection_url")
|
|
238
|
+
|
|
241
239
|
return self
|
|
242
240
|
|
|
243
241
|
@model_validator(mode="after")
|
|
@@ -330,37 +328,6 @@ class Settings(PrefectBaseSettings):
|
|
|
330
328
|
return str(hash(tuple((key, value) for key, value in env_variables.items())))
|
|
331
329
|
|
|
332
330
|
|
|
333
|
-
def _default_ui_url(settings: "Settings") -> Optional[str]:
|
|
334
|
-
value = settings.ui_url
|
|
335
|
-
if value is not None:
|
|
336
|
-
return value
|
|
337
|
-
|
|
338
|
-
# Otherwise, infer a value from the API URL
|
|
339
|
-
ui_url = api_url = settings.api.url
|
|
340
|
-
|
|
341
|
-
if not api_url:
|
|
342
|
-
return None
|
|
343
|
-
assert ui_url is not None
|
|
344
|
-
|
|
345
|
-
cloud_url = settings.cloud.api_url
|
|
346
|
-
cloud_ui_url = settings.cloud.ui_url
|
|
347
|
-
if api_url.startswith(cloud_url) and cloud_ui_url:
|
|
348
|
-
ui_url = ui_url.replace(cloud_url, cloud_ui_url)
|
|
349
|
-
|
|
350
|
-
if ui_url.endswith("/api"):
|
|
351
|
-
# Handles open-source APIs
|
|
352
|
-
ui_url = ui_url[:-4]
|
|
353
|
-
|
|
354
|
-
# Handles Cloud APIs with content after `/api`
|
|
355
|
-
ui_url = ui_url.replace("/api/", "/")
|
|
356
|
-
|
|
357
|
-
# Update routing
|
|
358
|
-
ui_url = ui_url.replace("/accounts/", "/account/")
|
|
359
|
-
ui_url = ui_url.replace("/workspaces/", "/workspace/")
|
|
360
|
-
|
|
361
|
-
return ui_url
|
|
362
|
-
|
|
363
|
-
|
|
364
331
|
def _warn_on_misconfigured_api_url(settings: "Settings"):
|
|
365
332
|
"""
|
|
366
333
|
Validator for settings warning if the API URL is misconfigured.
|
|
@@ -404,53 +371,5 @@ def _warn_on_misconfigured_api_url(settings: "Settings"):
|
|
|
404
371
|
return settings
|
|
405
372
|
|
|
406
373
|
|
|
407
|
-
def _default_database_connection_url(settings: "Settings") -> SecretStr:
|
|
408
|
-
value: str = f"sqlite+aiosqlite:///{settings.home}/prefect.db"
|
|
409
|
-
if settings.server.database.driver == "postgresql+asyncpg":
|
|
410
|
-
required = [
|
|
411
|
-
"host",
|
|
412
|
-
"user",
|
|
413
|
-
"name",
|
|
414
|
-
"password",
|
|
415
|
-
]
|
|
416
|
-
missing = [
|
|
417
|
-
attr for attr in required if getattr(settings.server.database, attr) is None
|
|
418
|
-
]
|
|
419
|
-
if missing:
|
|
420
|
-
raise ValueError(
|
|
421
|
-
f"Missing required database connection settings: {', '.join(missing)}"
|
|
422
|
-
)
|
|
423
|
-
|
|
424
|
-
from sqlalchemy import URL
|
|
425
|
-
|
|
426
|
-
value = URL(
|
|
427
|
-
drivername=settings.server.database.driver,
|
|
428
|
-
host=settings.server.database.host,
|
|
429
|
-
port=settings.server.database.port or 5432,
|
|
430
|
-
username=settings.server.database.user,
|
|
431
|
-
password=(
|
|
432
|
-
settings.server.database.password.get_secret_value()
|
|
433
|
-
if settings.server.database.password
|
|
434
|
-
else None
|
|
435
|
-
),
|
|
436
|
-
database=settings.server.database.name,
|
|
437
|
-
query=[], # type: ignore
|
|
438
|
-
).render_as_string(hide_password=False)
|
|
439
|
-
|
|
440
|
-
elif settings.server.database.driver == "sqlite+aiosqlite":
|
|
441
|
-
if settings.server.database.name:
|
|
442
|
-
value = (
|
|
443
|
-
f"{settings.server.database.driver}:///{settings.server.database.name}"
|
|
444
|
-
)
|
|
445
|
-
else:
|
|
446
|
-
value = f"sqlite+aiosqlite:///{settings.home}/prefect.db"
|
|
447
|
-
|
|
448
|
-
elif settings.server.database.driver:
|
|
449
|
-
raise ValueError(
|
|
450
|
-
f"Unsupported database driver: {settings.server.database.driver}"
|
|
451
|
-
)
|
|
452
|
-
return SecretStr(value)
|
|
453
|
-
|
|
454
|
-
|
|
455
374
|
def canonical_environment_prefix(settings: "Settings") -> str:
|
|
456
375
|
return settings.model_config.get("env_prefix") or ""
|
{prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/settings/models/server/root.py
RENAMED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from pathlib import Path
|
|
2
|
-
from typing import ClassVar
|
|
4
|
+
from typing import ClassVar
|
|
3
5
|
|
|
4
6
|
from pydantic import AliasChoices, AliasPath, Field
|
|
5
7
|
from pydantic_settings import SettingsConfigDict
|
|
@@ -7,6 +9,7 @@ from pydantic_settings import SettingsConfigDict
|
|
|
7
9
|
from prefect.settings.base import PrefectBaseSettings, build_settings_config
|
|
8
10
|
from prefect.types import LogLevel
|
|
9
11
|
|
|
12
|
+
from .._defaults import default_memo_store_path
|
|
10
13
|
from .api import ServerAPISettings
|
|
11
14
|
from .database import ServerDatabaseSettings
|
|
12
15
|
from .deployments import ServerDeploymentsSettings
|
|
@@ -84,9 +87,9 @@ class ServerSettings(PrefectBaseSettings):
|
|
|
84
87
|
),
|
|
85
88
|
)
|
|
86
89
|
|
|
87
|
-
memo_store_path:
|
|
88
|
-
|
|
89
|
-
description="
|
|
90
|
+
memo_store_path: Path = Field(
|
|
91
|
+
default_factory=default_memo_store_path,
|
|
92
|
+
description="Path to the memo store file. Defaults to $PREFECT_HOME/memo_store.toml",
|
|
90
93
|
validation_alias=AliasChoices(
|
|
91
94
|
AliasPath("memo_store_path"),
|
|
92
95
|
"prefect_server_memo_store_path",
|
|
@@ -723,37 +723,44 @@ class Task(Generic[P, R]):
|
|
|
723
723
|
|
|
724
724
|
Examples:
|
|
725
725
|
|
|
726
|
-
Create a new task from an existing task and update the name
|
|
726
|
+
Create a new task from an existing task and update the name:
|
|
727
727
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
>>> new_task = my_task.with_options(name="My new task")
|
|
728
|
+
```python
|
|
729
|
+
@task(name="My task")
|
|
730
|
+
def my_task():
|
|
731
|
+
return 1
|
|
733
732
|
|
|
734
|
-
|
|
733
|
+
new_task = my_task.with_options(name="My new task")
|
|
734
|
+
```
|
|
735
735
|
|
|
736
|
-
|
|
737
|
-
>>>
|
|
738
|
-
>>> @task(retries=1, retry_delay_seconds=5)
|
|
739
|
-
>>> def my_task():
|
|
740
|
-
>>> x = randint(0, 5)
|
|
741
|
-
>>> if x >= 3: # Make a task that fails sometimes
|
|
742
|
-
>>> raise ValueError("Retry me please!")
|
|
743
|
-
>>> return x
|
|
744
|
-
>>>
|
|
745
|
-
>>> new_task = my_task.with_options(retries=5, retry_delay_seconds=2)
|
|
736
|
+
Create a new task from an existing task and update the retry settings:
|
|
746
737
|
|
|
747
|
-
|
|
738
|
+
```python
|
|
739
|
+
from random import randint
|
|
740
|
+
|
|
741
|
+
@task(retries=1, retry_delay_seconds=5)
|
|
742
|
+
def my_task():
|
|
743
|
+
x = randint(0, 5)
|
|
744
|
+
if x >= 3: # Make a task that fails sometimes
|
|
745
|
+
raise ValueError("Retry me please!")
|
|
746
|
+
return x
|
|
747
|
+
|
|
748
|
+
new_task = my_task.with_options(retries=5, retry_delay_seconds=2)
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
Use a task with updated options within a flow:
|
|
752
|
+
|
|
753
|
+
```python
|
|
754
|
+
@task(name="My task")
|
|
755
|
+
def my_task():
|
|
756
|
+
return 1
|
|
757
|
+
|
|
758
|
+
@flow
|
|
759
|
+
my_flow():
|
|
760
|
+
new_task = my_task.with_options(name="My new task")
|
|
761
|
+
new_task()
|
|
762
|
+
```
|
|
748
763
|
|
|
749
|
-
>>> @task(name="My task")
|
|
750
|
-
>>> def my_task():
|
|
751
|
-
>>> return 1
|
|
752
|
-
>>>
|
|
753
|
-
>>> @flow
|
|
754
|
-
>>> my_flow():
|
|
755
|
-
>>> new_task = my_task.with_options(name="My new task")
|
|
756
|
-
>>> new_task()
|
|
757
764
|
"""
|
|
758
765
|
return Task(
|
|
759
766
|
fn=self.fn,
|
|
@@ -2035,3 +2042,44 @@ class MaterializingTask(Task[P, R]):
|
|
|
2035
2042
|
Asset(key=a) if isinstance(a, str) else a for a in assets
|
|
2036
2043
|
]
|
|
2037
2044
|
self.materialized_by = materialized_by
|
|
2045
|
+
|
|
2046
|
+
def with_options(
|
|
2047
|
+
self,
|
|
2048
|
+
assets: Optional[Sequence[Union[str, Asset]]] = None,
|
|
2049
|
+
**task_kwargs: Unpack[TaskOptions],
|
|
2050
|
+
) -> "MaterializingTask[P, R]":
|
|
2051
|
+
import inspect
|
|
2052
|
+
|
|
2053
|
+
sig = inspect.signature(Task.__init__)
|
|
2054
|
+
|
|
2055
|
+
# Map parameter names to attribute names where they differ
|
|
2056
|
+
# from parameter to attribute.
|
|
2057
|
+
param_to_attr = {
|
|
2058
|
+
"on_completion": "on_completion_hooks",
|
|
2059
|
+
"on_failure": "on_failure_hooks",
|
|
2060
|
+
"on_rollback": "on_rollback_hooks",
|
|
2061
|
+
"on_commit": "on_commit_hooks",
|
|
2062
|
+
}
|
|
2063
|
+
|
|
2064
|
+
# Build kwargs for Task constructor
|
|
2065
|
+
init_kwargs = {}
|
|
2066
|
+
for param_name in sig.parameters:
|
|
2067
|
+
if param_name in ("self", "fn", "assets", "materialized_by"):
|
|
2068
|
+
continue
|
|
2069
|
+
|
|
2070
|
+
attr_name = param_to_attr.get(param_name, param_name)
|
|
2071
|
+
init_kwargs[param_name] = task_kwargs.get(
|
|
2072
|
+
param_name, getattr(self, attr_name)
|
|
2073
|
+
)
|
|
2074
|
+
|
|
2075
|
+
return MaterializingTask(
|
|
2076
|
+
fn=self.fn,
|
|
2077
|
+
assets=(
|
|
2078
|
+
[Asset(key=a) if isinstance(a, str) else a for a in assets]
|
|
2079
|
+
if assets is not None
|
|
2080
|
+
else self.assets
|
|
2081
|
+
),
|
|
2082
|
+
materialized_by=self.materialized_by,
|
|
2083
|
+
# Now, the rest
|
|
2084
|
+
**init_kwargs,
|
|
2085
|
+
)
|
|
@@ -15,6 +15,7 @@ from .names import (
|
|
|
15
15
|
WITHOUT_BANNED_CHARACTERS,
|
|
16
16
|
MAX_VARIABLE_NAME_LENGTH,
|
|
17
17
|
URILike,
|
|
18
|
+
ValidAssetKey,
|
|
18
19
|
)
|
|
19
20
|
from pydantic import (
|
|
20
21
|
BeforeValidator,
|
|
@@ -216,6 +217,7 @@ __all__ = [
|
|
|
216
217
|
"Name",
|
|
217
218
|
"NameOrEmpty",
|
|
218
219
|
"NonEmptyishName",
|
|
220
|
+
"ValidAssetKey",
|
|
219
221
|
"SecretDict",
|
|
220
222
|
"StatusCode",
|
|
221
223
|
"StrictVariableValue",
|
|
@@ -160,3 +160,53 @@ URILike = Annotated[
|
|
|
160
160
|
examples=["s3://bucket/folder/data.csv", "postgres://dbtable"],
|
|
161
161
|
),
|
|
162
162
|
]
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
MAX_ASSET_KEY_LENGTH = 512
|
|
166
|
+
|
|
167
|
+
RESTRICTED_ASSET_CHARACTERS = [
|
|
168
|
+
"\n",
|
|
169
|
+
"\r",
|
|
170
|
+
"\t",
|
|
171
|
+
"\0",
|
|
172
|
+
" ",
|
|
173
|
+
"#",
|
|
174
|
+
"?",
|
|
175
|
+
"&",
|
|
176
|
+
"%",
|
|
177
|
+
'"',
|
|
178
|
+
"'",
|
|
179
|
+
"<",
|
|
180
|
+
">",
|
|
181
|
+
"[",
|
|
182
|
+
"]",
|
|
183
|
+
"{",
|
|
184
|
+
"}",
|
|
185
|
+
"|",
|
|
186
|
+
"\\",
|
|
187
|
+
"^",
|
|
188
|
+
"`",
|
|
189
|
+
]
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def validate_valid_asset_key(value: str) -> str:
|
|
193
|
+
"""Validate asset key with character restrictions and length limit."""
|
|
194
|
+
for char in RESTRICTED_ASSET_CHARACTERS:
|
|
195
|
+
if char in value:
|
|
196
|
+
raise ValueError(f"Asset key cannot contain '{char}'")
|
|
197
|
+
|
|
198
|
+
if len(value) > MAX_ASSET_KEY_LENGTH:
|
|
199
|
+
raise ValueError(f"Asset key cannot exceed {MAX_ASSET_KEY_LENGTH} characters")
|
|
200
|
+
|
|
201
|
+
return validate_uri(value)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
ValidAssetKey = Annotated[
|
|
205
|
+
str,
|
|
206
|
+
AfterValidator(validate_valid_asset_key),
|
|
207
|
+
Field(
|
|
208
|
+
max_length=MAX_ASSET_KEY_LENGTH,
|
|
209
|
+
description=f"A URI-like string with a lowercase protocol, restricted characters, and max {MAX_ASSET_KEY_LENGTH} characters",
|
|
210
|
+
examples=["s3://bucket/folder/data.csv", "postgres://dbtable"],
|
|
211
|
+
),
|
|
212
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.4.7.dev9 → prefect_client-3.4.8.dev1}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|