prefect-client 3.6.27.dev5__tar.gz → 3.6.28.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.6.27.dev5 → prefect_client-3.6.28.dev1}/PKG-INFO +1 -1
- prefect_client-3.6.28.dev1/src/prefect/_build_info.py +5 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/AGENTS.md +1 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/objects.py +12 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/AGENTS.md +57 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/asyncutils/AGENTS.md +20 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/callables/AGENTS.md +22 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/engine/AGENTS.md +31 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/filesystem/AGENTS.md +17 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/processutils/AGENTS.md +22 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/schema_tools/AGENTS.md +53 -0
- prefect_client-3.6.28.dev1/src/prefect/utilities/templating/AGENTS.md +19 -0
- prefect_client-3.6.27.dev5/src/prefect/_build_info.py +0 -5
- prefect_client-3.6.27.dev5/src/prefect/utilities/AGENTS.md +0 -83
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/.gitignore +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/LICENSE +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/README.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/pyproject.toml +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/__main__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_observers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_result_records.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_states.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/agent.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/automations.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/_version_checking.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/context.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/engine.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/related.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/flows.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/futures.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/main.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/plugins.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/py.typed +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/results.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/schedules.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/serializers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/states.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/tasks.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/telemetry/_metrics.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/transactions.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/_datetime.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/_schema.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/types/names.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/annotations.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/asyncutils.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/asyncutils/__init__.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/callables.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/dockerutils.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/engine.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/engine/__init__.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/filesystem.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/names.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/processutils.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/slugify.py +0 -0
- /prefect_client-3.6.27.dev5/src/prefect/utilities/templating.py → /prefect_client-3.6.28.dev1/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/variables.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/workers/utilities.py +0 -0
|
@@ -9,6 +9,7 @@ HTTP client for communicating with Prefect server and Prefect Cloud.
|
|
|
9
9
|
- **Methods should accept simple kwargs** (`str`, `int`, `UUID`, etc.) and return Pydantic models. Avoid accepting complex objects as parameters.
|
|
10
10
|
- **Client schemas are separate from server schemas.** This module has its own `schemas/` to avoid tangling with `server/schemas/`. Keep the boundary clean.
|
|
11
11
|
- **Do not import server-only modules** (`server/database`, `server/models`, etc.) from anything in this directory — it would break the `prefect-client` package build.
|
|
12
|
+
- **Task-run submission schemas must be eagerly rebuilt.** Schemas instantiated on the concurrent submission path (`Task.create_local_run()`) are rebuilt at import time via `model_rebuild()` at the bottom of `schemas/objects.py`. Pydantic defers schema construction to first use; under threadpool contention, multiple workers race to build the same schema simultaneously. If you add a new schema used in this hot path, add a corresponding `model_rebuild()` call there.
|
|
12
13
|
|
|
13
14
|
## Structure
|
|
14
15
|
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/client/schemas/objects.py
RENAMED
|
@@ -942,6 +942,18 @@ class TaskRun(TimeSeriesBaseModel, ObjectBaseModel):
|
|
|
942
942
|
return get_or_create_run_name(name)
|
|
943
943
|
|
|
944
944
|
|
|
945
|
+
# These models are instantiated while task runs are being created locally on the
|
|
946
|
+
# concurrent submission path. Rebuild them eagerly so threadpool workers do not
|
|
947
|
+
# trigger deferred first-use schema builds under contention.
|
|
948
|
+
RunInput.model_rebuild()
|
|
949
|
+
TaskRunPolicy.model_rebuild()
|
|
950
|
+
TaskRunResult.model_rebuild()
|
|
951
|
+
FlowRunResult.model_rebuild()
|
|
952
|
+
Parameter.model_rebuild()
|
|
953
|
+
Constant.model_rebuild()
|
|
954
|
+
TaskRun.model_rebuild()
|
|
955
|
+
|
|
956
|
+
|
|
945
957
|
class Workspace(PrefectBaseModel):
|
|
946
958
|
"""
|
|
947
959
|
A Prefect Cloud workspace.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Utilities
|
|
2
|
+
|
|
3
|
+
General-purpose helpers and cross-cutting tools used throughout the Prefect SDK and server.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Shared utilities: data manipulation, async helpers, schema tooling, callables introspection, and infrastructure helpers. These modules have no common theme beyond being broadly reused — if something is self-contained and used across two or more subsystems, it lives here.
|
|
8
|
+
|
|
9
|
+
Does NOT include: server-specific utilities (`server/utilities/`), concurrency slot management (`concurrency/`), or logging infrastructure (`logging/`).
|
|
10
|
+
|
|
11
|
+
## Cross-cutting rules
|
|
12
|
+
|
|
13
|
+
- **Don't add server imports to utility modules.** Everything here is used client-side too. `HydrationContext.build()` in `schema_tools/` is an explicit, documented exception (async, server-only); no new server-touching code should creep into other modules.
|
|
14
|
+
|
|
15
|
+
## Subpackages (focused intent nodes)
|
|
16
|
+
|
|
17
|
+
Each subpackage owns its own `AGENTS.md` with entry points and pitfalls specific to that domain.
|
|
18
|
+
|
|
19
|
+
- `schema_tools/` → Hydration and validation of `__prefect_kind` template structures (see `schema_tools/AGENTS.md`)
|
|
20
|
+
- `processutils/` → Subprocess execution, output streaming, and command serialization (see `processutils/AGENTS.md`)
|
|
21
|
+
- `callables/` → Function signature introspection, parameter coercion, parameter schema generation (see `callables/AGENTS.md`)
|
|
22
|
+
- `asyncutils/` → Async/sync bridging, thread coordination, concurrency primitives (see `asyncutils/AGENTS.md`)
|
|
23
|
+
- `templating/` → Placeholder detection and value application for Prefect's `{{ }}` templating (see `templating/AGENTS.md`)
|
|
24
|
+
- `engine/` → Result-to-state linking, SIGTERM bridge management, and control-intent coordination (see `engine/AGENTS.md`)
|
|
25
|
+
- `filesystem/` → File filtering, path normalization, `tmpchdir` (see `filesystem/AGENTS.md`)
|
|
26
|
+
|
|
27
|
+
## Flat modules
|
|
28
|
+
|
|
29
|
+
These modules have no dedicated intent node yet. Promote any one of them to a subpackage (`foo.py` → `foo/__init__.py` + `foo/AGENTS.md`) when non-obvious invariants accrue — the import path is preserved.
|
|
30
|
+
|
|
31
|
+
- `annotations.py` — Custom Prefect type annotations used in flow/task signatures (`unmapped`, `allow_failure`, `quote`, `NotSet`)
|
|
32
|
+
- `collections.py` — Extended collection helpers (`visit_collection`, `flatten`, `remove_nested_keys`)
|
|
33
|
+
- `dispatch.py` — Dynamic type dispatch registry
|
|
34
|
+
- `importtools.py` — Dynamic imports, aliased module loading, script-to-module conversion
|
|
35
|
+
- `pydantic.py` — Pydantic v1/v2 compatibility shims, custom serializers, type dispatch integration
|
|
36
|
+
- `hashing.py` — Stable hashing (`stable_hash`, `file_hash`, `hash_objects`)
|
|
37
|
+
- `dockerutils.py` — Docker image building, Python version detection, Docker client helpers
|
|
38
|
+
- `timeout.py` — Timeout context managers for async/sync code
|
|
39
|
+
- `services.py` — Client metrics server and resilient service loop with backoff
|
|
40
|
+
- `visualization.py` — Flow/task graph visualization via Graphviz
|
|
41
|
+
- `urls.py` — URL validation and UI path formatting
|
|
42
|
+
- `names.py` — Slug generation and obfuscation helpers
|
|
43
|
+
- `math.py` — Distribution sampling and clamping utilities
|
|
44
|
+
- `text.py` — String truncation and fuzzy matching
|
|
45
|
+
- `context.py` — Context variable accessors
|
|
46
|
+
- `compat.py` — Python version compatibility shims
|
|
47
|
+
- `slugify.py` — Thin wrapper around `unicode-slugify`
|
|
48
|
+
- `generics.py` — Generic type validation
|
|
49
|
+
- `render_swagger.py` — MkDocs plugin for rendering Swagger/OpenAPI schemas
|
|
50
|
+
|
|
51
|
+
Private (`_`-prefixed):
|
|
52
|
+
|
|
53
|
+
- `_ast.py` — AST-based flow-decorator discovery in source files
|
|
54
|
+
- `_engine.py` — Naming and hook-resolution helpers for custom flow/task run names
|
|
55
|
+
- `_git.py` — Git origin/branch introspection for deployment metadata
|
|
56
|
+
- `_infrastructure_exit_codes.py` — Registry of exit-code explanations for infrastructure processes
|
|
57
|
+
- `_deprecated.py` — Legacy wrappers retained for backward compat
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# asyncutils
|
|
2
|
+
|
|
3
|
+
Async/sync bridging, thread coordination, and concurrency primitives used throughout the SDK.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Bridges Prefect's async engine with user-written sync code (and vice versa) without deadlocking the event loop or losing context. Also provides a handful of async-aware primitives (`LazySemaphore`, timed task creation) used by higher layers.
|
|
8
|
+
|
|
9
|
+
## Entry Points
|
|
10
|
+
|
|
11
|
+
- `run_coro_as_sync(coro)` — run an async coroutine from sync code, reusing the global loop when available.
|
|
12
|
+
- `run_sync_in_worker_thread(fn, *args, **kwargs)` — execute a blocking sync callable off the event loop.
|
|
13
|
+
- `sync_compatible(fn)` — decorator letting a single `async def` be called from both sync and async callers.
|
|
14
|
+
- `LazySemaphore` — a semaphore whose capacity is resolved on first acquisition (used for managing open-file limits at import time without evaluating `resource` limits eagerly).
|
|
15
|
+
- `gather(*calls)` / `create_gather_task_group()` — run a collection of coroutine-returning callables concurrently and collect their results positionally.
|
|
16
|
+
- `create_task(coro)` — create an `asyncio.Task` with Prefect's logging-and-cancellation-friendly wiring.
|
|
17
|
+
|
|
18
|
+
## Pitfalls
|
|
19
|
+
|
|
20
|
+
_No pitfalls documented yet. Add here when non-obvious behaviors surface during debugging — especially around context propagation, thread-to-loop hand-off, and cancellation semantics, which tend to bite in subtle ways._
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# callables
|
|
2
|
+
|
|
3
|
+
Function signature introspection, parameter coercion, and JSON Schema generation for flow and task parameters.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Inspects user-written flow/task functions to produce:
|
|
8
|
+
- Bindable `args`/`kwargs` from a parameters dict (`parameters_to_args_kwargs`, `get_call_parameters`).
|
|
9
|
+
- JSON Schema representations of function signatures for UI parameter forms and server-side validation (`parameter_schema`).
|
|
10
|
+
|
|
11
|
+
## Entry Points
|
|
12
|
+
|
|
13
|
+
- `parameters_to_args_kwargs(fn, parameters) -> (args, kwargs)` — split a parameters dict into positional and keyword slots based on the function's signature.
|
|
14
|
+
- `get_call_parameters(fn, call_args, call_kwargs) -> dict` — inverse: bind actual call args/kwargs into a parameters dict.
|
|
15
|
+
- `parameter_schema(fn) -> ParameterSchema` — introspect the function signature into a Pydantic-backed JSON Schema.
|
|
16
|
+
|
|
17
|
+
## Pitfalls
|
|
18
|
+
|
|
19
|
+
- **`parameters_to_args_kwargs` adjusts the positional/keyword split based on the wrapper's signature, not the wrapped function's.** For `@functools.wraps`-decorated callables, it inspects the *wrapper* (via `follow_wrapped=False`) to count how many positional slots are actually available and routes excess parameters to `**kwargs`. This means `args` and `kwargs` from this function are shaped for the *wrapper* call, not the inner function — callers must not assume all POSITIONAL_OR_KEYWORD parameters end up in `args`.
|
|
20
|
+
- **`parameters_to_args_kwargs` skips the positional-to-keyword rewrite entirely when the function signature contains `*args`.** Inserting KEYWORD_ONLY parameters before a VAR_POSITIONAL parameter is invalid in Python, so the original signature is used as-is in that case.
|
|
21
|
+
- **Passing the same key in both an explicit parameter and a `**kwargs` dict raises `TypeError`.** `parameters_to_args_kwargs` detects when a VAR_KEYWORD (`**kwargs`) dict contains a key that also appears as an explicit parameter and raises rather than silently letting the variadic entry win. Exception: POSITIONAL_ONLY parameters are exempt because `fn(1, **{'a': 2})` is legal when `a` is positional-only.
|
|
22
|
+
- **`generate_parameter_schema` silently downgrades unsupported parameter types to `Any`.** When a parameter's type raises `ValueError`, `TypeError`, or `PydanticInvalidForJsonSchema` during JSON schema generation (e.g., `Callable`, custom types Pydantic can't serialize), the type is replaced with `Any` in the output schema without warning. If a flow parameter shows up as `Any` in the schema, the declared type is not JSON-schema-compatible.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# engine
|
|
2
|
+
|
|
3
|
+
Result-to-state linking, SIGTERM bridge management, and helpers shared by the flow/task engines.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Two responsibilities live here:
|
|
8
|
+
|
|
9
|
+
1. **Result-to-state linking** — glue between Python return values (which callers receive) and the `State` objects that represent them on the server. Maintains the identity-keyed `run_results` map inside `EngineContext` and exposes safe accessors.
|
|
10
|
+
|
|
11
|
+
2. **SIGTERM bridge** — installs and tears down Prefect's SIGTERM handler (`TerminationSignal`), coordinates control-intent acknowledgement with the runner, and exposes locked helpers so the engine can atomically commit cancellation intent before signalling readiness to the runner.
|
|
12
|
+
|
|
13
|
+
Naming and hook-resolution helpers for custom flow/task run names live in sibling `../_engine.py` (flat module), not here.
|
|
14
|
+
|
|
15
|
+
## Entry Points
|
|
16
|
+
|
|
17
|
+
**Result linking:**
|
|
18
|
+
- `link_state_to_result(state, result, run_type)` — associate a `State` with a Python object under a specific `RunType` for later lookup via `get_state_for_result`.
|
|
19
|
+
- `link_state_to_flow_run_result(state, result)` / `link_state_to_task_run_result(state, result)` — scoped variants used by the flow and task engines respectively.
|
|
20
|
+
- `get_state_for_result(obj) -> tuple[State, RunType] | None` — identity-verified lookup that handles `id()` collisions safely.
|
|
21
|
+
|
|
22
|
+
**SIGTERM bridge:**
|
|
23
|
+
- `capture_sigterm()` — context manager that installs Prefect's SIGTERM bridge; outermost scope installs it, nested scopes reuse or reinstall as needed. The runner's control listener connects only while this context is active.
|
|
24
|
+
- `is_prefect_sigterm_handler_installed() -> bool` — check (under lock) whether Prefect's bridge is the active SIGTERM handler.
|
|
25
|
+
- `can_ack_control_intent() -> bool` — check (under the same lock) whether the child can safely acknowledge a queued control intent.
|
|
26
|
+
- `commit_control_intent_and_ack(commit_intent, clear_intent, send_ack, trigger_cancel)` — atomically commit a control intent and write the ack byte to the runner, all under `_prefect_sigterm_bridge_lock`.
|
|
27
|
+
|
|
28
|
+
## Pitfalls
|
|
29
|
+
|
|
30
|
+
- **Never access `EngineContext.run_results` directly via `id(obj)`.** Always call `get_state_for_result(obj)` — the accessor verifies object identity in addition to the ID match, avoiding false hits when Python reuses an id for a different object after GC.
|
|
31
|
+
- **All SIGTERM-state reads and writes must hold `_prefect_sigterm_bridge_lock`.** The lock is a `threading.RLock` that serializes handler install/restore with ack writes. Reading `signal.getsignal(SIGTERM)` outside the lock creates a TOCTOU race where the handler is restored after the child decides it's safe to ack but before the runner observes the ack byte.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# filesystem
|
|
2
|
+
|
|
3
|
+
File path utilities, pathspec-based filtering, and local filesystem context managers.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Path normalization, file filtering compatible with `.gitignore`/`.prefectignore`-style pattern lists (`filter_files`), open-file-limit introspection (`get_open_file_limit`), and a `tmpchdir` context manager for scoped working-directory changes.
|
|
8
|
+
|
|
9
|
+
## Entry Points
|
|
10
|
+
|
|
11
|
+
- `filter_files(root, ignore_patterns, include_dirs=True) -> set[str]` — return the set of paths under `root` that should be *ignored* according to pathspec patterns. Intended as input to `shutil.copytree`'s `ignore` callback.
|
|
12
|
+
- `tmpchdir(path)` — context manager that `chdir`s into `path` and restores the previous cwd on exit.
|
|
13
|
+
- `get_open_file_limit() -> int` — platform-specific maximum open-file count, with a conservative Windows default.
|
|
14
|
+
|
|
15
|
+
## Pitfalls
|
|
16
|
+
|
|
17
|
+
- **`filter_files` with `include_dirs=True` (the default) always includes all ancestor directories of matched files**, even if those directories weren't directly matched by the ignore patterns. This ensures `shutil.copytree`'s `ignore_func` doesn't skip directories containing files that should be copied. Side effect: callers expecting only pathspec-matched entries will receive additional directory paths. The parent-dir expansion does NOT run when `include_dirs=False`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# processutils
|
|
2
|
+
|
|
3
|
+
Subprocess execution, output streaming, command serialization, and signal forwarding.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Cross-platform subprocess primitives used by workers, runners, bundle execution, and the CLI. Handles process launch (`run_process`), output consumption (`consume_process_output`, `stream_text`), and platform-neutral command serialization (`command_to_string`, `command_from_string`).
|
|
8
|
+
|
|
9
|
+
## Entry Points
|
|
10
|
+
|
|
11
|
+
- `sanitize_subprocess_env(env) -> dict[str, str]` — strip `None` values from an env mapping before passing to subprocess launch APIs; `None` means "omit this key", which `subprocess` and `anyio.open_process` do not accept.
|
|
12
|
+
- `run_process(command, ...)` — async subprocess runner with output streaming and signal forwarding.
|
|
13
|
+
- `consume_process_output(process, stdout_sink, stderr_sink)` — drain a running process's streams into writers.
|
|
14
|
+
- `stream_text(source, *sinks)` — fan out a text stream to multiple sinks.
|
|
15
|
+
- `command_to_string(command: list[str]) -> str` / `command_from_string(s: str) -> list[str]` — platform-neutral serialize/deserialize of command arrays for storage and cross-platform bundles.
|
|
16
|
+
- `get_sys_executable() -> str` — `sys.executable` with platform-appropriate handling (see pitfalls).
|
|
17
|
+
|
|
18
|
+
## Pitfalls
|
|
19
|
+
|
|
20
|
+
- **Non-UTF-8 subprocess output is silently replaced.** `consume_process_output` and `stream_text` (via `TextReceiveStream(errors="replace")`) replace invalid bytes with the Unicode replacement character `\ufffd` rather than raising. If captured output contains `\ufffd`, the subprocess emitted bytes that were not valid UTF-8.
|
|
21
|
+
- **`command_to_string` always uses POSIX quoting (`shlex.join`), even on Windows.** This is intentional for platform-neutral storage — bundle commands are serialized by one platform and may be deserialized by another. `command_from_string` uses a dual-path approach: if the string was POSIX-serialized by Prefect (round-trips cleanly through `shlex.split`/`shlex.join`), it uses POSIX parsing; otherwise it falls back to native Windows command-line parsing (`CommandLineToArgvW`). Do not use `" ".join(command)` or `shlex.split(command)` directly when working with stored Prefect commands — use these helpers instead.
|
|
22
|
+
- **`get_sys_executable()` no longer quotes the Python path on Windows.** It previously returned `'"path/to/python"'` (with embedded quotes) on Windows; now it returns the raw path. Code relying on the old quoted form (e.g., joining into a shell string) will break — use `subprocess.list2cmdline` or `command_to_string` for shell-safe serialization instead.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# schema_tools
|
|
2
|
+
|
|
3
|
+
Hydration and validation of `__prefect_kind` template structures used in deployment parameters and automation action payloads.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Resolves `__prefect_kind` structures into real Python values (hydration) and validates JSON Schema parameter specs with first-class support for Prefect's placeholder types (validation).
|
|
8
|
+
|
|
9
|
+
## Entry Point
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from prefect.utilities.schema_tools.hydration import hydrate, HydrationContext
|
|
13
|
+
|
|
14
|
+
ctx = HydrationContext(render_jinja=True, jinja_context={"event": event})
|
|
15
|
+
result = hydrate(parameters, ctx)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## `__prefect_kind` Contracts
|
|
19
|
+
|
|
20
|
+
| Kind | Input structure | Output | Notes |
|
|
21
|
+
|------|----------------|--------|-------|
|
|
22
|
+
| `"jinja"` | `{"__prefect_kind": "jinja", "template": "..."}` | `str` | **Always returns a string** — even if the template renders a number |
|
|
23
|
+
| `"json"` | `{"__prefect_kind": "json", "value": ...}` | parsed value | If `value` is already a non-string (int, bool, list, dict, None), it is returned as-is without JSON decoding |
|
|
24
|
+
| `"workspace_variable"` | `{"__prefect_kind": "workspace_variable", "variable_name": "..."}` | variable value | Requires `render_workspace_variables=True` in context |
|
|
25
|
+
|
|
26
|
+
**Critical non-obvious invariant:** `jinja` kind always returns a `str`. To preserve the original type of a templated value (int, float, bool, list, dict), use the json+jinja pattern with `| tojson`:
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
# Type-preserving round-trip for a single expression:
|
|
30
|
+
{
|
|
31
|
+
"__prefect_kind": "json",
|
|
32
|
+
"value": {
|
|
33
|
+
"__prefect_kind": "jinja",
|
|
34
|
+
"template": "{{ value | tojson }}"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
# Renders {{ value | tojson }} → JSON string → json.loads() → original type
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This is the pattern used by `RunDeployment._wrap_v1_template` for single-expression Jinja parameters.
|
|
41
|
+
|
|
42
|
+
## Placeholder Protocol
|
|
43
|
+
|
|
44
|
+
Handlers return `Placeholder` subclasses (e.g. `RemoveValue`, `InvalidJSON`, `InvalidJinja`) when values are missing or rendering fails. `hydrate()` removes keys with `RemoveValue` and propagates error placeholders unless `raise_on_error=True` in the context.
|
|
45
|
+
|
|
46
|
+
## Anti-Patterns
|
|
47
|
+
|
|
48
|
+
- **Don't use `jinja` kind and expect a typed value** — it always returns a string. Use `json` + `jinja` + `| tojson` for type preservation.
|
|
49
|
+
- **Don't add server imports to this module** — it's used client-side too. `HydrationContext.build()` is an explicit exception (async, server-only); the rest of `hydration.py` must remain importable without a running server.
|
|
50
|
+
|
|
51
|
+
## Pitfalls
|
|
52
|
+
|
|
53
|
+
- **`HydrationContext` workspace variables are loaded once at build time.** Stale contexts don't reflect variable updates made after context creation.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# templating
|
|
2
|
+
|
|
3
|
+
Placeholder detection and value application for Prefect's `{{ }}` templating used in block references, workspace variables, and parameter templating.
|
|
4
|
+
|
|
5
|
+
## Purpose & Scope
|
|
6
|
+
|
|
7
|
+
Finds `{{ ... }}` placeholders inside nested structures (`find_placeholders`) and substitutes their resolved values back in (`apply_values`). Distinguishes between standard placeholders, block-document references, and environment variable placeholders via `PlaceholderType`.
|
|
8
|
+
|
|
9
|
+
Note: this module is *not* a Jinja renderer. For Jinja hydration of `__prefect_kind: "jinja"` structures, see `../schema_tools/`. For user-facing Jinja templates in automation actions, see `prefect/server/utilities/user_templates.py`.
|
|
10
|
+
|
|
11
|
+
## Entry Points
|
|
12
|
+
|
|
13
|
+
- `find_placeholders(template) -> set[Placeholder]` — walk any dict/list/str and collect `{{ name }}` placeholders, classified by `PlaceholderType`.
|
|
14
|
+
- `apply_values(template, values) -> template` — substitute resolved values back into the nested structure.
|
|
15
|
+
- `determine_placeholder_type(name) -> PlaceholderType` — classify a placeholder name as STANDARD / BLOCK_DOCUMENT / ENV_VAR.
|
|
16
|
+
|
|
17
|
+
## Pitfalls
|
|
18
|
+
|
|
19
|
+
- **`resolve_block_document_references` raises `ValueError` for malformed block placeholders.** Placeholders must follow the format `prefect.blocks.<block-type-slug>.<block-document-name>` (at least two dot-separated parts after the prefix). A placeholder like `{{ prefect.blocks.only-type }}` (missing the document name) raises `ValueError` before any network call is made.
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Utilities
|
|
2
|
-
|
|
3
|
-
General-purpose helpers and cross-cutting tools used throughout the Prefect SDK and server.
|
|
4
|
-
|
|
5
|
-
## Purpose & Scope
|
|
6
|
-
|
|
7
|
-
Shared utilities: data manipulation, async helpers, schema tooling, callables introspection, and infrastructure helpers. These modules have no common theme beyond being broadly reused — if something is self-contained and used across two or more subsystems, it lives here.
|
|
8
|
-
|
|
9
|
-
Does NOT include: server-specific utilities (`server/utilities/`), concurrency slot management (`concurrency/`), or logging infrastructure (`logging/`).
|
|
10
|
-
|
|
11
|
-
## Key Submodules
|
|
12
|
-
|
|
13
|
-
- `schema_tools/` — Hydration and validation of `__prefect_kind` template structures (see below)
|
|
14
|
-
- `asyncutils.py` — Async/sync bridge utilities and concurrency helpers
|
|
15
|
-
- `callables.py` — Function signature introspection and parameter coercion
|
|
16
|
-
- `collections.py` — Extended collection helpers (visit, flatten, remove nested keys)
|
|
17
|
-
- `annotations.py` — Custom Prefect type annotations used in flow/task signatures
|
|
18
|
-
- `processutils.py` — Subprocess execution, output streaming, and command serialization helpers (`run_process`, `consume_process_output`, `stream_text`, `command_to_string`, `command_from_string`)
|
|
19
|
-
- `pydantic.py` — Pydantic v1/v2 compatibility shims
|
|
20
|
-
- `templating.py` — Jinja template utilities and `maybe_template()` detection
|
|
21
|
-
- `filesystem.py` — File filtering (`filter_files`), path normalization, and `tmpchdir` context manager
|
|
22
|
-
- `engine.py` — Result-to-state linking and identity-verified lookup for `EngineContext`; provides `link_state_to_result`, `get_state_for_result`, `link_state_to_flow_run_result`, and `link_state_to_task_run_result`
|
|
23
|
-
|
|
24
|
-
## schema_tools: Hydration System
|
|
25
|
-
|
|
26
|
-
`schema_tools/hydration.py` resolves `__prefect_kind` structures into real Python values. These structures appear in deployment parameters and automation action payloads.
|
|
27
|
-
|
|
28
|
-
### Entry Point
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
from prefect.utilities.schema_tools.hydration import hydrate, HydrationContext
|
|
32
|
-
|
|
33
|
-
ctx = HydrationContext(render_jinja=True, jinja_context={"event": event})
|
|
34
|
-
result = hydrate(parameters, ctx)
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### `__prefect_kind` Contracts
|
|
38
|
-
|
|
39
|
-
| Kind | Input structure | Output | Notes |
|
|
40
|
-
|------|----------------|--------|-------|
|
|
41
|
-
| `"jinja"` | `{"__prefect_kind": "jinja", "template": "..."}` | `str` | **Always returns a string** — even if the template renders a number |
|
|
42
|
-
| `"json"` | `{"__prefect_kind": "json", "value": ...}` | parsed value | If `value` is already a non-string (int, bool, list, dict, None), it is returned as-is without JSON decoding |
|
|
43
|
-
| `"workspace_variable"` | `{"__prefect_kind": "workspace_variable", "variable_name": "..."}` | variable value | Requires `render_workspace_variables=True` in context |
|
|
44
|
-
|
|
45
|
-
**Critical non-obvious invariant:** `jinja` kind always returns a `str`. To preserve the original type of a templated value (int, float, bool, list, dict), use the json+jinja pattern with `| tojson`:
|
|
46
|
-
|
|
47
|
-
```python
|
|
48
|
-
# Type-preserving round-trip for a single expression:
|
|
49
|
-
{
|
|
50
|
-
"__prefect_kind": "json",
|
|
51
|
-
"value": {
|
|
52
|
-
"__prefect_kind": "jinja",
|
|
53
|
-
"template": "{{ value | tojson }}"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
# Renders {{ value | tojson }} → JSON string → json.loads() → original type
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
This is the pattern used by `RunDeployment._wrap_v1_template` for single-expression Jinja parameters.
|
|
60
|
-
|
|
61
|
-
### Placeholder Protocol
|
|
62
|
-
|
|
63
|
-
Handlers return `Placeholder` subclasses (e.g. `RemoveValue`, `InvalidJSON`, `InvalidJinja`) when values are missing or rendering fails. The `hydrate()` function removes keys with `RemoveValue` and propagates error placeholders unless `raise_on_error=True` in the context.
|
|
64
|
-
|
|
65
|
-
## Anti-Patterns
|
|
66
|
-
|
|
67
|
-
- **Don't use `jinja` kind and expect a typed value** — it always returns a string. Use `json` + `jinja` + `| tojson` for type preservation.
|
|
68
|
-
- **Don't add server imports to utility modules** — these are used client-side too. `HydrationContext.build()` is an exception (async, server-only) but the rest of `hydration.py` must remain importable without a running server.
|
|
69
|
-
|
|
70
|
-
## Pitfalls
|
|
71
|
-
|
|
72
|
-
- `maybe_template(s)` (in `templating.py`) only checks whether a string looks like it contains a Jinja expression — it does not validate that it's well-formed. A string with `{{` but no `}}` returns `True`.
|
|
73
|
-
- **`resolve_block_document_references` raises `ValueError` for malformed block placeholders.** Placeholders must follow the format `prefect.blocks.<block-type-slug>.<block-document-name>` (at least two dot-separated parts after the prefix). A placeholder like `{{ prefect.blocks.only-type }}` (missing the document name) raises `ValueError` before any network call is made.
|
|
74
|
-
- `HydrationContext` workspace variables are loaded once at build time. Stale contexts don't reflect variable updates made after context creation.
|
|
75
|
-
- **Non-UTF-8 subprocess output is silently replaced.** `consume_process_output` and `stream_text` (via `TextReceiveStream(errors="replace")`) replace invalid bytes with the Unicode replacement character `\ufffd` rather than raising. If captured output contains `\ufffd`, the subprocess emitted bytes that were not valid UTF-8.
|
|
76
|
-
- **`parameters_to_args_kwargs` adjusts the positional/keyword split based on the wrapper's signature, not the wrapped function's.** For `@functools.wraps`-decorated callables, it inspects the *wrapper* (via `follow_wrapped=False`) to count how many positional slots are actually available and routes excess parameters to `**kwargs`. This means `args` and `kwargs` from this function are shaped for the *wrapper* call, not the inner function — callers must not assume all POSITIONAL_OR_KEYWORD parameters end up in `args`.
|
|
77
|
-
- **`parameters_to_args_kwargs` skips the positional-to-keyword rewrite entirely when the function signature contains `*args`.** Inserting KEYWORD_ONLY parameters before a VAR_POSITIONAL parameter is invalid in Python, so the original signature is used as-is in that case.
|
|
78
|
-
- **Passing the same key in both an explicit parameter and a `**kwargs` dict raises `TypeError`.** `parameters_to_args_kwargs` detects when a VAR_KEYWORD (`**kwargs`) dict contains a key that also appears as an explicit parameter and raises rather than silently letting the variadic entry win. Exception: POSITIONAL_ONLY parameters are exempt because `fn(1, **{'a': 2})` is legal when `a` is positional-only.
|
|
79
|
-
- **`filter_files` with `include_dirs=True` (the default) always includes all ancestor directories of matched files**, even if those directories weren't directly matched by the ignore patterns. This ensures `shutil.copytree`'s `ignore_func` doesn't skip directories containing files that should be copied. Side effect: callers expecting only pathspec-matched entries will receive additional directory paths. The parent-dir expansion does NOT run when `include_dirs=False`.
|
|
80
|
-
- **`generate_parameter_schema` silently downgrades unsupported parameter types to `Any`.** When a parameter's type raises `ValueError`, `TypeError`, or `PydanticInvalidForJsonSchema` during JSON schema generation (e.g., `Callable`, custom types Pydantic can't serialize), the type is replaced with `Any` in the output schema without warning. If a flow parameter shows up as `Any` in the schema, the declared type is not JSON-schema-compatible.
|
|
81
|
-
- **Never access `EngineContext.run_results` directly via `id(obj)`.** Always call `get_state_for_result(obj)`.
|
|
82
|
-
- **`command_to_string` always uses POSIX quoting (`shlex.join`), even on Windows.** This is intentional for platform-neutral storage — bundle commands are serialized by one platform and may be deserialized by another. `command_from_string` uses a dual-path approach: if the string was POSIX-serialized by Prefect (round-trips cleanly through `shlex.split`/`shlex.join`), it uses POSIX parsing; otherwise it falls back to native Windows command-line parsing (`CommandLineToArgvW`). Do not use `" ".join(command)` or `shlex.split(command)` directly when working with stored Prefect commands — use these helpers instead.
|
|
83
|
-
- **`get_sys_executable()` no longer quotes the Python path on Windows.** It previously returned `'"path/to/python"'` (with embedded quotes) on Windows; now it returns the raw path. Code relying on the old quoted form (e.g., joining into a shell string) will break — use `subprocess.list2cmdline` or `command_to_string` for shell-safe serialization instead.
|
|
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.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/_launchers.py
RENAMED
|
File without changes
|
|
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.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/client.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_experimental/sla/objects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/emit.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/analytics/service.py
RENAMED
|
File without changes
|
|
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.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/api.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/concurrency/calls.py
RENAMED
|
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.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/control_listener.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/installation.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/observability.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/pydantic/schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/bases.py
RENAMED
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/schemas/fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.27.dev5 → prefect_client-3.6.28.dev1}/src/prefect/_internal/websockets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|