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.
Files changed (421) hide show
  1. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/.gitignore +1 -0
  2. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/PKG-INFO +1 -1
  3. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/AGENTS.md +2 -0
  4. prefect_client-3.6.28.dev4/src/prefect/_build_info.py +5 -0
  5. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/__init__.py +56 -0
  6. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/deprecated.py +7 -1
  7. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_result_records.py +16 -1
  8. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/serializers.py +38 -2
  9. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_datetime.py +89 -39
  10. prefect_client-3.6.28.dev3/src/prefect/_build_info.py +0 -5
  11. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/LICENSE +0 -0
  12. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/README.md +0 -0
  13. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/pyproject.toml +0 -0
  14. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/.prefectignore +0 -0
  15. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/__init__.py +0 -0
  16. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/__main__.py +0 -0
  17. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/__init__.py +0 -0
  18. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/_launchers.py +0 -0
  19. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
  20. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
  21. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
  22. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
  23. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
  24. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
  25. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/__init__.py +0 -0
  26. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/apply.py +0 -0
  27. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  28. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/manager.py +0 -0
  29. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/plugins/spec.py +0 -0
  30. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
  31. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/client.py +0 -0
  32. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
  33. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/__init__.py +0 -0
  34. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/_logging.py +0 -0
  35. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/__init__.py +0 -0
  36. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  37. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/client.py +0 -0
  38. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/device_id.py +0 -0
  39. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/emit.py +0 -0
  40. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/enabled.py +0 -0
  41. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/events.py +0 -0
  42. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/milestones.py +0 -0
  43. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/notice.py +0 -0
  44. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/analytics/service.py +0 -0
  45. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
  46. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  47. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/backports.py +0 -0
  48. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/blocks.py +0 -0
  49. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
  50. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/compatibility/starlette.py +0 -0
  51. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
  52. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
  53. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
  54. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  55. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  56. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
  57. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
  58. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
  59. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
  60. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
  61. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/control_listener.py +0 -0
  62. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/installation.py +0 -0
  63. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/integrations.py +0 -0
  64. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/lazy.py +0 -0
  65. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/observability.py +0 -0
  66. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
  67. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
  68. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  69. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  70. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  71. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/pytz.py +0 -0
  72. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/retries.py +0 -0
  73. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
  74. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
  75. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
  76. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
  77. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/schemas/validators.py +0 -0
  78. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  79. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/testing.py +0 -0
  80. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/urls.py +0 -0
  81. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/uuid7.py +0 -0
  82. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_internal/websockets.py +0 -0
  83. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_observers.py +0 -0
  84. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/__init__.py +0 -0
  85. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/fetcher.py +0 -0
  86. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/generator.py +0 -0
  87. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/models.py +0 -0
  88. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/naming.py +0 -0
  89. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/renderer.py +0 -0
  90. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/schema_converter.py +0 -0
  91. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/templates/__init__.py +0 -0
  92. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  93. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/types.py +0 -0
  94. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_sdk/unions.py +0 -0
  95. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_states.py +0 -0
  96. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
  97. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
  98. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_versioning.py +0 -0
  99. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/_waiters.py +0 -0
  100. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/agent.py +0 -0
  101. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/analytics/__init__.py +0 -0
  102. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/artifacts.py +0 -0
  103. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/__init__.py +0 -0
  104. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/core.py +0 -0
  105. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/assets/materialize.py +0 -0
  106. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/automations.py +0 -0
  107. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/AGENTS.md +0 -0
  108. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/__init__.py +0 -0
  109. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/abstract.py +0 -0
  110. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/core.py +0 -0
  111. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/fields.py +0 -0
  112. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/notifications.py +0 -0
  113. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/redis.py +0 -0
  114. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/system.py +0 -0
  115. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/blocks/webhook.py +0 -0
  116. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/cache_policies.py +0 -0
  117. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/AGENTS.md +0 -0
  118. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/__init__.py +0 -0
  119. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/_version_checking.py +0 -0
  120. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/attribution.py +0 -0
  121. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/base.py +0 -0
  122. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/cloud.py +0 -0
  123. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/collections.py +0 -0
  124. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/constants.py +0 -0
  125. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
  126. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  127. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  128. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  129. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
  130. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  131. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  132. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  133. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  134. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  135. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  136. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  137. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  138. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  139. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  140. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  141. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_events/client.py +0 -0
  142. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  143. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  144. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  145. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
  146. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  147. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
  148. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  149. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
  150. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  151. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  152. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/base.py +0 -0
  153. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/orchestration/routes.py +0 -0
  154. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/__init__.py +0 -0
  155. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/actions.py +0 -0
  156. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/events.py +0 -0
  157. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/filters.py +0 -0
  158. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/objects.py +0 -0
  159. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/responses.py +0 -0
  160. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/schedules.py +0 -0
  161. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/schemas/sorting.py +0 -0
  162. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/subscriptions.py +0 -0
  163. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/types/__init__.py +0 -0
  164. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  165. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/client/utilities.py +0 -0
  166. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/AGENTS.md +0 -0
  167. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/__init__.py +0 -0
  168. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
  169. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_events.py +0 -0
  170. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_leases.py +0 -0
  171. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/_sync.py +0 -0
  172. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/asyncio.py +0 -0
  173. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/context.py +0 -0
  174. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/services.py +0 -0
  175. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/sync.py +0 -0
  176. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
  177. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  178. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
  179. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
  180. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/context.py +0 -0
  181. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/services.py +0 -0
  182. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
  183. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/context.py +0 -0
  184. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/AGENTS.md +0 -0
  185. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/__init__.py +0 -0
  186. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/base.py +0 -0
  187. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/deployments.py +0 -0
  188. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/flow_runs.py +0 -0
  189. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/runner.py +0 -0
  190. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/schedules.py +0 -0
  191. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
  192. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/core.py +0 -0
  193. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/pull.py +0 -0
  194. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/deployments/steps/utility.py +0 -0
  195. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/__init__.py +0 -0
  196. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/_buildx.py +0 -0
  197. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/docker/docker_image.py +0 -0
  198. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/engine.py +0 -0
  199. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/AGENTS.md +0 -0
  200. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/__init__.py +0 -0
  201. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/actions.py +0 -0
  202. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/clients.py +0 -0
  203. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/filters.py +0 -0
  204. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/related.py +0 -0
  205. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/__init__.py +0 -0
  206. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/automations.py +0 -0
  207. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  208. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/events.py +0 -0
  209. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/schemas/labelling.py +0 -0
  210. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/subscribers.py +0 -0
  211. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/utilities.py +0 -0
  212. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/events/worker.py +0 -0
  213. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/exceptions.py +0 -0
  214. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/filesystems.py +0 -0
  215. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flow_engine.py +0 -0
  216. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flow_runs.py +0 -0
  217. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/flows.py +0 -0
  218. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/futures.py +0 -0
  219. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/__init__.py +0 -0
  220. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/base.py +0 -0
  221. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  222. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  223. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  224. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  225. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  226. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  227. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/__init__.py +0 -0
  228. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/actions.py +0 -0
  229. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/input/run_input.py +0 -0
  230. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/__init__.py +0 -0
  231. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/filesystem.py +0 -0
  232. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/memory.py +0 -0
  233. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/locking/protocol.py +0 -0
  234. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/AGENTS.md +0 -0
  235. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/__init__.py +0 -0
  236. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/clients.py +0 -0
  237. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/configuration.py +0 -0
  238. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/filters.py +0 -0
  239. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/formatters.py +0 -0
  240. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/handlers.py +0 -0
  241. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/highlighters.py +0 -0
  242. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/loggers.py +0 -0
  243. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/logging/logging.yml +0 -0
  244. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/main.py +0 -0
  245. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/plugins.py +0 -0
  246. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/py.typed +0 -0
  247. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/results.py +0 -0
  248. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/AGENTS.md +0 -0
  249. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/__init__.py +0 -0
  250. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_cancel_finalizer.py +0 -0
  251. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_cancellation_manager.py +0 -0
  252. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_control_channel.py +0 -0
  253. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_deployment_registry.py +0 -0
  254. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_event_emitter.py +0 -0
  255. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_flow_resolver.py +0 -0
  256. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_flow_run_executor.py +0 -0
  257. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_hook_runner.py +0 -0
  258. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_limit_manager.py +0 -0
  259. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_process_manager.py +0 -0
  260. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  261. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_bundle.py +0 -0
  262. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_direct.py +0 -0
  263. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_starter_engine.py +0 -0
  264. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/_state_proposer.py +0 -0
  265. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/runner.py +0 -0
  266. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/server.py +0 -0
  267. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runner/storage.py +0 -0
  268. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/__init__.py +0 -0
  269. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/deployment.py +0 -0
  270. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/flow_run.py +0 -0
  271. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/runtime/task_run.py +0 -0
  272. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/schedules.py +0 -0
  273. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/__init__.py +0 -0
  274. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/admin.py +0 -0
  275. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/artifacts.py +0 -0
  276. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/automations.py +0 -0
  277. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/background_workers.py +0 -0
  278. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
  279. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_documents.py +0 -0
  280. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_schemas.py +0 -0
  281. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/block_types.py +0 -0
  282. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/clients.py +0 -0
  283. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/collections.py +0 -0
  284. {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
  285. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
  286. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  287. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/csrf_token.py +0 -0
  288. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/dependencies.py +0 -0
  289. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/deployments.py +0 -0
  290. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/events.py +0 -0
  291. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
  292. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flow_runs.py +0 -0
  293. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/flows.py +0 -0
  294. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/logs.py +0 -0
  295. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/middleware.py +0 -0
  296. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/root.py +0 -0
  297. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/run_history.py +0 -0
  298. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/saved_searches.py +0 -0
  299. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/server.py +0 -0
  300. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  301. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_run_states.py +0 -0
  302. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_runs.py +0 -0
  303. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/task_workers.py +0 -0
  304. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/templates.py +0 -0
  305. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
  306. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
  307. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/flows.py +0 -0
  308. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
  309. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
  310. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/validation.py +0 -0
  311. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/variables.py +0 -0
  312. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/work_queues.py +0 -0
  313. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/server/api/workers.py +0 -0
  314. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/AGENTS.md +0 -0
  315. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/__init__.py +0 -0
  316. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/base.py +0 -0
  317. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/constants.py +0 -0
  318. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/context.py +0 -0
  319. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/legacy.py +0 -0
  320. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/__init__.py +0 -0
  321. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/_defaults.py +0 -0
  322. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/api.py +0 -0
  323. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/cli.py +0 -0
  324. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/client.py +0 -0
  325. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/cloud.py +0 -0
  326. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/deployments.py +0 -0
  327. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/events.py +0 -0
  328. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/experiments.py +0 -0
  329. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/flows.py +0 -0
  330. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/internal.py +0 -0
  331. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/logging.py +0 -0
  332. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/results.py +0 -0
  333. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/root.py +0 -0
  334. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/runner.py +0 -0
  335. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
  336. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/api.py +0 -0
  337. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/concurrency.py +0 -0
  338. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/database.py +0 -0
  339. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
  340. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/docket.py +0 -0
  341. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
  342. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/events.py +0 -0
  343. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  344. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/logs.py +0 -0
  345. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/root.py +0 -0
  346. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/services.py +0 -0
  347. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
  348. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/server/ui.py +0 -0
  349. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/tasks.py +0 -0
  350. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/telemetry.py +0 -0
  351. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/testing.py +0 -0
  352. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/models/worker.py +0 -0
  353. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/profiles.py +0 -0
  354. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/profiles.toml +0 -0
  355. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/settings/sources.py +0 -0
  356. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/states.py +0 -0
  357. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_engine.py +0 -0
  358. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_runners.py +0 -0
  359. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_runs.py +0 -0
  360. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/task_worker.py +0 -0
  361. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/tasks.py +0 -0
  362. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/__init__.py +0 -0
  363. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/_metrics.py +0 -0
  364. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
  365. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/transactions.py +0 -0
  366. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/__init__.py +0 -0
  367. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_concurrency.py +0 -0
  368. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/_schema.py +0 -0
  369. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/entrypoint.py +0 -0
  370. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/types/names.py +0 -0
  371. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/AGENTS.md +0 -0
  372. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/__init__.py +0 -0
  373. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_ast.py +0 -0
  374. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_deprecated.py +0 -0
  375. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_engine.py +0 -0
  376. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_git.py +0 -0
  377. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
  378. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/annotations.py +0 -0
  379. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  380. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  381. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/callables/AGENTS.md +0 -0
  382. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/callables/__init__.py +0 -0
  383. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/collections.py +0 -0
  384. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/compat.py +0 -0
  385. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/context.py +0 -0
  386. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/dispatch.py +0 -0
  387. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/dockerutils.py +0 -0
  388. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/engine/AGENTS.md +0 -0
  389. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/engine/__init__.py +0 -0
  390. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  391. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/filesystem/__init__.py +0 -0
  392. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/generics.py +0 -0
  393. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/hashing.py +0 -0
  394. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/importtools.py +0 -0
  395. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/math.py +0 -0
  396. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/names.py +0 -0
  397. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  398. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/processutils/__init__.py +0 -0
  399. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/pydantic.py +0 -0
  400. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/render_swagger.py +0 -0
  401. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  402. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  403. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  404. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
  405. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/services.py +0 -0
  406. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/slugify.py +0 -0
  407. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/templating/AGENTS.md +0 -0
  408. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/templating/__init__.py +0 -0
  409. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/text.py +0 -0
  410. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/timeout.py +0 -0
  411. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/urls.py +0 -0
  412. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/utilities/visualization.py +0 -0
  413. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/variables.py +0 -0
  414. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/AGENTS.md +0 -0
  415. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/__init__.py +0 -0
  416. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/base.py +0 -0
  417. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/block.py +0 -0
  418. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/cloud.py +0 -0
  419. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/process.py +0 -0
  420. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/server.py +0 -0
  421. {prefect_client-3.6.28.dev3 → prefect_client-3.6.28.dev4}/src/prefect/workers/utilities.py +0 -0
@@ -97,3 +97,4 @@ CLAUDE.md
97
97
 
98
98
  # Local planning artifacts
99
99
  .planning/
100
+ repros/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.6.28.dev3
3
+ Version: 3.6.28.dev4
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -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
 
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.6.28.dev4"
3
+ __build_date__ = "2026-04-22 08:42:19.175916+00:00"
4
+ __git_commit__ = "093cd05d7fae5c8f8bc2f93f5fae8bbdb2eb97dd"
5
+ __dirty__ = False
@@ -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
- PlainDateTime.from_py_datetime(start_date).add(months=6).py_datetime()
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=[{"type": str(exc), "input": kwargs["type"]}],
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
- Interval: TypeAlias = Union[datetime.timedelta, DateTimeDelta]
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
- zoned_datetime = ZonedDateTime.now(tz)
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, ZonedDateTime, days
199
+ from whenever import Weekday
157
200
 
158
201
  if not isinstance(dt.tzinfo, ZoneInfo):
159
- zdt = ZonedDateTime.from_py_datetime(
160
- dt.replace(tzinfo=ZoneInfo(dt.tzname() or "UTC"))
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
- zdt = zdt + days(days_till_end_of_week)
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.py_datetime()
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
- from whenever import ZonedDateTime
206
-
207
- if hasattr(dt, "tz"):
208
- zdt = ZonedDateTime.from_timestamp(
209
- dt.timestamp(), tz=dt.tz.name if dt.tz else "UTC"
210
- )
211
- else:
212
- zdt = ZonedDateTime.from_py_datetime(dt)
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 = PlainDateTime.from_py_datetime(dt)
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 = ZonedDateTime.from_py_datetime(dt).to_system_tz()
251
-
252
- return wdt.py_datetime()
293
+ wdt = _whenever_zdt_from_py(dt).to_system_tz()
253
294
 
254
- return DateTime.instance(dt).in_tz(pendulum.tz.local_timezone())
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 sys.version_info >= (3, 13) and isinstance(v, DateTimeDelta):
266
- _months, _days, _secs, _nanos = v.in_months_days_secs_nanos()
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 isinstance(v, datetime.timedelta) and v <= datetime.timedelta(0):
270
- raise ValueError("interval must be positive")
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
 
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.6.28.dev3"
3
- __build_date__ = "2026-04-21 18:00:52.018663+00:00"
4
- __git_commit__ = "8b1eae4d8feacb7b4a7bcf5de97c3bee7cf944c6"
5
- __dirty__ = False