prefect 3.6.13__py3-none-any.whl → 3.6.13.dev2__py3-none-any.whl

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 (220) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/_internal/compatibility/blocks.py +0 -18
  3. prefect/client/schemas/filters.py +0 -24
  4. prefect/flow_engine.py +10 -192
  5. prefect/flows.py +2 -61
  6. prefect/results.py +21 -262
  7. prefect/runner/runner.py +82 -29
  8. prefect/runner/storage.py +2 -3
  9. prefect/server/schemas/filters.py +0 -45
  10. prefect/server/ui-v2/assets/{artifact-card-CUEaRDGw.js → artifact-card-C8JEQRHl.js} +2 -2
  11. prefect/server/ui-v2/assets/{artifact-card-CUEaRDGw.js.map → artifact-card-C8JEQRHl.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{artifact._id-Ca6VCUS0.js → artifact._id-67V8kTg9.js} +2 -2
  13. prefect/server/ui-v2/assets/{artifact._id-Ca6VCUS0.js.map → artifact._id-67V8kTg9.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{automation-wizard-z26pICBl.js → automation-wizard-DuxZ47Nn.js} +2 -2
  15. prefect/server/ui-v2/assets/{automation-wizard-z26pICBl.js.map → automation-wizard-DuxZ47Nn.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{automation._id-DuodjY5t.js → automation._id-D8S8r4Ji.js} +2 -2
  17. prefect/server/ui-v2/assets/{automation._id-DuodjY5t.js.map → automation._id-D8S8r4Ji.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{automation_._id.edit-CcuJhc-y.js → automation_._id.edit-C1fOM0Hx.js} +2 -2
  19. prefect/server/ui-v2/assets/{automation_._id.edit-CcuJhc-y.js.map → automation_._id.edit-C1fOM0Hx.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{automations-header-CgOWwuc6.js → automations-header-DrijTNGi.js} +2 -2
  21. prefect/server/ui-v2/assets/{automations-header-CgOWwuc6.js.map → automations-header-DrijTNGi.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{base-job-template-form-section-DN9HyjM5.js → base-job-template-form-section-BDkqOkpe.js} +2 -2
  23. prefect/server/ui-v2/assets/{base-job-template-form-section-DN9HyjM5.js.map → base-job-template-form-section-BDkqOkpe.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{block-type-details-rrToxL5r.js → block-type-details-CrFHWH5D.js} +2 -2
  25. prefect/server/ui-v2/assets/{block-type-details-rrToxL5r.js.map → block-type-details-CrFHWH5D.js.map} +1 -1
  26. prefect/server/ui-v2/assets/block-type-logo-WQNm0PzP.js +2 -0
  27. prefect/server/ui-v2/assets/{block-type-logo-DURScH8H.js.map → block-type-logo-WQNm0PzP.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{block._id-Bue6lnrN.js → block._id-C3gN1Ae8.js} +2 -2
  29. prefect/server/ui-v2/assets/{block._id-Bue6lnrN.js.map → block._id-C3gN1Ae8.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{block_._id.edit-QY0OzN_b.js → block_._id.edit-DzPuSvat.js} +2 -2
  31. prefect/server/ui-v2/assets/{block_._id.edit-QY0OzN_b.js.map → block_._id.edit-DzPuSvat.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{catalog-CGjRGWv6.js → catalog-T-7MqsyE.js} +2 -2
  33. prefect/server/ui-v2/assets/{catalog-CGjRGWv6.js.map → catalog-T-7MqsyE.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{catalog_._slug-BMFNZhEb.js → catalog_._slug-DMOI61fc.js} +2 -2
  35. prefect/server/ui-v2/assets/{catalog_._slug-BMFNZhEb.js.map → catalog_._slug-DMOI61fc.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{catalog_._slug_.create-CuFA3kUC.js → catalog_._slug_.create-l9bGUPi-.js} +2 -2
  37. prefect/server/ui-v2/assets/{catalog_._slug_.create-CuFA3kUC.js.map → catalog_._slug_.create-l9bGUPi-.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{collapsible-Ell2FjrX.js → collapsible-DM-Ze5-Y.js} +2 -2
  39. prefect/server/ui-v2/assets/{collapsible-Ell2FjrX.js.map → collapsible-DM-Ze5-Y.js.map} +1 -1
  40. prefect/server/ui-v2/assets/{concurrency-limit._id-Rr1ysUct.js → concurrency-limit._id-BHEt9viF.js} +2 -2
  41. prefect/server/ui-v2/assets/{concurrency-limit._id-Rr1ysUct.js.map → concurrency-limit._id-BHEt9viF.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{create-ewA3uq_h.js → create-BMxUOyN5.js} +2 -2
  43. prefect/server/ui-v2/assets/{create-ewA3uq_h.js.map → create-BMxUOyN5.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{create-CQK8-uO1.js → create-Cq-EAHVk.js} +2 -2
  45. prefect/server/ui-v2/assets/{create-CQK8-uO1.js.map → create-Cq-EAHVk.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{data-table-Bx1uYX_M.js → data-table-Bw8TZx9D.js} +2 -2
  47. prefect/server/ui-v2/assets/{data-table-Bx1uYX_M.js.map → data-table-Bw8TZx9D.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{delete-confirmation-dialog-CqKsUEj_.js → delete-confirmation-dialog-CTdWZlGM.js} +2 -2
  49. prefect/server/ui-v2/assets/{delete-confirmation-dialog-CqKsUEj_.js.map → delete-confirmation-dialog-CTdWZlGM.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment-action-header-Bz5COdER.js → deployment-action-header-BObYqmI_.js} +2 -2
  51. prefect/server/ui-v2/assets/{deployment-action-header-Bz5COdER.js.map → deployment-action-header-BObYqmI_.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{deployment-form-CrlZlNoj.js → deployment-form-CntyhRrK.js} +3 -3
  53. prefect/server/ui-v2/assets/{deployment-form-CrlZlNoj.js.map → deployment-form-CntyhRrK.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{deployment-links-D9ZR_vmp.js → deployment-links-DBUSCaxB.js} +2 -2
  55. prefect/server/ui-v2/assets/{deployment-links-D9ZR_vmp.js.map → deployment-links-DBUSCaxB.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{deployment._id-DvHhx-qN.js → deployment._id-BXanVFA8.js} +2 -2
  57. prefect/server/ui-v2/assets/{deployment._id-DvHhx-qN.js.map → deployment._id-BXanVFA8.js.map} +1 -1
  58. prefect/server/ui-v2/assets/{deployment._id-BV0rSqba.js → deployment._id-Q5cvHMX9.js} +2 -2
  59. prefect/server/ui-v2/assets/{deployment._id-BV0rSqba.js.map → deployment._id-Q5cvHMX9.js.map} +1 -1
  60. prefect/server/ui-v2/assets/deployment_._id.duplicate-DB-4hHHc.js +2 -0
  61. prefect/server/ui-v2/assets/{deployment_._id.duplicate-BrEOenqP.js.map → deployment_._id.duplicate-DB-4hHHc.js.map} +1 -1
  62. prefect/server/ui-v2/assets/deployment_._id.edit-CWf1RIGy.js +2 -0
  63. prefect/server/ui-v2/assets/{deployment_._id.edit-BbYKPK42.js.map → deployment_._id.edit-CWf1RIGy.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{deployment_._id.run-Dv7S_MJR.js → deployment_._id.run-CoHGXFoM.js} +2 -2
  65. prefect/server/ui-v2/assets/{deployment_._id.run-Dv7S_MJR.js.map → deployment_._id.run-CoHGXFoM.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{dropdown-menu-e0Fqb6aw.js → dropdown-menu-CT-s-V7d.js} +2 -2
  67. prefect/server/ui-v2/assets/{dropdown-menu-e0Fqb6aw.js.map → dropdown-menu-CT-s-V7d.js.map} +1 -1
  68. prefect/server/ui-v2/assets/{event._eventDate._eventId-Cp4UmGqq.js → event._eventDate._eventId-BITo_GYL.js} +2 -2
  69. prefect/server/ui-v2/assets/{event._eventDate._eventId-Cp4UmGqq.js.map → event._eventDate._eventId-BITo_GYL.js.map} +1 -1
  70. prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js +2 -0
  71. prefect/server/ui-v2/assets/{flow-run-graph-BrqoR3E2.js.map → flow-run-graph-DxIl6fzW.js.map} +1 -1
  72. prefect/server/ui-v2/assets/{flow-run._id-BOp38Pbq.js → flow-run._id-Bbm9OpDi.js} +2 -2
  73. prefect/server/ui-v2/assets/{flow-run._id-BOp38Pbq.js.map → flow-run._id-Bbm9OpDi.js.map} +1 -1
  74. prefect/server/ui-v2/assets/{flow-run._id-DJnTDEN_.js → flow-run._id-BtSgRDtA.js} +2 -2
  75. prefect/server/ui-v2/assets/{flow-run._id-DJnTDEN_.js.map → flow-run._id-BtSgRDtA.js.map} +1 -1
  76. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js +4 -0
  77. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js.map +1 -0
  78. prefect/server/ui-v2/assets/{flow-runs-pagination-Bq2ZUzM6.js → flow-runs-pagination-LrU9Aio8.js} +2 -2
  79. prefect/server/ui-v2/assets/{flow-runs-pagination-Bq2ZUzM6.js.map → flow-runs-pagination-LrU9Aio8.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{flow._id-eCBL95rg.js → flow._id-BJBRokk4.js} +2 -2
  81. prefect/server/ui-v2/assets/{flow._id-eCBL95rg.js.map → flow._id-BJBRokk4.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{form-DNerk3LS.js → form-CVSlEnl8.js} +2 -2
  83. prefect/server/ui-v2/assets/{form-DNerk3LS.js.map → form-CVSlEnl8.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{header-DwagHBlF.js → header-4plZZheZ.js} +2 -2
  85. prefect/server/ui-v2/assets/{header-DwagHBlF.js.map → header-4plZZheZ.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{header-huSvwxKI.js → header-9rXZ4r39.js} +2 -2
  87. prefect/server/ui-v2/assets/{header-huSvwxKI.js.map → header-9rXZ4r39.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{header-B0ejRncu.js → header-D3uM8_xM.js} +2 -2
  89. prefect/server/ui-v2/assets/{header-B0ejRncu.js.map → header-D3uM8_xM.js.map} +1 -1
  90. prefect/server/ui-v2/assets/{index-DI2DC5gd.js → index-6OsEYhIi.js} +2 -2
  91. prefect/server/ui-v2/assets/{index-DI2DC5gd.js.map → index-6OsEYhIi.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{index-BzN9bQeM.js → index-B7xsJ-QH.js} +2 -2
  93. prefect/server/ui-v2/assets/{index-BzN9bQeM.js.map → index-B7xsJ-QH.js.map} +1 -1
  94. prefect/server/ui-v2/assets/{index-CnIJUujl.js → index-BeoNC2tJ.js} +2 -2
  95. prefect/server/ui-v2/assets/{index-CnIJUujl.js.map → index-BeoNC2tJ.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{index-CTnoa3Ho.js → index-BfJLUM7N.js} +2 -2
  97. prefect/server/ui-v2/assets/{index-CTnoa3Ho.js.map → index-BfJLUM7N.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{index-CWkbSdxY.js → index-Bj0OOguP.js} +2 -2
  99. prefect/server/ui-v2/assets/{index-CWkbSdxY.js.map → index-Bj0OOguP.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{index-CBhi1P9g.js → index-BlpD74iH.js} +2 -2
  101. prefect/server/ui-v2/assets/{index-CBhi1P9g.js.map → index-BlpD74iH.js.map} +1 -1
  102. prefect/server/ui-v2/assets/{index-D5RdrxkU.js → index-BvSl3DKP.js} +8 -8
  103. prefect/server/ui-v2/assets/index-BvSl3DKP.js.map +1 -0
  104. prefect/server/ui-v2/assets/{index-BU4yZRd3.js → index-CDwJvjUM.js} +2 -2
  105. prefect/server/ui-v2/assets/{index-BU4yZRd3.js.map → index-CDwJvjUM.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{index-CRDz4nhM.js → index-CDyLkbVG.js} +2 -2
  107. prefect/server/ui-v2/assets/{index-CRDz4nhM.js.map → index-CDyLkbVG.js.map} +1 -1
  108. prefect/server/ui-v2/assets/{index-Cutg_A1j.js → index-ChIrfjIW.js} +2 -2
  109. prefect/server/ui-v2/assets/{index-Cutg_A1j.js.map → index-ChIrfjIW.js.map} +1 -1
  110. prefect/server/ui-v2/assets/{index-BhALpenO.js → index-CzCSgCK-.js} +2 -2
  111. prefect/server/ui-v2/assets/{index-BhALpenO.js.map → index-CzCSgCK-.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{index-Dg_duvDx.js → index-D5v9S-lB.js} +2 -2
  113. prefect/server/ui-v2/assets/{index-Dg_duvDx.js.map → index-D5v9S-lB.js.map} +1 -1
  114. prefect/server/ui-v2/assets/{index-DDiyFpIV.js → index-D6GJ4go1.js} +2 -2
  115. prefect/server/ui-v2/assets/{index-DDiyFpIV.js.map → index-D6GJ4go1.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{index-dSUEBAqg.js → index-DJyKqsFO.js} +2 -2
  117. prefect/server/ui-v2/assets/{index-dSUEBAqg.js.map → index-DJyKqsFO.js.map} +1 -1
  118. prefect/server/ui-v2/assets/{index-BO3SOwdV.js → index-DODEq1Pi.js} +2 -2
  119. prefect/server/ui-v2/assets/{index-BO3SOwdV.js.map → index-DODEq1Pi.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{index-Dspw5HFj.js → index-DicK6p3K.js} +2 -2
  121. prefect/server/ui-v2/assets/{index-Dspw5HFj.js.map → index-DicK6p3K.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{index-VOOLxiSE.js → index-DqCPbST9.js} +2 -2
  123. prefect/server/ui-v2/assets/{index-VOOLxiSE.js.map → index-DqCPbST9.js.map} +1 -1
  124. prefect/server/ui-v2/assets/{index-BTPE3vs7.js → index-DxPoKag8.js} +2 -2
  125. prefect/server/ui-v2/assets/{index-BTPE3vs7.js.map → index-DxPoKag8.js.map} +1 -1
  126. prefect/server/ui-v2/assets/{index-Wfs7Cjew.js → index-h9-QgNjZ.js} +2 -2
  127. prefect/server/ui-v2/assets/{index-Wfs7Cjew.js.map → index-h9-QgNjZ.js.map} +1 -1
  128. prefect/server/ui-v2/assets/{index-uvH5a3zO.js → index-tBdv6kBF.js} +2 -2
  129. prefect/server/ui-v2/assets/{index-uvH5a3zO.js.map → index-tBdv6kBF.js.map} +1 -1
  130. prefect/server/ui-v2/assets/{index-CgOsOj5t.js → index-udb79rgq.js} +2 -2
  131. prefect/server/ui-v2/assets/{index-CgOsOj5t.js.map → index-udb79rgq.js.map} +1 -1
  132. prefect/server/ui-v2/assets/{json-input-gXz7BuJj.js → json-input-Dt1icmrn.js} +2 -2
  133. prefect/server/ui-v2/assets/{json-input-gXz7BuJj.js.map → json-input-Dt1icmrn.js.map} +1 -1
  134. prefect/server/ui-v2/assets/{key._key-CJPbLXwU.js → key._key-Cyh5MBX_.js} +2 -2
  135. prefect/server/ui-v2/assets/{key._key-CJPbLXwU.js.map → key._key-Cyh5MBX_.js.map} +1 -1
  136. prefect/server/ui-v2/assets/{lazy-markdown-wPid80zf.js → lazy-markdown-BwIwKFRF.js} +2 -2
  137. prefect/server/ui-v2/assets/{lazy-markdown-wPid80zf.js.map → lazy-markdown-BwIwKFRF.js.map} +1 -1
  138. prefect/server/ui-v2/assets/{login-DC63bGXK.js → login-DKXFVSwk.js} +2 -2
  139. prefect/server/ui-v2/assets/{login-DC63bGXK.js.map → login-DKXFVSwk.js.map} +1 -1
  140. prefect/server/ui-v2/assets/{markdown-input-BhqrU6Eo.js → markdown-input-Dp0mBlkV.js} +2 -2
  141. prefect/server/ui-v2/assets/{markdown-input-BhqrU6Eo.js.map → markdown-input-Dp0mBlkV.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{python-example-snippet-3jtXWQZN.js → python-example-snippet-BYwPjHI5.js} +3 -3
  143. prefect/server/ui-v2/assets/{python-example-snippet-3jtXWQZN.js.map → python-example-snippet-BYwPjHI5.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{python-input-ZVi-v324.js → python-input-y26XMqXw.js} +2 -2
  145. prefect/server/ui-v2/assets/{python-input-ZVi-v324.js.map → python-input-y26XMqXw.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{radio-group-BBMLpHGc.js → radio-group-D0van45v.js} +2 -2
  147. prefect/server/ui-v2/assets/{radio-group-BBMLpHGc.js.map → radio-group-D0van45v.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{route-error-state-BJXl8qkX.js → route-error-state-CGGpuCGN.js} +2 -2
  149. prefect/server/ui-v2/assets/{route-error-state-BJXl8qkX.js.map → route-error-state-CGGpuCGN.js.map} +1 -1
  150. prefect/server/ui-v2/assets/{schema-form-BEqYjsM-.js → schema-form-2tg5SXM4.js} +2 -2
  151. prefect/server/ui-v2/assets/{schema-form-BEqYjsM-.js.map → schema-form-2tg5SXM4.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-l3xt3PWf.js → schema-form-input-string-format-datetime-CZt6AJ4z.js} +4 -4
  153. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-l3xt3PWf.js.map → schema-form-input-string-format-datetime-CZt6AJ4z.js.map} +1 -1
  154. prefect/server/ui-v2/assets/{settings-txD0dR5Q.js → settings-DDUadk_N.js} +2 -2
  155. prefect/server/ui-v2/assets/{settings-txD0dR5Q.js.map → settings-DDUadk_N.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{sort-filter-DHPFdKZ2.js → sort-filter-D9p3cPx9.js} +2 -2
  157. prefect/server/ui-v2/assets/{sort-filter-DHPFdKZ2.js.map → sort-filter-D9p3cPx9.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{table-ULfpXJXB.js → table-vo9Do8sA.js} +2 -2
  159. prefect/server/ui-v2/assets/{table-ULfpXJXB.js.map → table-vo9Do8sA.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{tags-input-BLzMOTDb.js → tags-input-Ci2JQ-k3.js} +2 -2
  161. prefect/server/ui-v2/assets/{tags-input-BLzMOTDb.js.map → tags-input-Ci2JQ-k3.js.map} +1 -1
  162. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BpeKHk7g.js → task-run-concurrency-limits-reset-dialog-CJzPc2gw.js} +2 -2
  163. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BpeKHk7g.js.map → task-run-concurrency-limits-reset-dialog-CJzPc2gw.js.map} +1 -1
  164. prefect/server/ui-v2/assets/{task-run._id-CkOl9MJs.js → task-run._id-CjevSs79.js} +2 -2
  165. prefect/server/ui-v2/assets/{task-run._id-CkOl9MJs.js.map → task-run._id-CjevSs79.js.map} +1 -1
  166. prefect/server/ui-v2/assets/{task-run._id-udkz1lhh.js → task-run._id-D8QKG5UZ.js} +2 -2
  167. prefect/server/ui-v2/assets/{task-run._id-udkz1lhh.js.map → task-run._id-D8QKG5UZ.js.map} +1 -1
  168. prefect/server/ui-v2/assets/{task-runs-pagination-B7D5K_FM.js → task-runs-pagination-CifoSGct.js} +2 -2
  169. prefect/server/ui-v2/assets/{task-runs-pagination-B7D5K_FM.js.map → task-runs-pagination-CifoSGct.js.map} +1 -1
  170. prefect/server/ui-v2/assets/{textarea-C4bdj7Jk.js → textarea-BAtfAxtV.js} +2 -2
  171. prefect/server/ui-v2/assets/{textarea-C4bdj7Jk.js.map → textarea-BAtfAxtV.js.map} +1 -1
  172. prefect/server/ui-v2/assets/{timezone-select-AdlSRQxZ.js → timezone-select-QlQTZSsF.js} +2 -2
  173. prefect/server/ui-v2/assets/{timezone-select-AdlSRQxZ.js.map → timezone-select-QlQTZSsF.js.map} +1 -1
  174. prefect/server/ui-v2/assets/{toggle-group-C-vxYz4l.js → toggle-group-BJN1vjEh.js} +2 -2
  175. prefect/server/ui-v2/assets/{toggle-group-C-vxYz4l.js.map → toggle-group-BJN1vjEh.js.map} +1 -1
  176. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Cqhaqtqe.js → use-delete-automation-confirmation-dialog-eOWJYPkD.js} +2 -2
  177. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Cqhaqtqe.js.map → use-delete-automation-confirmation-dialog-eOWJYPkD.js.map} +1 -1
  178. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-GjNhFxZe.js → use-delete-block-document-confirmation-dialog-BTwSeHRM.js} +2 -2
  179. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-GjNhFxZe.js.map → use-delete-block-document-confirmation-dialog-BTwSeHRM.js.map} +1 -1
  180. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DfwmswyR.js → use-flow-runs-selected-rows-BL_Gv9CC.js} +2 -2
  181. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DfwmswyR.js.map → use-flow-runs-selected-rows-BL_Gv9CC.js.map} +1 -1
  182. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BEBpG_5J.js → use-get-artifacts-flow-task-runs-TSCoomjQ.js} +2 -2
  183. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BEBpG_5J.js.map → use-get-artifacts-flow-task-runs-TSCoomjQ.js.map} +1 -1
  184. prefect/server/ui-v2/assets/{use-quick-run-BYBRcDwC.js → use-quick-run-BMnCkwSv.js} +2 -2
  185. prefect/server/ui-v2/assets/{use-quick-run-BYBRcDwC.js.map → use-quick-run-BMnCkwSv.js.map} +1 -1
  186. prefect/server/ui-v2/assets/{use-stepper-Bk97vOTm.js → use-stepper-C1wm66U2.js} +2 -2
  187. prefect/server/ui-v2/assets/{use-stepper-Bk97vOTm.js.map → use-stepper-C1wm66U2.js.map} +1 -1
  188. prefect/server/ui-v2/assets/{utilities-BQwGFLk5.js → utilities-DxRXxFOF.js} +2 -2
  189. prefect/server/ui-v2/assets/{utilities-BQwGFLk5.js.map → utilities-DxRXxFOF.js.map} +1 -1
  190. prefect/server/ui-v2/assets/{work-pool-filter-Ddhp_M-L.js → work-pool-filter-PudrkZYj.js} +2 -2
  191. prefect/server/ui-v2/assets/{work-pool-filter-Ddhp_M-L.js.map → work-pool-filter-PudrkZYj.js.map} +1 -1
  192. prefect/server/ui-v2/assets/{work-pool-queue-toggle-DX3eV3R_.js → work-pool-queue-toggle-BAOrV_0R.js} +2 -2
  193. prefect/server/ui-v2/assets/{work-pool-queue-toggle-DX3eV3R_.js.map → work-pool-queue-toggle-BAOrV_0R.js.map} +1 -1
  194. prefect/server/ui-v2/assets/{work-pool._workPoolName-BaRIsXBX.js → work-pool._workPoolName-BOM3849e.js} +2 -2
  195. prefect/server/ui-v2/assets/{work-pool._workPoolName-BaRIsXBX.js.map → work-pool._workPoolName-BOM3849e.js.map} +1 -1
  196. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-dhS_Xz32.js → work-pool_._workPoolName.edit-CIhcG6yr.js} +2 -2
  197. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-dhS_Xz32.js.map → work-pool_._workPoolName.edit-CIhcG6yr.js.map} +1 -1
  198. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js} +2 -2
  199. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js.map → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js.map} +1 -1
  200. prefect/server/ui-v2/assets/{work-queue-icon-text-_Ez8e2dw.js → work-queue-icon-text-CP4yX3uM.js} +2 -2
  201. prefect/server/ui-v2/assets/{work-queue-icon-text-_Ez8e2dw.js.map → work-queue-icon-text-CP4yX3uM.js.map} +1 -1
  202. prefect/server/ui-v2/index.html +1 -1
  203. prefect/settings/models/flows.py +1 -14
  204. prefect/settings/models/runner.py +6 -16
  205. prefect/task_engine.py +3 -1
  206. prefect/task_worker.py +1 -1
  207. prefect/tasks.py +2 -2
  208. prefect/testing/fixtures.py +5 -23
  209. {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/METADATA +1 -1
  210. {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/RECORD +213 -213
  211. prefect/server/ui-v2/assets/block-type-logo-DURScH8H.js +0 -2
  212. prefect/server/ui-v2/assets/deployment_._id.duplicate-BrEOenqP.js +0 -2
  213. prefect/server/ui-v2/assets/deployment_._id.edit-BbYKPK42.js +0 -2
  214. prefect/server/ui-v2/assets/flow-run-graph-BrqoR3E2.js +0 -2
  215. prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js +0 -4
  216. prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js.map +0 -1
  217. prefect/server/ui-v2/assets/index-D5RdrxkU.js.map +0 -1
  218. {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/WHEEL +0 -0
  219. {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/entry_points.txt +0 -0
  220. {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/licenses/LICENSE +0 -0
prefect/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.6.13"
3
- __build_date__ = "2026-01-23 03:49:46.368256+00:00"
4
- __git_commit__ = "9eb03a74b91426b564a1aa313670eb08a8b9ece8"
2
+ __version__ = "3.6.13.dev2"
3
+ __build_date__ = "2026-01-22 08:12:37.989944+00:00"
4
+ __git_commit__ = "3216a18c97baecb25fe70d3d46a93eb56ebd2adc"
5
5
  __dirty__ = False
@@ -4,24 +4,6 @@ from typing import Any, Union
4
4
  from prefect.filesystems import NullFileSystem, WritableFileSystem
5
5
 
6
6
 
7
- def call_explicitly_sync_block_method(
8
- block: Union[WritableFileSystem, NullFileSystem],
9
- method: str,
10
- args: tuple[Any, ...],
11
- kwargs: dict[str, Any],
12
- ) -> Any:
13
- """
14
- Call a block method synchronously.
15
-
16
- TODO: remove this once we have explicit sync/async methods on all storage blocks
17
-
18
- see https://github.com/PrefectHQ/prefect/issues/15008
19
- """
20
- # Pass _sync=True to ensure we get synchronous execution even when called
21
- # from an async context (e.g., within a sync flow running in an async test)
22
- return getattr(block, method)(*args, _sync=True, **kwargs)
23
-
24
-
25
7
  async def call_explicitly_async_block_method(
26
8
  block: Union[WritableFileSystem, NullFileSystem],
27
9
  method: str,
@@ -281,27 +281,6 @@ class FlowRunFilterIdempotencyKey(PrefectBaseModel):
281
281
  )
282
282
 
283
283
 
284
- class FlowRunFilterCreatedBy(PrefectBaseModel, OperatorMixin):
285
- """Filter by `FlowRun.created_by`."""
286
-
287
- id_: Optional[List[UUID]] = Field(
288
- default=None,
289
- description="A list of creator IDs to include",
290
- )
291
- type_: Optional[List[str]] = Field(
292
- default=None,
293
- description=(
294
- "A list of creator types to include. For example, 'DEPLOYMENT' for "
295
- "scheduled runs or 'AUTOMATION' for runs triggered by automations."
296
- ),
297
- examples=[["DEPLOYMENT", "AUTOMATION"]],
298
- )
299
- is_null_: Optional[bool] = Field(
300
- default=None,
301
- description="If true, only include flow runs without a creator",
302
- )
303
-
304
-
305
284
  class FlowRunFilter(PrefectBaseModel, OperatorMixin):
306
285
  """Filter flow runs. Only flow runs matching all criteria will be returned"""
307
286
 
@@ -345,9 +324,6 @@ class FlowRunFilter(PrefectBaseModel, OperatorMixin):
345
324
  idempotency_key: Optional[FlowRunFilterIdempotencyKey] = Field(
346
325
  default=None, description="Filter criteria for `FlowRun.idempotency_key`"
347
326
  )
348
- created_by: Optional[FlowRunFilterCreatedBy] = Field(
349
- default=None, description="Filter criteria for `FlowRun.created_by`"
350
- )
351
327
 
352
328
 
353
329
  class TaskRunFilterFlowRunId(PrefectBaseModel):
prefect/flow_engine.py CHANGED
@@ -5,7 +5,6 @@ import logging
5
5
  import multiprocessing
6
6
  import multiprocessing.context
7
7
  import os
8
- import threading
9
8
  import time
10
9
  from contextlib import (
11
10
  AsyncExitStack,
@@ -37,7 +36,7 @@ from anyio import CancelScope
37
36
  from opentelemetry import propagate, trace
38
37
  from typing_extensions import ParamSpec
39
38
 
40
- from prefect import Task, __version__
39
+ from prefect import Task
41
40
  from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_client
42
41
  from prefect.client.schemas import FlowRun, TaskRun
43
42
  from prefect.client.schemas.filters import FlowRunFilter
@@ -61,8 +60,6 @@ from prefect.context import (
61
60
  serialize_context,
62
61
  )
63
62
  from prefect.engine import handle_engine_signals
64
- from prefect.events.related import RelatedResource, tags_as_related_resources
65
- from prefect.events.utilities import emit_event
66
63
  from prefect.exceptions import (
67
64
  Abort,
68
65
  MissingFlowError,
@@ -164,129 +161,6 @@ def load_flow_and_flow_run(flow_run_id: UUID) -> tuple[FlowRun, Flow[..., Any]]:
164
161
  return flow_run, flow
165
162
 
166
163
 
167
- @contextmanager
168
- def send_heartbeats_sync(
169
- engine: "FlowRunEngine[Any, Any]",
170
- ) -> Generator[None, None, None]:
171
- """Context manager that maintains heartbeats for a sync flow run.
172
-
173
- Heartbeats are emitted at regular intervals while the flow is running.
174
- The loop checks the flow run state before each heartbeat and stops
175
- if the run reaches a terminal state.
176
-
177
- Args:
178
- engine: The FlowRunEngine instance to emit heartbeats for.
179
-
180
- Yields:
181
- None
182
- """
183
- heartbeat_seconds = engine.heartbeat_seconds
184
- if heartbeat_seconds is None:
185
- yield
186
- return
187
-
188
- stop_event = threading.Event()
189
-
190
- def heartbeat_loop() -> None:
191
- while not stop_event.is_set():
192
- # Check state before emitting - don't emit if final
193
- if (
194
- engine.flow_run
195
- and engine.flow_run.state
196
- and engine.flow_run.state.is_final()
197
- ):
198
- engine.logger.debug("Flow run in terminal state, stopping heartbeat")
199
- return
200
-
201
- try:
202
- engine._emit_flow_run_heartbeat()
203
- except Exception:
204
- engine.logger.debug("Failed to emit heartbeat", exc_info=True)
205
-
206
- # Sleep in increments to allow quick shutdown
207
- for _ in range(heartbeat_seconds):
208
- if stop_event.is_set():
209
- return
210
- time.sleep(1)
211
-
212
- thread = threading.Thread(target=heartbeat_loop, daemon=True)
213
- thread.start()
214
- engine.logger.debug("Started flow run heartbeat context")
215
-
216
- try:
217
- yield
218
- finally:
219
- stop_event.set()
220
- thread.join(timeout=2)
221
- engine.logger.debug("Stopped flow run heartbeat context")
222
-
223
-
224
- @asynccontextmanager
225
- async def send_heartbeats_async(
226
- engine: "AsyncFlowRunEngine[Any, Any]",
227
- ) -> AsyncGenerator[None, None]:
228
- """Async context manager that maintains heartbeats for an async flow run.
229
-
230
- Heartbeats are emitted at regular intervals while the flow is running.
231
- The loop checks the flow run state before each heartbeat and stops
232
- if the run reaches a terminal state.
233
-
234
- Args:
235
- engine: The AsyncFlowRunEngine instance to emit heartbeats for.
236
-
237
- Yields:
238
- None
239
- """
240
- heartbeat_seconds = engine.heartbeat_seconds
241
- if heartbeat_seconds is None:
242
- yield
243
- return
244
-
245
- stop_flag = False
246
-
247
- async def heartbeat_loop() -> None:
248
- nonlocal stop_flag
249
- try:
250
- while not stop_flag:
251
- # Check state before emitting - don't emit if final
252
- if (
253
- engine.flow_run
254
- and engine.flow_run.state
255
- and engine.flow_run.state.is_final()
256
- ):
257
- engine.logger.debug(
258
- "Flow run in terminal state, stopping heartbeat"
259
- )
260
- return
261
-
262
- try:
263
- engine._emit_flow_run_heartbeat()
264
- except Exception:
265
- engine.logger.debug("Failed to emit heartbeat", exc_info=True)
266
-
267
- # Sleep in increments to allow quick shutdown (parity with sync version)
268
- for _ in range(heartbeat_seconds):
269
- if stop_flag:
270
- return
271
- await asyncio.sleep(1)
272
- except asyncio.CancelledError:
273
- engine.logger.debug("Heartbeat loop cancelled")
274
-
275
- task = asyncio.create_task(heartbeat_loop())
276
- engine.logger.debug("Started flow run heartbeat context")
277
-
278
- try:
279
- yield
280
- finally:
281
- stop_flag = True
282
- task.cancel()
283
- try:
284
- await task
285
- except asyncio.CancelledError:
286
- pass
287
- engine.logger.debug("Stopped flow run heartbeat context")
288
-
289
-
290
164
  @dataclass
291
165
  class BaseFlowRunEngine(Generic[P, R]):
292
166
  flow: Union[Flow[P, R], Flow[P, Coroutine[Any, Any, R]]]
@@ -326,59 +200,10 @@ class BaseFlowRunEngine(Generic[P, R]):
326
200
  return False # TODO: handle this differently?
327
201
  return getattr(self, "flow_run").state.is_pending()
328
202
 
329
- @property
330
- def heartbeat_seconds(self) -> Optional[int]:
331
- """Get the heartbeat interval from settings."""
332
- return get_current_settings().flows.heartbeat_frequency
333
-
334
203
  def cancel_all_tasks(self) -> None:
335
204
  if hasattr(self.flow.task_runner, "cancel_all"):
336
205
  self.flow.task_runner.cancel_all() # type: ignore
337
206
 
338
- def _emit_flow_run_heartbeat(self) -> None:
339
- """Emit a heartbeat event for the current flow run."""
340
- if not self.flow_run:
341
- return
342
-
343
- related: list[RelatedResource] = []
344
- tags: list[str] = list(self.flow_run.tags or [])
345
-
346
- # Add flow as related resource using flow_id for consistency with other events
347
- if self.flow_run.flow_id:
348
- related.append(
349
- RelatedResource.model_validate(
350
- {
351
- "prefect.resource.id": f"prefect.flow.{self.flow_run.flow_id}",
352
- "prefect.resource.role": "flow",
353
- "prefect.resource.name": self.flow.name if self.flow else "",
354
- }
355
- )
356
- )
357
-
358
- # Add deployment as related resource if available
359
- # Note: deployment name is not available on flow_run without an API call
360
- if self.flow_run.deployment_id:
361
- related.append(
362
- RelatedResource.model_validate(
363
- {
364
- "prefect.resource.id": f"prefect.deployment.{self.flow_run.deployment_id}",
365
- "prefect.resource.role": "deployment",
366
- }
367
- )
368
- )
369
-
370
- related += tags_as_related_resources(set(tags))
371
-
372
- emit_event(
373
- event="prefect.flow-run.heartbeat",
374
- resource={
375
- "prefect.resource.id": f"prefect.flow-run.{self.flow_run.id}",
376
- "prefect.resource.name": self.flow_run.name or "",
377
- "prefect.version": __version__,
378
- },
379
- related=related,
380
- )
381
-
382
207
  def _update_otel_labels(
383
208
  self, span: trace.Span, client: Union[SyncPrefectClient, PrefectClient]
384
209
  ):
@@ -518,7 +343,6 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
518
343
 
519
344
  self._telemetry.update_state(state)
520
345
  self.call_hooks(state)
521
-
522
346
  return state
523
347
 
524
348
  def result(self, raise_on_failure: bool = True) -> "Union[R, State, None]":
@@ -967,11 +791,10 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
967
791
  seconds=self.flow.timeout_seconds,
968
792
  timeout_exc_type=FlowRunTimeoutError,
969
793
  ):
970
- with send_heartbeats_sync(self):
971
- self.logger.debug(
972
- f"Executing flow {self.flow.name!r} for flow run {self.flow_run.name!r}..."
973
- )
974
- yield self
794
+ self.logger.debug(
795
+ f"Executing flow {self.flow.name!r} for flow run {self.flow_run.name!r}..."
796
+ )
797
+ yield self
975
798
  except TimeoutError as exc:
976
799
  self.handle_timeout(exc)
977
800
  except Exception as exc:
@@ -1107,7 +930,6 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1107
930
 
1108
931
  self._telemetry.update_state(state)
1109
932
  await self.call_hooks(state)
1110
-
1111
933
  return state
1112
934
 
1113
935
  async def result(self, raise_on_failure: bool = True) -> "Union[R, State, None]":
@@ -1559,11 +1381,10 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1559
1381
  seconds=self.flow.timeout_seconds,
1560
1382
  timeout_exc_type=FlowRunTimeoutError,
1561
1383
  ):
1562
- async with send_heartbeats_async(self):
1563
- self.logger.debug(
1564
- f"Executing flow {self.flow.name!r} for flow run {self.flow_run.name!r}..."
1565
- )
1566
- yield self
1384
+ self.logger.debug(
1385
+ f"Executing flow {self.flow.name!r} for flow run {self.flow_run.name!r}..."
1386
+ )
1387
+ yield self
1567
1388
  except TimeoutError as exc:
1568
1389
  await self.handle_timeout(exc)
1569
1390
  except Exception as exc:
@@ -1793,7 +1614,6 @@ def run_flow_in_subprocess(
1793
1614
  parameters: dict[str, Any] | None = None,
1794
1615
  wait_for: Iterable[PrefectFuture[Any]] | None = None,
1795
1616
  context: dict[str, Any] | None = None,
1796
- env: dict[str, str] | None = None,
1797
1617
  ) -> multiprocessing.context.SpawnProcess:
1798
1618
  """
1799
1619
  Run a flow in a subprocess.
@@ -1810,7 +1630,6 @@ def run_flow_in_subprocess(
1810
1630
  the current context will be used. A serialized context should be provided if
1811
1631
  this function is called in a separate memory space from the parent run (e.g.
1812
1632
  in a subprocess or on another machine).
1813
- env: Additional environment variables to set in the subprocess.
1814
1633
 
1815
1634
  Returns:
1816
1635
  A multiprocessing.context.SpawnProcess representing the process that is running the flow.
@@ -1853,8 +1672,7 @@ def run_flow_in_subprocess(
1853
1672
  | {
1854
1673
  # TODO: make this a thing we can pass into the engine
1855
1674
  "PREFECT__ENABLE_CANCELLATION_AND_CRASHED_HOOKS": "false",
1856
- }
1857
- | (env or {}),
1675
+ },
1858
1676
  flow=flow,
1859
1677
  flow_run=flow_run,
1860
1678
  parameters=parameters,
prefect/flows.py CHANGED
@@ -1717,7 +1717,8 @@ class Flow(Generic[P, R]):
1717
1717
  return_type=return_type,
1718
1718
  )
1719
1719
 
1720
- async def avisualize(self, *args: "P.args", **kwargs: "P.kwargs") -> None:
1720
+ @sync_compatible
1721
+ async def visualize(self, *args: "P.args", **kwargs: "P.kwargs"):
1721
1722
  """
1722
1723
  Generates a graphviz object representing the current flow. In IPython notebooks,
1723
1724
  it's rendered inline, otherwise in a new window as a PNG.
@@ -1775,66 +1776,6 @@ class Flow(Generic[P, R]):
1775
1776
  new_exception.__traceback__ = e.__traceback__
1776
1777
  raise new_exception
1777
1778
 
1778
- @async_dispatch(avisualize)
1779
- def visualize(self, *args: "P.args", **kwargs: "P.kwargs") -> None:
1780
- """
1781
- Generates a graphviz object representing the current flow. In IPython notebooks,
1782
- it's rendered inline, otherwise in a new window as a PNG.
1783
-
1784
- Raises:
1785
- - ImportError: If `graphviz` isn't installed.
1786
- - GraphvizExecutableNotFoundError: If the `dot` executable isn't found.
1787
- - FlowVisualizationError: If the flow can't be visualized for any other reason.
1788
- """
1789
- from prefect.utilities.visualization import (
1790
- FlowVisualizationError,
1791
- GraphvizExecutableNotFoundError,
1792
- GraphvizImportError,
1793
- TaskVizTracker,
1794
- VisualizationUnsupportedError,
1795
- build_task_dependencies,
1796
- visualize_task_dependencies,
1797
- )
1798
-
1799
- if not PREFECT_TESTING_UNIT_TEST_MODE:
1800
- warnings.warn(
1801
- "`flow.visualize()` will execute code inside of your flow that is not"
1802
- " decorated with `@task` or `@flow`."
1803
- )
1804
-
1805
- try:
1806
- with TaskVizTracker() as tracker:
1807
- if self.isasync:
1808
- # Run async flow via event loop
1809
- run_coro_as_sync(self.fn(*args, **kwargs))
1810
- else:
1811
- self.fn(*args, **kwargs)
1812
-
1813
- graph = build_task_dependencies(tracker)
1814
-
1815
- visualize_task_dependencies(graph, self.name)
1816
-
1817
- except GraphvizImportError:
1818
- raise
1819
- except GraphvizExecutableNotFoundError:
1820
- raise
1821
- except VisualizationUnsupportedError:
1822
- raise
1823
- except FlowVisualizationError:
1824
- raise
1825
- except Exception as e:
1826
- msg = (
1827
- "It's possible you are trying to visualize a flow that contains "
1828
- "code that directly interacts with the result of a task"
1829
- " inside of the flow. \nTry passing a `viz_return_value` "
1830
- "to the task decorator, e.g. `@task(viz_return_value=[1, 2, 3]).`"
1831
- )
1832
-
1833
- new_exception = type(e)(str(e) + "\n" + msg)
1834
- # Copy traceback information from the original exception
1835
- new_exception.__traceback__ = e.__traceback__
1836
- raise new_exception
1837
-
1838
1779
 
1839
1780
  class FlowDecorator:
1840
1781
  @overload