prefect-client 3.6.28.dev3__tar.gz → 3.6.28.dev4__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.28.dev3 → prefect_client-3.6.28.dev4}/.gitignore +1 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/PKG-INFO +1 -1
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/AGENTS.md +2 -0
- prefect_client-3.6.28.dev4/src/prefect/_build_info.py +5 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/__init__.py +56 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/deprecated.py +7 -1
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_result_records.py +16 -1
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/serializers.py +38 -2
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_datetime.py +89 -39
- prefect_client-3.6.28.dev3/src/prefect/_build_info.py +0 -5
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/LICENSE +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/README.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/pyproject.toml +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/.prefectignore +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/__main__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/_launchers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/apply.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/manager.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/spec.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/_logging.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/ci_detection.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/device_id.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/emit.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/enabled.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/milestones.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/notice.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/service.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/backports.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/blocks.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/starlette.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/control_listener.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/installation.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/integrations.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/lazy.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/observability.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/validated_func.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pytz.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/retries.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/testing.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/urls.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/uuid7.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/websockets.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_observers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/fetcher.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/generator.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/models.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/naming.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/renderer.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/schema_converter.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/templates/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/types.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/unions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_states.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_versioning.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_waiters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/agent.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/analytics/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/artifacts.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/core.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/materialize.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/automations.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/abstract.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/core.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/fields.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/notifications.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/redis.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/system.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/webhook.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/cache_policies.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/_version_checking.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/attribution.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/cloud.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/collections.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/constants.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_events/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_events/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/routes.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/actions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/filters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/objects.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/responses.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/subscriptions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/types/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/utilities.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_leases.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_sync.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/context.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/services.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/sync.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/context.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/services.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/context.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/deployments.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/flow_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/runner.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/schedules.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/core.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/_buildx.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/docker_image.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/engine.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/actions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/clients.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/filters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/related.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/automations.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/subscribers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/utilities.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/worker.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/exceptions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/filesystems.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flow_engine.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flow_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flows.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/futures.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/actions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/run_input.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/filesystem.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/memory.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/protocol.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/clients.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/configuration.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/filters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/formatters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/handlers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/highlighters.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/loggers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/logging.yml +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/main.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/plugins.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/py.typed +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/results.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_cancel_finalizer.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_cancellation_manager.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_control_channel.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_deployment_registry.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_event_emitter.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_flow_resolver.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_flow_run_executor.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_hook_runner.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_limit_manager.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_process_manager.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_scheduled_run_poller.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_bundle.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_direct.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_engine.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_state_proposer.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/runner.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/server.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/storage.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/deployment.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/flow_run.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/task_run.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/schedules.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/admin.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/artifacts.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/automations.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/background_workers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_documents.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_schemas.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_types.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/clients.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/collections.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/csrf_token.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/dependencies.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/deployments.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flow_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flows.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/logs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/middleware.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/root.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/run_history.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/saved_searches.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/server.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_run_states.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_workers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/templates.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/flows.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/validation.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/variables.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/work_queues.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/workers.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/constants.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/context.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/legacy.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/_defaults.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/api.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/cli.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/client.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/cloud.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/deployments.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/experiments.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/flows.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/internal.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/logging.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/results.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/root.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/runner.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/api.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/concurrency.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/database.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/docket.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/events.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/logs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/root.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/services.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/ui.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/tasks.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/telemetry.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/testing.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/worker.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/profiles.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/profiles.toml +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/sources.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/states.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_engine.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_runners.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_runs.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_worker.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/tasks.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/_metrics.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/transactions.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_concurrency.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_schema.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/entrypoint.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/names.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_ast.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_deprecated.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_engine.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_git.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/annotations.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/asyncutils/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/callables/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/callables/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/collections.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/compat.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/context.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/dispatch.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/engine/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/engine/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/filesystem/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/generics.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/hashing.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/importtools.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/math.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/names.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/processutils/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/processutils/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/pydantic.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/services.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/slugify.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/templating/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/templating/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/text.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/timeout.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/urls.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/visualization.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/variables.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/AGENTS.md +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/__init__.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/base.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/block.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/cloud.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/process.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/server.py +0 -0
- {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/utilities.py +0 -0
|
@@ -21,10 +21,12 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
|
|
|
21
21
|
|
|
22
22
|
- **Engine ordering matters.** The engines apply features (retries, caching, result persistence, transactions) in a specific order. Changing the order or forgetting a feature in one engine path is the most common source of breakage.
|
|
23
23
|
- **Sync and async must stay in sync.** Both `flow_engine.py` and `task_engine.py` have sync and async paths. Any behavior change must be applied to both.
|
|
24
|
+
- **Use `whenever` compat helpers for all datetime conversions on Python 3.13+.** `types/_datetime.py` provides `_whenever_to_stdlib()`, `_whenever_zdt_from_py()`, and `_whenever_pdt_from_py()` to abstract over API differences between whenever 0.7.x–0.9.x and ≥ 0.10.0. The `_WHENEVER_NEW_API` flag (True when whenever ≥ 0.10.0) guards version-specific code. Never call `ZonedDateTime.from_py_datetime()`, `PlainDateTime.from_py_datetime()`, or `.py_datetime()` directly — use the helpers instead. Violations will silently break on whichever whenever version the helpers weren't written for.
|
|
24
25
|
- **Flow and task engines advance state differently.** The flow engine makes blocking API calls to the server to propose and advance states. The task engine emits `prefect.task_run.*` events (delivered via WebSockets) but advances state locally through `set_state` calls with polling/backoff — do not assume the two engines work the same way.
|
|
25
26
|
- **Flow state transitions go through the server.** The flow engine proposes states to the server, which accepts or rejects them via orchestration rules. The task engine, by contrast, manages state transitions locally via `set_state` and emits `prefect.task_run.*` events — it does not propose states to the server.
|
|
26
27
|
- **`ProcessPoolTaskRunner` requires picklable data across subprocess boundaries.** `PrefectFuture` objects are not picklable and cannot be passed to worker subprocesses. Any `wait_for` futures must be waited on in the parent process and converted to `State` objects before submission. The subprocess task engine handles `State` objects via `resolve_to_final_result`, which raises `UpstreamTaskError` for non-completed upstreams.
|
|
27
28
|
- **`ProcessPoolTaskRunner` instances may be deserialized without `__init__` running.** When a runner is pickled and restored in a subprocess, `__init__` is not called, so instance attributes set there may be absent. Access any such attribute via `getattr(self, "_attr", default)` rather than `self._attr` directly — both in the property getter and in `duplicate()`. The `subprocess_message_processor_factories` property demonstrates the required pattern.
|
|
29
|
+
- **`ResultRecordMetadata` tolerates unknown serializer types.** When loading persisted metadata, an unrecognized serializer `type` is converted to an `UnknownSerializer` placeholder rather than raising `ValidationError`. This allows inspecting result metadata when the serializer implementation is unavailable in the current environment. However, known serializer types with invalid fields still raise `ValidationError`. `UnknownSerializer.dumps()` and `UnknownSerializer.loads()` raise `RuntimeError` — the tolerance is for inspection only, not actual serialization/deserialization.
|
|
28
30
|
|
|
29
31
|
## Logging
|
|
30
32
|
|
|
@@ -23,7 +23,10 @@ from typing_extensions import Literal, NotRequired, TypeAlias
|
|
|
23
23
|
|
|
24
24
|
import anyio
|
|
25
25
|
import cloudpickle # pyright: ignore[reportMissingTypeStubs]
|
|
26
|
+
from packaging.requirements import InvalidRequirement, Requirement
|
|
27
|
+
from packaging.version import Version
|
|
26
28
|
|
|
29
|
+
import prefect
|
|
27
30
|
from prefect._internal.control_listener import configure_from_env
|
|
28
31
|
from prefect.client.schemas.objects import FlowRun
|
|
29
32
|
from prefect.context import SettingsContext, get_settings_context, serialize_context
|
|
@@ -616,6 +619,52 @@ def execute_bundle_in_subprocess(
|
|
|
616
619
|
return process
|
|
617
620
|
|
|
618
621
|
|
|
622
|
+
def _pin_prefect_in_bundle_step_requires(requires: list[str]) -> list[str]:
|
|
623
|
+
"""
|
|
624
|
+
Ensure the `uv run --with` requirements for an outer bundle-step process
|
|
625
|
+
include the exact current publishable Prefect version.
|
|
626
|
+
|
|
627
|
+
The outer bundle-step process imports Prefect before the bundle's frozen
|
|
628
|
+
dependencies are installed, so transitive constraints like
|
|
629
|
+
`prefect>=3.6.24` from integration packages can otherwise resolve an
|
|
630
|
+
older stable Prefect even when the bundle was built against a newer
|
|
631
|
+
version. Pinning `prefect=={prefect.__version__}` keeps the outer
|
|
632
|
+
process on the same version the bundle was built with.
|
|
633
|
+
|
|
634
|
+
- Rewrites any existing `prefect` (or `prefect[...]`) requirement to the
|
|
635
|
+
exact current version, preserving extras and markers.
|
|
636
|
+
- Appends `prefect=={prefect.__version__}` if no Prefect requirement is
|
|
637
|
+
present.
|
|
638
|
+
- Returns the requirements unchanged for local/unpublishable versions,
|
|
639
|
+
matching the behavior of `prefect._internal.installation`.
|
|
640
|
+
"""
|
|
641
|
+
version = Version(prefect.__version__)
|
|
642
|
+
if version.local:
|
|
643
|
+
return requires
|
|
644
|
+
|
|
645
|
+
pinned_version = prefect.__version__
|
|
646
|
+
updated: list[str] = []
|
|
647
|
+
found_prefect = False
|
|
648
|
+
for requirement in requires:
|
|
649
|
+
try:
|
|
650
|
+
parsed = Requirement(requirement)
|
|
651
|
+
except InvalidRequirement:
|
|
652
|
+
updated.append(requirement)
|
|
653
|
+
continue
|
|
654
|
+
if parsed.name.lower() != "prefect":
|
|
655
|
+
updated.append(requirement)
|
|
656
|
+
continue
|
|
657
|
+
found_prefect = True
|
|
658
|
+
extras = f"[{','.join(sorted(parsed.extras))}]" if parsed.extras else ""
|
|
659
|
+
marker = f" ; {parsed.marker}" if parsed.marker else ""
|
|
660
|
+
updated.append(f"prefect{extras}=={pinned_version}{marker}")
|
|
661
|
+
|
|
662
|
+
if not found_prefect:
|
|
663
|
+
updated.append(f"prefect=={pinned_version}")
|
|
664
|
+
|
|
665
|
+
return updated
|
|
666
|
+
|
|
667
|
+
|
|
619
668
|
def convert_step_to_command(
|
|
620
669
|
step: dict[str, Any], key: str, quiet: bool = False
|
|
621
670
|
) -> list[str]:
|
|
@@ -655,6 +704,13 @@ def convert_step_to_command(
|
|
|
655
704
|
if quiet:
|
|
656
705
|
command.append("--quiet")
|
|
657
706
|
|
|
707
|
+
# Pin the outer bundle-step process to the current publishable Prefect
|
|
708
|
+
# version so integration `requires` like `prefect-aws>=0.5.5` cannot
|
|
709
|
+
# resolve an older stable Prefect via transitive `prefect>=...`
|
|
710
|
+
# constraints before the bundle's frozen dependencies are applied.
|
|
711
|
+
if requires:
|
|
712
|
+
requires = _pin_prefect_in_bundle_step_requires(requires)
|
|
713
|
+
|
|
658
714
|
# Add the `--with` argument to handle dependencies for running the step
|
|
659
715
|
if requires:
|
|
660
716
|
command.extend(["--with", ",".join(requires)])
|
|
@@ -91,8 +91,14 @@ def generate_deprecation_message(
|
|
|
91
91
|
if sys.version_info >= (3, 13):
|
|
92
92
|
from whenever import PlainDateTime
|
|
93
93
|
|
|
94
|
+
_pdt_from_dt = (
|
|
95
|
+
PlainDateTime
|
|
96
|
+
if hasattr(PlainDateTime, "to_stdlib")
|
|
97
|
+
else PlainDateTime.from_py_datetime
|
|
98
|
+
)
|
|
99
|
+
_dt = _pdt_from_dt(start_date).add(months=6)
|
|
94
100
|
end_date = (
|
|
95
|
-
|
|
101
|
+
_dt.to_stdlib() if hasattr(_dt, "to_stdlib") else _dt.py_datetime()
|
|
96
102
|
)
|
|
97
103
|
else:
|
|
98
104
|
import pendulum
|
|
@@ -17,6 +17,7 @@ from pydantic import (
|
|
|
17
17
|
BaseModel,
|
|
18
18
|
Field,
|
|
19
19
|
ValidationError,
|
|
20
|
+
field_validator,
|
|
20
21
|
model_validator,
|
|
21
22
|
)
|
|
22
23
|
|
|
@@ -24,8 +25,9 @@ import prefect
|
|
|
24
25
|
from prefect.exceptions import (
|
|
25
26
|
SerializationError,
|
|
26
27
|
)
|
|
27
|
-
from prefect.serializers import PickleSerializer, Serializer
|
|
28
|
+
from prefect.serializers import PickleSerializer, Serializer, UnknownSerializer
|
|
28
29
|
from prefect.types import DateTime
|
|
30
|
+
from prefect.utilities.dispatch import lookup_type
|
|
29
31
|
|
|
30
32
|
if TYPE_CHECKING:
|
|
31
33
|
pass
|
|
@@ -49,6 +51,19 @@ class ResultRecordMetadata(BaseModel):
|
|
|
49
51
|
prefect_version: str = Field(default=prefect.__version__)
|
|
50
52
|
storage_block_id: Optional[uuid.UUID] = Field(default=None)
|
|
51
53
|
|
|
54
|
+
@field_validator("serializer", mode="before")
|
|
55
|
+
@classmethod
|
|
56
|
+
def _tolerate_unknown_serializer(
|
|
57
|
+
cls, value: Serializer | dict[str, Any] | Any
|
|
58
|
+
) -> Serializer | dict[str, Any] | Any:
|
|
59
|
+
if isinstance(value, dict) and "type" in value:
|
|
60
|
+
try:
|
|
61
|
+
lookup_type(Serializer, dispatch_key=value["type"])
|
|
62
|
+
except KeyError:
|
|
63
|
+
return UnknownSerializer.model_construct(**value)
|
|
64
|
+
return Serializer(**value)
|
|
65
|
+
return value
|
|
66
|
+
|
|
52
67
|
def dump_bytes(self) -> bytes:
|
|
53
68
|
"""
|
|
54
69
|
Serialize the metadata to bytes.
|
|
@@ -132,9 +132,16 @@ class Serializer(BaseModel, Generic[D]):
|
|
|
132
132
|
except KeyError as exc:
|
|
133
133
|
raise ValidationError.from_exception_data(
|
|
134
134
|
title=cls.__name__,
|
|
135
|
-
line_errors=[
|
|
135
|
+
line_errors=[
|
|
136
|
+
{
|
|
137
|
+
"type": "value_error",
|
|
138
|
+
"loc": ("type",),
|
|
139
|
+
"input": kwargs["type"],
|
|
140
|
+
"ctx": {"error": exc},
|
|
141
|
+
}
|
|
142
|
+
],
|
|
136
143
|
input_type="python",
|
|
137
|
-
)
|
|
144
|
+
) from exc
|
|
138
145
|
|
|
139
146
|
return super().__new__(subcls)
|
|
140
147
|
else:
|
|
@@ -158,6 +165,35 @@ class Serializer(BaseModel, Generic[D]):
|
|
|
158
165
|
return type_str if isinstance(type_str, str) else None
|
|
159
166
|
|
|
160
167
|
|
|
168
|
+
class UnknownSerializer(Serializer):
|
|
169
|
+
"""
|
|
170
|
+
Opaque placeholder for serializers that are unavailable in the current process.
|
|
171
|
+
|
|
172
|
+
This allows persisted result metadata to be inspected without importing the custom
|
|
173
|
+
serializer implementation. Actual serialization work still fails when attempted.
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
type: str
|
|
177
|
+
|
|
178
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(extra="allow")
|
|
179
|
+
|
|
180
|
+
@classmethod
|
|
181
|
+
def __dispatch_key__(cls) -> str:
|
|
182
|
+
return "__unknown__"
|
|
183
|
+
|
|
184
|
+
def dumps(self, obj: Any) -> bytes:
|
|
185
|
+
raise RuntimeError(
|
|
186
|
+
f"Serializer {self.type!r} is not available in this environment, so "
|
|
187
|
+
"serialization cannot be performed."
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
def loads(self, blob: bytes) -> Any:
|
|
191
|
+
raise RuntimeError(
|
|
192
|
+
f"Serializer {self.type!r} is not available in this environment, so "
|
|
193
|
+
"deserialization cannot be performed."
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
|
|
161
197
|
class PickleSerializer(Serializer[D]):
|
|
162
198
|
"""
|
|
163
199
|
Serializes objects using the pickle protocol.
|
|
@@ -14,12 +14,24 @@ from typing_extensions import TypeAlias
|
|
|
14
14
|
|
|
15
15
|
if sys.version_info >= (3, 13):
|
|
16
16
|
from whenever import DateTimeDelta
|
|
17
|
+
from whenever import ZonedDateTime as _ZDTProbe
|
|
18
|
+
|
|
19
|
+
# True on whenever >= 0.10.0, which introduced ZonedDateTime(stdlib_dt),
|
|
20
|
+
# start_of("day"), and to_stdlib(). False on 0.7.x–0.9.x.
|
|
21
|
+
_WHENEVER_NEW_API: bool = hasattr(_ZDTProbe, "to_stdlib")
|
|
22
|
+
del _ZDTProbe
|
|
17
23
|
|
|
18
24
|
DateTime: TypeAlias = datetime.datetime
|
|
19
25
|
Date: TypeAlias = datetime.date
|
|
20
26
|
Duration: TypeAlias = datetime.timedelta
|
|
21
|
-
|
|
27
|
+
if _WHENEVER_NEW_API:
|
|
28
|
+
from whenever import ItemizedDelta
|
|
29
|
+
|
|
30
|
+
Interval: TypeAlias = Union[datetime.timedelta, ItemizedDelta]
|
|
31
|
+
else:
|
|
32
|
+
Interval: TypeAlias = Union[datetime.timedelta, DateTimeDelta]
|
|
22
33
|
else:
|
|
34
|
+
_WHENEVER_NEW_API = False
|
|
23
35
|
import pendulum
|
|
24
36
|
import pendulum.tz
|
|
25
37
|
from pydantic_extra_types.pendulum_dt import (
|
|
@@ -115,6 +127,44 @@ def human_friendly_diff(
|
|
|
115
127
|
return pendulum_dt.diff_for_humans(other=pendulum_other)
|
|
116
128
|
|
|
117
129
|
|
|
130
|
+
def _whenever_to_stdlib(obj: Any) -> datetime.datetime:
|
|
131
|
+
"""Convert a whenever datetime object to a stdlib datetime.
|
|
132
|
+
|
|
133
|
+
Prefers `to_stdlib()` (newer whenever) and falls back to `py_datetime()`
|
|
134
|
+
for older releases that don't yet expose `to_stdlib()`.
|
|
135
|
+
"""
|
|
136
|
+
to_stdlib = getattr(obj, "to_stdlib", None)
|
|
137
|
+
if callable(to_stdlib):
|
|
138
|
+
return cast(datetime.datetime, to_stdlib())
|
|
139
|
+
return cast(datetime.datetime, obj.py_datetime())
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _whenever_zdt_from_py(dt: datetime.datetime) -> Any:
|
|
143
|
+
"""Create a ZonedDateTime from a stdlib datetime.
|
|
144
|
+
|
|
145
|
+
whenever >= 0.10.0 accepts a stdlib datetime directly in the constructor.
|
|
146
|
+
Older versions require the `from_py_datetime()` classmethod.
|
|
147
|
+
"""
|
|
148
|
+
from whenever import ZonedDateTime
|
|
149
|
+
|
|
150
|
+
if _WHENEVER_NEW_API:
|
|
151
|
+
return ZonedDateTime(dt) # type: ignore[arg-type]
|
|
152
|
+
return ZonedDateTime.from_py_datetime(dt)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _whenever_pdt_from_py(dt: datetime.datetime) -> Any:
|
|
156
|
+
"""Create a PlainDateTime from a naive stdlib datetime.
|
|
157
|
+
|
|
158
|
+
whenever >= 0.10.0 accepts a stdlib datetime directly in the constructor.
|
|
159
|
+
Older versions require the `from_py_datetime()` classmethod.
|
|
160
|
+
"""
|
|
161
|
+
from whenever import PlainDateTime
|
|
162
|
+
|
|
163
|
+
if _WHENEVER_NEW_API:
|
|
164
|
+
return PlainDateTime(dt) # type: ignore[arg-type]
|
|
165
|
+
return PlainDateTime.from_py_datetime(dt)
|
|
166
|
+
|
|
167
|
+
|
|
118
168
|
def now(
|
|
119
169
|
tz: str | Any = "UTC",
|
|
120
170
|
) -> datetime.datetime:
|
|
@@ -124,14 +174,7 @@ def now(
|
|
|
124
174
|
if isinstance(getattr(tz, "name", None), str):
|
|
125
175
|
tz = tz.name
|
|
126
176
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
# `whenever` is deprecating `py_datetime()` in favor of `to_stdlib()`,
|
|
130
|
-
# but older releases in our supported range do not expose `to_stdlib()`.
|
|
131
|
-
if callable(to_stdlib := getattr(zoned_datetime, "to_stdlib", None)):
|
|
132
|
-
return to_stdlib()
|
|
133
|
-
|
|
134
|
-
return zoned_datetime.py_datetime()
|
|
177
|
+
return _whenever_to_stdlib(ZonedDateTime.now(tz))
|
|
135
178
|
else:
|
|
136
179
|
return pendulum.now(tz)
|
|
137
180
|
|
|
@@ -153,14 +196,11 @@ def end_of_period(dt: datetime.datetime, period: str) -> datetime.datetime:
|
|
|
153
196
|
ValueError: If an invalid unit is specified.
|
|
154
197
|
"""
|
|
155
198
|
if sys.version_info >= (3, 13):
|
|
156
|
-
from whenever import Weekday
|
|
199
|
+
from whenever import Weekday
|
|
157
200
|
|
|
158
201
|
if not isinstance(dt.tzinfo, ZoneInfo):
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
)
|
|
162
|
-
else:
|
|
163
|
-
zdt = ZonedDateTime.from_py_datetime(dt)
|
|
202
|
+
dt = dt.replace(tzinfo=ZoneInfo(dt.tzname() or "UTC"))
|
|
203
|
+
zdt = _whenever_zdt_from_py(dt)
|
|
164
204
|
if period == "second":
|
|
165
205
|
zdt = zdt.replace(nanosecond=999999999)
|
|
166
206
|
elif period == "minute":
|
|
@@ -173,7 +213,14 @@ def end_of_period(dt: datetime.datetime, period: str) -> datetime.datetime:
|
|
|
173
213
|
days_till_end_of_week: int = (
|
|
174
214
|
Weekday.SUNDAY.value - zdt.date().day_of_week().value
|
|
175
215
|
)
|
|
176
|
-
|
|
216
|
+
if _WHENEVER_NEW_API:
|
|
217
|
+
from whenever import ItemizedDateDelta
|
|
218
|
+
|
|
219
|
+
zdt = zdt + ItemizedDateDelta(days=days_till_end_of_week)
|
|
220
|
+
else:
|
|
221
|
+
from whenever import days
|
|
222
|
+
|
|
223
|
+
zdt = zdt + days(days_till_end_of_week)
|
|
177
224
|
zdt = zdt.replace(
|
|
178
225
|
hour=23,
|
|
179
226
|
minute=59,
|
|
@@ -183,7 +230,7 @@ def end_of_period(dt: datetime.datetime, period: str) -> datetime.datetime:
|
|
|
183
230
|
else:
|
|
184
231
|
raise ValueError(f"Invalid period: {period}")
|
|
185
232
|
|
|
186
|
-
return zdt
|
|
233
|
+
return _whenever_to_stdlib(zdt)
|
|
187
234
|
else:
|
|
188
235
|
return DateTime.instance(dt).end_of(period)
|
|
189
236
|
|
|
@@ -202,16 +249,14 @@ def start_of_day(dt: datetime.datetime | DateTime) -> datetime.datetime:
|
|
|
202
249
|
ValueError: If an invalid unit is specified.
|
|
203
250
|
"""
|
|
204
251
|
if sys.version_info >= (3, 13):
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
zdt
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return zdt.start_of_day().py_datetime()
|
|
252
|
+
zdt = _whenever_zdt_from_py(dt)
|
|
253
|
+
zdt = (
|
|
254
|
+
zdt.start_of("day")
|
|
255
|
+
if callable(getattr(zdt, "start_of", None))
|
|
256
|
+
else zdt.start_of_day()
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
return _whenever_to_stdlib(zdt)
|
|
215
260
|
else:
|
|
216
261
|
return DateTime.instance(dt).start_of("day")
|
|
217
262
|
|
|
@@ -235,10 +280,8 @@ def travel_to(dt: Any):
|
|
|
235
280
|
|
|
236
281
|
def in_local_tz(dt: datetime.datetime) -> datetime.datetime:
|
|
237
282
|
if sys.version_info >= (3, 13):
|
|
238
|
-
from whenever import PlainDateTime, ZonedDateTime
|
|
239
|
-
|
|
240
283
|
if dt.tzinfo is None:
|
|
241
|
-
wdt =
|
|
284
|
+
wdt = _whenever_pdt_from_py(dt).assume_system_tz()
|
|
242
285
|
else:
|
|
243
286
|
if not isinstance(dt.tzinfo, ZoneInfo):
|
|
244
287
|
if key := getattr(dt.tzinfo, "key", None):
|
|
@@ -247,11 +290,11 @@ def in_local_tz(dt: datetime.datetime) -> datetime.datetime:
|
|
|
247
290
|
utc_dt = dt.astimezone(datetime.timezone.utc)
|
|
248
291
|
dt = utc_dt.replace(tzinfo=ZoneInfo("UTC"))
|
|
249
292
|
|
|
250
|
-
wdt =
|
|
251
|
-
|
|
252
|
-
return wdt.py_datetime()
|
|
293
|
+
wdt = _whenever_zdt_from_py(dt).to_system_tz()
|
|
253
294
|
|
|
254
|
-
|
|
295
|
+
return _whenever_to_stdlib(wdt)
|
|
296
|
+
else:
|
|
297
|
+
return DateTime.instance(dt).in_tz(pendulum.tz.local_timezone())
|
|
255
298
|
|
|
256
299
|
|
|
257
300
|
def to_datetime_string(dt: datetime.datetime, include_tz: bool = True) -> str:
|
|
@@ -262,12 +305,19 @@ def to_datetime_string(dt: datetime.datetime, include_tz: bool = True) -> str:
|
|
|
262
305
|
|
|
263
306
|
|
|
264
307
|
def _validate_positive_interval(v: Interval) -> Interval:
|
|
265
|
-
if
|
|
266
|
-
|
|
267
|
-
if _months <= 0 and _days <= 0 and _secs <= 0 and _nanos <= 0:
|
|
308
|
+
if isinstance(v, datetime.timedelta):
|
|
309
|
+
if v <= datetime.timedelta(0):
|
|
268
310
|
raise ValueError("interval must be positive")
|
|
269
|
-
elif
|
|
270
|
-
|
|
311
|
+
elif sys.version_info >= (3, 13):
|
|
312
|
+
if _WHENEVER_NEW_API:
|
|
313
|
+
from whenever import ItemizedDelta
|
|
314
|
+
|
|
315
|
+
if isinstance(v, ItemizedDelta) and v.sign() <= 0:
|
|
316
|
+
raise ValueError("interval must be positive")
|
|
317
|
+
elif isinstance(v, DateTimeDelta):
|
|
318
|
+
_months, _days, _secs, _nanos = v.in_months_days_secs_nanos()
|
|
319
|
+
if _months <= 0 and _days <= 0 and _secs <= 0 and _nanos <= 0:
|
|
320
|
+
raise ValueError("interval must be positive")
|
|
271
321
|
return v
|
|
272
322
|
|
|
273
323
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/apply.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/spec.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/client.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/emit.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/enabled.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/events.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/notice.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/api.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/control_listener.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/installation.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/observability.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/__init__.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/bases.py
RENAMED
|
File without changes
|
{prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/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.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/websockets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|