taskito 0.15.2__tar.gz → 0.16.2__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 (334) hide show
  1. {taskito-0.15.2 → taskito-0.16.2}/Cargo.lock +62 -47
  2. {taskito-0.15.2 → taskito-0.16.2}/PKG-INFO +77 -8
  3. {taskito-0.15.2 → taskito-0.16.2}/README.md +75 -7
  4. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/Cargo.toml +5 -1
  5. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/maintenance.rs +44 -2
  6. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/mod.rs +20 -0
  7. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/poller.rs +16 -9
  8. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/dead_letter.rs +79 -1
  9. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/jobs.rs +25 -0
  10. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/migrations.rs +2 -0
  11. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/mod.rs +36 -0
  12. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/models.rs +2 -0
  13. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/dead_letter.rs +141 -10
  14. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/dequeue.rs +57 -12
  15. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/helpers.rs +104 -34
  16. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/state.rs +74 -15
  17. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/schema.rs +1 -0
  18. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/tests.rs +141 -0
  19. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/traits.rs +13 -0
  20. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/tests/rust/storage_tests.rs +263 -0
  21. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/Cargo.toml +3 -1
  22. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/inspection.rs +8 -0
  23. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/mod.rs +30 -1
  24. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/worker.rs +103 -0
  25. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/test_helpers.rs +2 -0
  26. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/Cargo.toml +1 -1
  27. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/__init__.py +3 -1
  28. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/_taskito.pyi +4 -0
  29. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/app.py +8 -0
  30. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/mixins.py +5 -0
  31. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/auth.py +7 -7
  32. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/oauth.py +8 -7
  33. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/settings.py +6 -2
  34. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/overrides_store.py +12 -3
  35. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/routes.py +4 -0
  36. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/webhook_store.py +1 -1
  37. taskito-0.16.2/py_src/taskito/mesh.py +103 -0
  38. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/lifecycle.py +7 -0
  39. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/operations.py +4 -0
  40. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/notes.py +14 -1
  41. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/result.py +5 -1
  42. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  43. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  44. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  45. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  46. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  47. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  48. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  49. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  50. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  51. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  52. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  53. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  54. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-500-normal-C3_OdgN3.woff +0 -0
  55. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
  56. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-600-normal-D3rpGdkS.woff +0 -0
  57. taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
  58. taskito-0.16.2/py_src/taskito/static/dashboard/assets/index-W-qtINsk.js +58 -0
  59. taskito-0.16.2/py_src/taskito/static/dashboard/assets/index-XTjpQV4Y.css +1 -0
  60. taskito-0.16.2/py_src/taskito/static/dashboard/assets/logs.lazy-BRzWGIVq.js +1 -0
  61. taskito-0.16.2/py_src/taskito/static/dashboard/assets/metrics.lazy-7u0OCPof.js +36 -0
  62. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/static/dashboard/index.html +2 -2
  63. {taskito-0.15.2 → taskito-0.16.2}/pyproject.toml +2 -2
  64. taskito-0.15.2/py_src/taskito/static/dashboard/assets/index-CmeQPfSs.js +0 -58
  65. taskito-0.15.2/py_src/taskito/static/dashboard/assets/index-u3dkUvf_.css +0 -2
  66. taskito-0.15.2/py_src/taskito/static/dashboard/assets/logs.lazy-DSR9BFSO.js +0 -1
  67. taskito-0.15.2/py_src/taskito/static/dashboard/assets/metrics.lazy-CYZj78Ak.js +0 -36
  68. {taskito-0.15.2 → taskito-0.16.2}/Cargo.toml +0 -0
  69. {taskito-0.15.2 → taskito-0.16.2}/LICENSE +0 -0
  70. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/error.rs +0 -0
  71. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/job.rs +0 -0
  72. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/lib.rs +0 -0
  73. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/periodic.rs +0 -0
  74. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/circuit_breaker.rs +0 -0
  75. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/dlq.rs +0 -0
  76. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/mod.rs +0 -0
  77. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/rate_limiter.rs +0 -0
  78. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/retry.rs +0 -0
  79. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/result_handler.rs +0 -0
  80. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/wake.rs +0 -0
  81. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/archival.rs +0 -0
  82. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/locks.rs +0 -0
  83. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/logs.rs +0 -0
  84. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/metrics.rs +0 -0
  85. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/mod.rs +0 -0
  86. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/workers.rs +0 -0
  87. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/notify.rs +0 -0
  88. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/archival.rs +0 -0
  89. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/circuit_breakers.rs +0 -0
  90. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/dashboard_settings.rs +0 -0
  91. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/dead_letter.rs +0 -0
  92. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/jobs.rs +0 -0
  93. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/listener.rs +0 -0
  94. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/locks.rs +0 -0
  95. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/logs.rs +0 -0
  96. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/metrics.rs +0 -0
  97. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/mod.rs +0 -0
  98. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/periodic.rs +0 -0
  99. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/queue_state.rs +0 -0
  100. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/rate_limits.rs +0 -0
  101. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/trait_impl.rs +0 -0
  102. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/workers.rs +0 -0
  103. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/archival.rs +0 -0
  104. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/circuit_breakers.rs +0 -0
  105. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/dashboard_settings.rs +0 -0
  106. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/enqueue.rs +0 -0
  107. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/errors.rs +0 -0
  108. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/maintenance.rs +0 -0
  109. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/mod.rs +0 -0
  110. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/query.rs +0 -0
  111. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/listener.rs +0 -0
  112. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/locks.rs +0 -0
  113. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/logs.rs +0 -0
  114. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/metrics.rs +0 -0
  115. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/mod.rs +0 -0
  116. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/periodic.rs +0 -0
  117. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/queue_state.rs +0 -0
  118. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/rate_limits.rs +0 -0
  119. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/trait_impl.rs +0 -0
  120. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/workers.rs +0 -0
  121. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/archival.rs +0 -0
  122. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/circuit_breakers.rs +0 -0
  123. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/dashboard_settings.rs +0 -0
  124. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/dead_letter.rs +0 -0
  125. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/jobs.rs +0 -0
  126. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/locks.rs +0 -0
  127. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/logs.rs +0 -0
  128. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/metrics.rs +0 -0
  129. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/mod.rs +0 -0
  130. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/periodic.rs +0 -0
  131. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/queue_state.rs +0 -0
  132. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/rate_limits.rs +0 -0
  133. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/trait_impl.rs +0 -0
  134. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/workers.rs +0 -0
  135. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/worker.rs +0 -0
  136. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/tests/rust.rs +0 -0
  137. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/async_worker.rs +0 -0
  138. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/lib.rs +0 -0
  139. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/child.rs +0 -0
  140. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/dispatch.rs +0 -0
  141. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/mod.rs +0 -0
  142. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/protocol.rs +0 -0
  143. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/slot.rs +0 -0
  144. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/watchdog.rs +0 -0
  145. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_config.rs +0 -0
  146. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_job.rs +0 -0
  147. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/fan_out.rs +0 -0
  148. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/gates.rs +0 -0
  149. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/lifecycle.rs +0 -0
  150. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/mod.rs +0 -0
  151. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/nodes.rs +0 -0
  152. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/queries.rs +0 -0
  153. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/saga.rs +0 -0
  154. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_worker.rs +0 -0
  155. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_workflow/mod.rs +0 -0
  156. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/common.rs +0 -0
  157. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/definition.rs +0 -0
  158. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/diesel_common.rs +0 -0
  159. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/error.rs +0 -0
  160. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/lib.rs +0 -0
  161. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/node.rs +0 -0
  162. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/postgres_store.rs +0 -0
  163. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/redis_store.rs +0 -0
  164. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/run.rs +0 -0
  165. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/sqlite_store.rs +0 -0
  166. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/state.rs +0 -0
  167. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/storage.rs +0 -0
  168. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/tests.rs +0 -0
  169. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/topology.rs +0 -0
  170. {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/tests/storage_contract.rs +0 -0
  171. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/_active_context.py +0 -0
  172. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/__init__.py +0 -0
  173. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/canvas.py +0 -0
  174. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/context.py +0 -0
  175. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/executor.py +0 -0
  176. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/helpers.py +0 -0
  177. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/locks.py +0 -0
  178. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/result.py +0 -0
  179. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/__init__.py +0 -0
  180. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/config.py +0 -0
  181. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/controller.py +0 -0
  182. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/process_manager.py +0 -0
  183. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/__init__.py +0 -0
  184. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/accumulator.py +0 -0
  185. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/config.py +0 -0
  186. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/item_result.py +0 -0
  187. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/result.py +0 -0
  188. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/canvas.py +0 -0
  189. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/cli.py +0 -0
  190. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/context.py +0 -0
  191. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/__init__.py +0 -0
  192. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/__init__.py +0 -0
  193. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/admin.py +0 -0
  194. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/apps.py +0 -0
  195. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/__init__.py +0 -0
  196. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/__init__.py +0 -0
  197. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_dashboard.py +0 -0
  198. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_info.py +0 -0
  199. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_worker.py +0 -0
  200. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/settings.py +0 -0
  201. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/fastapi.py +0 -0
  202. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/flask.py +0 -0
  203. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/otel.py +0 -0
  204. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/prometheus.py +0 -0
  205. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/sentry.py +0 -0
  206. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/__init__.py +0 -0
  207. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/_testing.py +0 -0
  208. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/delivery_store.py +0 -0
  209. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/errors.py +0 -0
  210. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/__init__.py +0 -0
  211. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/_qs.py +0 -0
  212. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/auth.py +0 -0
  213. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/dead_letters.py +0 -0
  214. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/jobs.py +0 -0
  215. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/logs.py +0 -0
  216. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/metrics.py +0 -0
  217. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/middleware.py +0 -0
  218. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/overrides.py +0 -0
  219. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/queues.py +0 -0
  220. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/scaler.py +0 -0
  221. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/webhook_deliveries.py +0 -0
  222. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/webhooks.py +0 -0
  223. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/workflows.py +0 -0
  224. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/middleware_store.py +0 -0
  225. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/__init__.py +0 -0
  226. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/config.py +0 -0
  227. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/flow.py +0 -0
  228. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/identity.py +0 -0
  229. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/pkce.py +0 -0
  230. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/providers.py +0 -0
  231. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/state_store.py +0 -0
  232. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/request_context.py +0 -0
  233. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/server.py +0 -0
  234. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/static.py +0 -0
  235. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/url_safety.py +0 -0
  236. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/events.py +0 -0
  237. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/exceptions.py +0 -0
  238. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/health.py +0 -0
  239. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/inject.py +0 -0
  240. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/__init__.py +0 -0
  241. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/built_in.py +0 -0
  242. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/converters.py +0 -0
  243. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/errors.py +0 -0
  244. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/interceptor.py +0 -0
  245. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/metrics.py +0 -0
  246. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/reconstruct.py +0 -0
  247. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/registry.py +0 -0
  248. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/strategy.py +0 -0
  249. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/walker.py +0 -0
  250. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/locks.py +0 -0
  251. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/log_config.py +0 -0
  252. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/middleware.py +0 -0
  253. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/__init__.py +0 -0
  254. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/_shared.py +0 -0
  255. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/decorators.py +0 -0
  256. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/events.py +0 -0
  257. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/inspection.py +0 -0
  258. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/locks.py +0 -0
  259. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/middleware_admin.py +0 -0
  260. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/overrides.py +0 -0
  261. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/predicates.py +0 -0
  262. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/resources.py +0 -0
  263. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/runtime_config.py +0 -0
  264. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/settings.py +0 -0
  265. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/__init__.py +0 -0
  266. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/context.py +0 -0
  267. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/core.py +0 -0
  268. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/evaluate.py +0 -0
  269. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/metrics.py +0 -0
  270. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/outcomes.py +0 -0
  271. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/parser.py +0 -0
  272. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/providers.py +0 -0
  273. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/__init__.py +0 -0
  274. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/attributes.py +0 -0
  275. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/config.py +0 -0
  276. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/system.py +0 -0
  277. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/time.py +0 -0
  278. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/registry.py +0 -0
  279. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/__init__.py +0 -0
  280. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/__main__.py +0 -0
  281. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/child.py +0 -0
  282. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/__init__.py +0 -0
  283. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/built_in.py +0 -0
  284. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handler.py +0 -0
  285. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/__init__.py +0 -0
  286. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/boto3_client.py +0 -0
  287. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/file.py +0 -0
  288. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/gcs_client.py +0 -0
  289. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/httpx_client.py +0 -0
  290. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/logger.py +0 -0
  291. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/requests_session.py +0 -0
  292. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/metrics.py +0 -0
  293. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/no_proxy.py +0 -0
  294. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/reconstruct.py +0 -0
  295. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/registry.py +0 -0
  296. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/schema.py +0 -0
  297. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/signing.py +0 -0
  298. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/py.typed +0 -0
  299. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/__init__.py +0 -0
  300. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/definition.py +0 -0
  301. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/frozen.py +0 -0
  302. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/graph.py +0 -0
  303. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/health.py +0 -0
  304. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/pool.py +0 -0
  305. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/runtime.py +0 -0
  306. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/thread_local.py +0 -0
  307. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/toml_config.py +0 -0
  308. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/scaler.py +0 -0
  309. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/serializers.py +0 -0
  310. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/task.py +0 -0
  311. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/testing.py +0 -0
  312. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/webhooks.py +0 -0
  313. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/__init__.py +0 -0
  314. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/analysis.py +0 -0
  315. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/builder.py +0 -0
  316. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/context.py +0 -0
  317. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/fan_out.py +0 -0
  318. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/incremental.py +0 -0
  319. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/mixins.py +0 -0
  320. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/run.py +0 -0
  321. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/__init__.py +0 -0
  322. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/context.py +0 -0
  323. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/orchestrator.py +0 -0
  324. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/__init__.py +0 -0
  325. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/dag.py +0 -0
  326. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/event_routing.py +0 -0
  327. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/fan_out.py +0 -0
  328. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/finalization.py +0 -0
  329. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/gates.py +0 -0
  330. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/sub_workflows.py +0 -0
  331. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/tracker.py +0 -0
  332. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/types.py +0 -0
  333. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/types.py +0 -0
  334. {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/visualization.py +0 -0
@@ -88,9 +88,9 @@ dependencies = [
88
88
 
89
89
  [[package]]
90
90
  name = "bitflags"
91
- version = "2.11.1"
91
+ version = "2.13.0"
92
92
  source = "registry+https://github.com/rust-lang/crates.io-index"
93
- checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
93
+ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
94
94
 
95
95
  [[package]]
96
96
  name = "bumpalo"
@@ -112,9 +112,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
112
112
 
113
113
  [[package]]
114
114
  name = "cc"
115
- version = "1.2.63"
115
+ version = "1.2.64"
116
116
  source = "registry+https://github.com/rust-lang/crates.io-index"
117
- checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
117
+ checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f"
118
118
  dependencies = [
119
119
  "find-msvc-tools",
120
120
  "shlex",
@@ -139,9 +139,9 @@ dependencies = [
139
139
 
140
140
  [[package]]
141
141
  name = "chrono"
142
- version = "0.4.44"
142
+ version = "0.4.45"
143
143
  source = "registry+https://github.com/rust-lang/crates.io-index"
144
- checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
144
+ checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
145
145
  dependencies = [
146
146
  "iana-time-zone",
147
147
  "js-sys",
@@ -273,9 +273,9 @@ dependencies = [
273
273
 
274
274
  [[package]]
275
275
  name = "diesel"
276
- version = "2.3.9"
276
+ version = "2.3.10"
277
277
  source = "registry+https://github.com/rust-lang/crates.io-index"
278
- checksum = "9940fb8467a0a06312218ed384185cb8536aa10d8ec017d0ce7fad2c1bd882d5"
278
+ checksum = "29fe29a87fb84c631ffb3ba21798c4b1f3a964701ba78f0dce4bf8668562ec88"
279
279
  dependencies = [
280
280
  "bitflags",
281
281
  "byteorder",
@@ -676,13 +676,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
676
676
 
677
677
  [[package]]
678
678
  name = "js-sys"
679
- version = "0.3.99"
679
+ version = "0.3.102"
680
680
  source = "registry+https://github.com/rust-lang/crates.io-index"
681
- checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
681
+ checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
682
682
  dependencies = [
683
683
  "cfg-if",
684
684
  "futures-util",
685
- "once_cell",
686
685
  "wasm-bindgen",
687
686
  ]
688
687
 
@@ -732,15 +731,15 @@ dependencies = [
732
731
 
733
732
  [[package]]
734
733
  name = "log"
735
- version = "0.4.30"
734
+ version = "0.4.32"
736
735
  source = "registry+https://github.com/rust-lang/crates.io-index"
737
- checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5"
736
+ checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
738
737
 
739
738
  [[package]]
740
739
  name = "memchr"
741
- version = "2.8.1"
740
+ version = "2.8.2"
742
741
  source = "registry+https://github.com/rust-lang/crates.io-index"
743
- checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
742
+ checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
744
743
 
745
744
  [[package]]
746
745
  name = "memmap2"
@@ -813,18 +812,18 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
813
812
 
814
813
  [[package]]
815
814
  name = "openssl-src"
816
- version = "300.6.0+3.6.2"
815
+ version = "300.6.1+3.6.3"
817
816
  source = "registry+https://github.com/rust-lang/crates.io-index"
818
- checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4"
817
+ checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846"
819
818
  dependencies = [
820
819
  "cc",
821
820
  ]
822
821
 
823
822
  [[package]]
824
823
  name = "openssl-sys"
825
- version = "0.9.116"
824
+ version = "0.9.117"
826
825
  source = "registry+https://github.com/rust-lang/crates.io-index"
827
- checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4"
826
+ checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695"
828
827
  dependencies = [
829
828
  "cc",
830
829
  "libc",
@@ -1174,9 +1173,9 @@ dependencies = [
1174
1173
 
1175
1174
  [[package]]
1176
1175
  name = "regex"
1177
- version = "1.12.3"
1176
+ version = "1.12.4"
1178
1177
  source = "registry+https://github.com/rust-lang/crates.io-index"
1179
- checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
1178
+ checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
1180
1179
  dependencies = [
1181
1180
  "aho-corasick",
1182
1181
  "memchr",
@@ -1197,9 +1196,9 @@ dependencies = [
1197
1196
 
1198
1197
  [[package]]
1199
1198
  name = "regex-syntax"
1200
- version = "0.8.10"
1199
+ version = "0.8.11"
1201
1200
  source = "registry+https://github.com/rust-lang/crates.io-index"
1202
- checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
1201
+ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
1203
1202
 
1204
1203
  [[package]]
1205
1204
  name = "rsqlite-vfs"
@@ -1336,9 +1335,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
1336
1335
 
1337
1336
  [[package]]
1338
1337
  name = "smallvec"
1339
- version = "1.15.1"
1338
+ version = "1.15.2"
1340
1339
  source = "registry+https://github.com/rust-lang/crates.io-index"
1341
- checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1340
+ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
1342
1341
 
1343
1342
  [[package]]
1344
1343
  name = "socket2"
@@ -1404,7 +1403,7 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
1404
1403
 
1405
1404
  [[package]]
1406
1405
  name = "taskito-async"
1407
- version = "0.15.2"
1406
+ version = "0.16.2"
1408
1407
  dependencies = [
1409
1408
  "async-trait",
1410
1409
  "crossbeam-channel",
@@ -1416,7 +1415,7 @@ dependencies = [
1416
1415
 
1417
1416
  [[package]]
1418
1417
  name = "taskito-core"
1419
- version = "0.15.2"
1418
+ version = "0.16.2"
1420
1419
  dependencies = [
1421
1420
  "async-trait",
1422
1421
  "chrono",
@@ -1438,9 +1437,24 @@ dependencies = [
1438
1437
  "uuid",
1439
1438
  ]
1440
1439
 
1440
+ [[package]]
1441
+ name = "taskito-mesh"
1442
+ version = "0.16.2"
1443
+ dependencies = [
1444
+ "base64",
1445
+ "bincode",
1446
+ "log",
1447
+ "rand 0.10.1",
1448
+ "serde",
1449
+ "serde_json",
1450
+ "taskito-core",
1451
+ "tokio",
1452
+ "xxhash-rust",
1453
+ ]
1454
+
1441
1455
  [[package]]
1442
1456
  name = "taskito-python"
1443
- version = "0.15.2"
1457
+ version = "0.16.2"
1444
1458
  dependencies = [
1445
1459
  "async-trait",
1446
1460
  "base64",
@@ -1453,6 +1467,7 @@ dependencies = [
1453
1467
  "serde_json",
1454
1468
  "taskito-async",
1455
1469
  "taskito-core",
1470
+ "taskito-mesh",
1456
1471
  "taskito-workflows",
1457
1472
  "tokio",
1458
1473
  "uuid",
@@ -1460,7 +1475,7 @@ dependencies = [
1460
1475
 
1461
1476
  [[package]]
1462
1477
  name = "taskito-workflows"
1463
- version = "0.15.2"
1478
+ version = "0.16.2"
1464
1479
  dependencies = [
1465
1480
  "dagron-core",
1466
1481
  "diesel",
@@ -1612,9 +1627,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1612
1627
 
1613
1628
  [[package]]
1614
1629
  name = "uuid"
1615
- version = "1.23.2"
1630
+ version = "1.23.3"
1616
1631
  source = "registry+https://github.com/rust-lang/crates.io-index"
1617
- checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7"
1632
+ checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
1618
1633
  dependencies = [
1619
1634
  "getrandom 0.4.2",
1620
1635
  "js-sys",
@@ -1641,9 +1656,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
1641
1656
 
1642
1657
  [[package]]
1643
1658
  name = "wasip2"
1644
- version = "1.0.3+wasi-0.2.9"
1659
+ version = "1.0.4+wasi-0.2.12"
1645
1660
  source = "registry+https://github.com/rust-lang/crates.io-index"
1646
- checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
1661
+ checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
1647
1662
  dependencies = [
1648
1663
  "wit-bindgen 0.57.1",
1649
1664
  ]
@@ -1659,9 +1674,9 @@ dependencies = [
1659
1674
 
1660
1675
  [[package]]
1661
1676
  name = "wasm-bindgen"
1662
- version = "0.2.122"
1677
+ version = "0.2.125"
1663
1678
  source = "registry+https://github.com/rust-lang/crates.io-index"
1664
- checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
1679
+ checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
1665
1680
  dependencies = [
1666
1681
  "cfg-if",
1667
1682
  "once_cell",
@@ -1672,9 +1687,9 @@ dependencies = [
1672
1687
 
1673
1688
  [[package]]
1674
1689
  name = "wasm-bindgen-macro"
1675
- version = "0.2.122"
1690
+ version = "0.2.125"
1676
1691
  source = "registry+https://github.com/rust-lang/crates.io-index"
1677
- checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
1692
+ checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
1678
1693
  dependencies = [
1679
1694
  "quote",
1680
1695
  "wasm-bindgen-macro-support",
@@ -1682,9 +1697,9 @@ dependencies = [
1682
1697
 
1683
1698
  [[package]]
1684
1699
  name = "wasm-bindgen-macro-support"
1685
- version = "0.2.122"
1700
+ version = "0.2.125"
1686
1701
  source = "registry+https://github.com/rust-lang/crates.io-index"
1687
- checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
1702
+ checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
1688
1703
  dependencies = [
1689
1704
  "bumpalo",
1690
1705
  "proc-macro2",
@@ -1695,9 +1710,9 @@ dependencies = [
1695
1710
 
1696
1711
  [[package]]
1697
1712
  name = "wasm-bindgen-shared"
1698
- version = "0.2.122"
1713
+ version = "0.2.125"
1699
1714
  source = "registry+https://github.com/rust-lang/crates.io-index"
1700
- checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
1715
+ checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
1701
1716
  dependencies = [
1702
1717
  "unicode-ident",
1703
1718
  ]
@@ -1921,9 +1936,9 @@ checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
1921
1936
 
1922
1937
  [[package]]
1923
1938
  name = "yoke"
1924
- version = "0.8.2"
1939
+ version = "0.8.3"
1925
1940
  source = "registry+https://github.com/rust-lang/crates.io-index"
1926
- checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
1941
+ checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
1927
1942
  dependencies = [
1928
1943
  "stable_deref_trait",
1929
1944
  "yoke-derive",
@@ -1944,18 +1959,18 @@ dependencies = [
1944
1959
 
1945
1960
  [[package]]
1946
1961
  name = "zerocopy"
1947
- version = "0.8.50"
1962
+ version = "0.8.52"
1948
1963
  source = "registry+https://github.com/rust-lang/crates.io-index"
1949
- checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1"
1964
+ checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
1950
1965
  dependencies = [
1951
1966
  "zerocopy-derive",
1952
1967
  ]
1953
1968
 
1954
1969
  [[package]]
1955
1970
  name = "zerocopy-derive"
1956
- version = "0.8.50"
1971
+ version = "0.8.52"
1957
1972
  source = "registry+https://github.com/rust-lang/crates.io-index"
1958
- checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639"
1973
+ checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
1959
1974
  dependencies = [
1960
1975
  "proc-macro2",
1961
1976
  "quote",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskito
3
- Version: 0.15.2
3
+ Version: 0.16.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -30,6 +30,7 @@ Requires-Dist: flask>=3.0 ; extra == 'flask'
30
30
  Requires-Dist: google-cloud-storage>=2.10 ; extra == 'gcs'
31
31
  Requires-Dist: msgpack ; extra == 'msgpack'
32
32
  Requires-Dist: authlib>=1.7,<2 ; extra == 'oauth'
33
+ Requires-Dist: joserfc>=0.12 ; extra == 'oauth'
33
34
  Requires-Dist: requests>=2.31 ; extra == 'oauth'
34
35
  Requires-Dist: opentelemetry-api ; extra == 'otel'
35
36
  Requires-Dist: opentelemetry-sdk ; extra == 'otel'
@@ -119,12 +120,78 @@ parallelism on CPU-bound work.
119
120
 
120
121
  ## Features
121
122
 
122
- - **Reliability** retries with exponential backoff, dead letter queue with replay, circuit breakers, exception filtering
123
- - **Scheduling** priorities, rate limiting, periodic (cron) tasks, delayed execution, job expiration
124
- - **Workflows** `chain` / `group` / `chord`, task dependencies with cascade cancel
125
- - **Control** — cooperative cancellation, soft timeouts, unique/idempotent tasks, queue pause/resume
126
- - **Observability** — web dashboard, events, HMAC-signed webhooks, structured logging, worker heartbeats
127
- - **Extensibility** — pluggable serializers, per-task middleware, async API, Postgres/Redis backends
123
+ Grouped by what you're trying to do each section has a one-line sample and a
124
+ link to its deep-dive guide. New here? Start with
125
+ **[Capabilities at a glance](https://docs.byteveda.org/taskito/capabilities)**.
126
+
127
+ ### Reliability
128
+
129
+ Retries with exponential backoff, per-exception retry rules, soft timeouts, a
130
+ dead-letter queue with replay, circuit breakers, and idempotent enqueue.
131
+
132
+ ```python
133
+ @queue.task(max_retries=5, retry_backoff=2.0, retry_on=[TimeoutError])
134
+ def fetch_url(url: str) -> str: ...
135
+ ```
136
+
137
+ [→ Reliability guide](https://docs.byteveda.org/taskito/guides/reliability)
138
+
139
+ ### Workflows
140
+
141
+ Compose tasks with `chain`, fan out with `group`, fan in with `chord` — plus
142
+ task dependency graphs with cascade cancel.
143
+
144
+ ```python
145
+ chain(fetch.s(url), parse.s(), store.s()).apply()
146
+ ```
147
+
148
+ [→ Workflows guide](https://docs.byteveda.org/taskito/guides/workflows/canvas)
149
+
150
+ ### Concurrency
151
+
152
+ A thread pool by default (ideal for I/O-bound tasks); switch to a **prefork**
153
+ pool of child processes for true CPU parallelism with no GIL contention.
154
+
155
+ ```bash
156
+ taskito worker --pool prefork --app tasks:queue # CPU-bound: real parallelism
157
+ ```
158
+
159
+ [→ Execution & prefork guide](https://docs.byteveda.org/taskito/guides/advanced-execution/prefork)
160
+
161
+ ### Scheduling
162
+
163
+ Priorities, rate limiting, periodic (cron) tasks, delayed execution, and job
164
+ expiration.
165
+
166
+ ```python
167
+ @queue.task(priority=9, rate_limit="100/m")
168
+ def notify(user_id: int) -> None: ...
169
+ ```
170
+
171
+ [→ Scheduling guide](https://docs.byteveda.org/taskito/guides/core/scheduling)
172
+
173
+ ### Observability
174
+
175
+ A built-in web dashboard, an events system, HMAC-signed webhooks, Prometheus and
176
+ OpenTelemetry exporters, structured logging, and worker heartbeats.
177
+
178
+ ```bash
179
+ taskito dashboard --app tasks:queue # Flower-style monitoring UI
180
+ ```
181
+
182
+ [→ Dashboard & monitoring guide](https://docs.byteveda.org/taskito/guides/dashboard)
183
+
184
+ ### Extensibility
185
+
186
+ Pluggable serializers, per-task middleware, a fully async API, and Postgres or
187
+ Redis backends for multi-machine workers.
188
+
189
+ ```python
190
+ @queue.task(middleware=[MyMiddleware()]) # per-task hooks
191
+ def handle(payload: dict) -> None: ...
192
+ ```
193
+
194
+ [→ Extensibility guide](https://docs.byteveda.org/taskito/guides/extensibility)
128
195
 
129
196
  ## Examples
130
197
 
@@ -174,7 +241,7 @@ def test_add():
174
241
  ## Documentation
175
242
 
176
243
  **[Read the docs →](https://docs.byteveda.org/taskito)** — guides, API reference, and architecture.
177
- Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/docs/guides/operations/migration)**.
244
+ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/guides/operations/migration)**.
178
245
 
179
246
  ## Comparison
180
247
 
@@ -186,9 +253,11 @@ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskit
186
253
  | Rate limiting | **Yes** | Yes | No | Yes | No |
187
254
  | Dead letter queue | **Yes** | No | Yes | No | No |
188
255
  | Task dependencies | **Yes** | No | No | No | No |
256
+ | Workflows (chain/group/chord) | **Yes** | Yes | No | Yes | No |
189
257
  | Built-in dashboard | **Yes** | No | No | No | No |
190
258
  | FastAPI integration | **Yes** | No | No | No | No |
191
259
  | Cancel running tasks | **Yes** | Yes | No | No | No |
260
+ | CPU parallelism (prefork pool) | **Yes** | Yes | Yes | Yes | Yes |
192
261
  | Postgres backend | **Yes** | Yes | No | No | No |
193
262
  | Setup | **`pip install`** | Broker + backend | Redis | Broker | Redis |
194
263
 
@@ -57,12 +57,78 @@ parallelism on CPU-bound work.
57
57
 
58
58
  ## Features
59
59
 
60
- - **Reliability** retries with exponential backoff, dead letter queue with replay, circuit breakers, exception filtering
61
- - **Scheduling** priorities, rate limiting, periodic (cron) tasks, delayed execution, job expiration
62
- - **Workflows** `chain` / `group` / `chord`, task dependencies with cascade cancel
63
- - **Control** — cooperative cancellation, soft timeouts, unique/idempotent tasks, queue pause/resume
64
- - **Observability** — web dashboard, events, HMAC-signed webhooks, structured logging, worker heartbeats
65
- - **Extensibility** — pluggable serializers, per-task middleware, async API, Postgres/Redis backends
60
+ Grouped by what you're trying to do each section has a one-line sample and a
61
+ link to its deep-dive guide. New here? Start with
62
+ **[Capabilities at a glance](https://docs.byteveda.org/taskito/capabilities)**.
63
+
64
+ ### Reliability
65
+
66
+ Retries with exponential backoff, per-exception retry rules, soft timeouts, a
67
+ dead-letter queue with replay, circuit breakers, and idempotent enqueue.
68
+
69
+ ```python
70
+ @queue.task(max_retries=5, retry_backoff=2.0, retry_on=[TimeoutError])
71
+ def fetch_url(url: str) -> str: ...
72
+ ```
73
+
74
+ [→ Reliability guide](https://docs.byteveda.org/taskito/guides/reliability)
75
+
76
+ ### Workflows
77
+
78
+ Compose tasks with `chain`, fan out with `group`, fan in with `chord` — plus
79
+ task dependency graphs with cascade cancel.
80
+
81
+ ```python
82
+ chain(fetch.s(url), parse.s(), store.s()).apply()
83
+ ```
84
+
85
+ [→ Workflows guide](https://docs.byteveda.org/taskito/guides/workflows/canvas)
86
+
87
+ ### Concurrency
88
+
89
+ A thread pool by default (ideal for I/O-bound tasks); switch to a **prefork**
90
+ pool of child processes for true CPU parallelism with no GIL contention.
91
+
92
+ ```bash
93
+ taskito worker --pool prefork --app tasks:queue # CPU-bound: real parallelism
94
+ ```
95
+
96
+ [→ Execution & prefork guide](https://docs.byteveda.org/taskito/guides/advanced-execution/prefork)
97
+
98
+ ### Scheduling
99
+
100
+ Priorities, rate limiting, periodic (cron) tasks, delayed execution, and job
101
+ expiration.
102
+
103
+ ```python
104
+ @queue.task(priority=9, rate_limit="100/m")
105
+ def notify(user_id: int) -> None: ...
106
+ ```
107
+
108
+ [→ Scheduling guide](https://docs.byteveda.org/taskito/guides/core/scheduling)
109
+
110
+ ### Observability
111
+
112
+ A built-in web dashboard, an events system, HMAC-signed webhooks, Prometheus and
113
+ OpenTelemetry exporters, structured logging, and worker heartbeats.
114
+
115
+ ```bash
116
+ taskito dashboard --app tasks:queue # Flower-style monitoring UI
117
+ ```
118
+
119
+ [→ Dashboard & monitoring guide](https://docs.byteveda.org/taskito/guides/dashboard)
120
+
121
+ ### Extensibility
122
+
123
+ Pluggable serializers, per-task middleware, a fully async API, and Postgres or
124
+ Redis backends for multi-machine workers.
125
+
126
+ ```python
127
+ @queue.task(middleware=[MyMiddleware()]) # per-task hooks
128
+ def handle(payload: dict) -> None: ...
129
+ ```
130
+
131
+ [→ Extensibility guide](https://docs.byteveda.org/taskito/guides/extensibility)
66
132
 
67
133
  ## Examples
68
134
 
@@ -112,7 +178,7 @@ def test_add():
112
178
  ## Documentation
113
179
 
114
180
  **[Read the docs →](https://docs.byteveda.org/taskito)** — guides, API reference, and architecture.
115
- Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/docs/guides/operations/migration)**.
181
+ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/guides/operations/migration)**.
116
182
 
117
183
  ## Comparison
118
184
 
@@ -124,9 +190,11 @@ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskit
124
190
  | Rate limiting | **Yes** | Yes | No | Yes | No |
125
191
  | Dead letter queue | **Yes** | No | Yes | No | No |
126
192
  | Task dependencies | **Yes** | No | No | No | No |
193
+ | Workflows (chain/group/chord) | **Yes** | Yes | No | Yes | No |
127
194
  | Built-in dashboard | **Yes** | No | No | No | No |
128
195
  | FastAPI integration | **Yes** | No | No | No | No |
129
196
  | Cancel running tasks | **Yes** | Yes | No | No | No |
197
+ | CPU parallelism (prefork pool) | **Yes** | Yes | Yes | Yes | Yes |
130
198
  | Postgres backend | **Yes** | Yes | No | No | No |
131
199
  | Setup | **`pip install`** | Broker + backend | Redis | Broker | Redis |
132
200
 
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "taskito-core"
3
- version = "0.15.2"
3
+ version = "0.16.2"
4
4
  edition = "2021"
5
5
 
6
6
  [features]
@@ -32,3 +32,7 @@ redis = { workspace = true, optional = true }
32
32
 
33
33
  [dev-dependencies]
34
34
  tempfile = "3"
35
+ # Raw connection access in the Redis contract tests, to set up race-window
36
+ # state and assert on internal index keys. Only used by `#[cfg(feature = "redis")]`
37
+ # tests; harmless when the feature is off.
38
+ redis = { workspace = true }
@@ -57,9 +57,8 @@ impl Scheduler {
57
57
 
58
58
  let cutoff = now_millis().saturating_sub(ttl);
59
59
 
60
- // Use per-job TTL aware cleanup
61
60
  let completed = self.storage.purge_completed_with_ttl(cutoff)?;
62
- let dead = self.storage.purge_dead(cutoff)?;
61
+ let dead = self.storage.purge_dead_with_ttl(cutoff)?;
63
62
  let errors = self.storage.purge_job_errors(cutoff)?;
64
63
  let metrics = self.storage.purge_metrics(cutoff).unwrap_or_else(|e| {
65
64
  warn!("purge_metrics failed: {e}");
@@ -131,6 +130,49 @@ impl Scheduler {
131
130
  Ok(())
132
131
  }
133
132
 
133
+ /// Auto-retry eligible DLQ entries that have aged past the configured delay.
134
+ pub(super) fn auto_retry_dlq(&self) -> Result<()> {
135
+ let delay = match self.config.dlq_auto_retry_delay_ms {
136
+ Some(d) => d,
137
+ None => return Ok(()),
138
+ };
139
+
140
+ let now = now_millis();
141
+ let cutoff = now.saturating_sub(delay);
142
+ let max_retries = self.config.dlq_auto_retry_max;
143
+
144
+ let candidates = self.storage.list_dead_for_retry(cutoff, max_retries, 50)?;
145
+
146
+ if candidates.is_empty() {
147
+ return Ok(());
148
+ }
149
+
150
+ let mut retried = 0u64;
151
+ for entry in &candidates {
152
+ match self.storage.retry_dead(&entry.id) {
153
+ Ok(new_id) => {
154
+ info!(
155
+ "dlq auto-retry: {} -> {} (attempt {}/{})",
156
+ entry.id,
157
+ new_id,
158
+ entry.dlq_retry_count + 1,
159
+ max_retries
160
+ );
161
+ retried += 1;
162
+ }
163
+ Err(e) => {
164
+ warn!("dlq auto-retry failed for {}: {e}", entry.id);
165
+ }
166
+ }
167
+ }
168
+
169
+ if retried > 0 {
170
+ info!("dlq auto-retry: retried {retried} entries");
171
+ }
172
+
173
+ Ok(())
174
+ }
175
+
134
176
  /// Build a cloudpickle-compatible payload from stored args.
135
177
  fn build_periodic_payload(args: &Option<Vec<u8>>) -> Vec<u8> {
136
178
  match args {
@@ -39,6 +39,12 @@ pub struct SchedulerConfig {
39
39
  /// preserves the original one-job-per-round-trip behavior; values above
40
40
  /// `1` enable batch claiming for higher throughput.
41
41
  pub batch_size: usize,
42
+ /// Minimum age (ms) before a DLQ entry is auto-retried. `None` disables.
43
+ pub dlq_auto_retry_delay_ms: Option<i64>,
44
+ /// Max DLQ auto-retries per entry before giving up.
45
+ pub dlq_auto_retry_max: i32,
46
+ /// Check DLQ auto-retry every N ticks.
47
+ pub dlq_auto_retry_interval: u32,
42
48
  }
43
49
 
44
50
  impl Default for SchedulerConfig {
@@ -51,6 +57,9 @@ impl Default for SchedulerConfig {
51
57
  cleanup_interval: 1200,
52
58
  result_ttl_ms: None,
53
59
  batch_size: 1,
60
+ dlq_auto_retry_delay_ms: None,
61
+ dlq_auto_retry_max: 1,
62
+ dlq_auto_retry_interval: 60,
54
63
  }
55
64
  }
56
65
  }
@@ -157,6 +166,7 @@ struct TickCounters {
157
166
  reap: u32,
158
167
  periodic: u32,
159
168
  cleanup: u32,
169
+ dlq_auto_retry: u32,
160
170
  }
161
171
 
162
172
  impl Scheduler {
@@ -316,6 +326,16 @@ impl Scheduler {
316
326
  }
317
327
  }
318
328
 
329
+ counters.dlq_auto_retry += 1;
330
+ if counters
331
+ .dlq_auto_retry
332
+ .is_multiple_of(self.config.dlq_auto_retry_interval)
333
+ {
334
+ if let Err(e) = self.auto_retry_dlq() {
335
+ error!("dlq auto-retry error: {e}");
336
+ }
337
+ }
338
+
319
339
  had_maintenance
320
340
  }
321
341
  }