taskflow 5.9.0__tar.gz → 5.10.0__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 (354) hide show
  1. {taskflow-5.9.0 → taskflow-5.10.0}/ChangeLog +15 -0
  2. {taskflow-5.9.0 → taskflow-5.10.0}/PKG-INFO +3 -3
  3. taskflow-5.10.0/releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml +6 -0
  4. taskflow-5.10.0/releasenotes/notes/remove-py38-15af791146f479e1.yaml +5 -0
  5. taskflow-5.10.0/releasenotes/source/2024.2.rst +6 -0
  6. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/index.rst +1 -0
  7. {taskflow-5.9.0 → taskflow-5.10.0}/requirements.txt +4 -0
  8. {taskflow-5.9.0 → taskflow-5.10.0}/setup.cfg +2 -2
  9. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/runtime.py +12 -0
  10. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_retries.py +52 -0
  11. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/utils.py +26 -0
  12. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/version.py +3 -8
  13. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/PKG-INFO +3 -3
  14. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/SOURCES.txt +3 -0
  15. taskflow-5.10.0/taskflow.egg-info/pbr.json +1 -0
  16. {taskflow-5.9.0 → taskflow-5.10.0}/tox.ini +0 -4
  17. taskflow-5.9.0/taskflow.egg-info/pbr.json +0 -1
  18. {taskflow-5.9.0 → taskflow-5.10.0}/.coveragerc +0 -0
  19. {taskflow-5.9.0 → taskflow-5.10.0}/.mailmap +0 -0
  20. {taskflow-5.9.0 → taskflow-5.10.0}/.pre-commit-config.yaml +0 -0
  21. {taskflow-5.9.0 → taskflow-5.10.0}/.stestr.conf +0 -0
  22. {taskflow-5.9.0 → taskflow-5.10.0}/.zuul.yaml +0 -0
  23. {taskflow-5.9.0 → taskflow-5.10.0}/AUTHORS +0 -0
  24. {taskflow-5.9.0 → taskflow-5.10.0}/CONTRIBUTING.rst +0 -0
  25. {taskflow-5.9.0 → taskflow-5.10.0}/LICENSE +0 -0
  26. {taskflow-5.9.0 → taskflow-5.10.0}/README.rst +0 -0
  27. {taskflow-5.9.0 → taskflow-5.10.0}/bindep.txt +0 -0
  28. {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/area_of_influence.graffle.tgz +0 -0
  29. {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/core.graffle.tgz +0 -0
  30. {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/jobboard.graffle.tgz +0 -0
  31. {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/tasks.graffle.tgz +0 -0
  32. {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/worker-engine.graffle.tgz +0 -0
  33. {taskflow-5.9.0 → taskflow-5.10.0}/doc/requirements.txt +0 -0
  34. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/conf.py +0 -0
  35. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/index.rst +0 -0
  36. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/templates/layout.html +0 -0
  37. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/arguments_and_results.rst +0 -0
  38. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/atoms.rst +0 -0
  39. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/conductors.rst +0 -0
  40. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/engines.rst +0 -0
  41. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/examples.rst +0 -0
  42. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/exceptions.rst +0 -0
  43. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/history.rst +0 -0
  44. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/area_of_influence.svg +0 -0
  45. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/conductor.png +0 -0
  46. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/conductor_cycle.png +0 -0
  47. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/distributed_flow_rpc.png +0 -0
  48. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/engine_states.svg +0 -0
  49. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/flow_states.svg +0 -0
  50. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/job_states.svg +0 -0
  51. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/jobboard.png +0 -0
  52. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/mandelbrot.png +0 -0
  53. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/retry_states.svg +0 -0
  54. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/task_states.svg +0 -0
  55. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/tasks.png +0 -0
  56. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/wbe_request_states.svg +0 -0
  57. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/worker-engine.svg +0 -0
  58. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/index.rst +0 -0
  59. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/inputs_and_outputs.rst +0 -0
  60. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/jobs.rst +0 -0
  61. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/notifications.rst +0 -0
  62. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/patterns.rst +0 -0
  63. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/persistence.rst +0 -0
  64. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/resumption.rst +0 -0
  65. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/shelf.rst +0 -0
  66. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/states.rst +0 -0
  67. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/types.rst +0 -0
  68. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/utils.rst +0 -0
  69. {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/workers.rst +0 -0
  70. {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/Debian.yaml +0 -0
  71. {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/RedHat.yaml +0 -0
  72. {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/pre.yml +0 -0
  73. {taskflow-5.9.0 → taskflow-5.10.0}/pylintrc +0 -0
  74. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/.placeholder +0 -0
  75. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml +0 -0
  76. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml +0 -0
  77. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/disable-process_executor-python-312-d1074c816bc8303e.yaml +0 -0
  78. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml +0 -0
  79. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml +0 -0
  80. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml +0 -0
  81. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml +0 -0
  82. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml +0 -0
  83. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml +0 -0
  84. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/redis-username-df0eb33869db09a2.yaml +0 -0
  85. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml +0 -0
  86. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml +0 -0
  87. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml +0 -0
  88. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml +0 -0
  89. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml +0 -0
  90. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2023.1.rst +0 -0
  91. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2023.2.rst +0 -0
  92. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2024.1.rst +0 -0
  93. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/_static/.placeholder +0 -0
  94. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/_templates/.placeholder +0 -0
  95. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/conf.py +0 -0
  96. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/ocata.rst +0 -0
  97. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/pike.rst +0 -0
  98. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/queens.rst +0 -0
  99. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/rocky.rst +0 -0
  100. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/stein.rst +0 -0
  101. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/train.rst +0 -0
  102. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/unreleased.rst +0 -0
  103. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/ussuri.rst +0 -0
  104. {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/victoria.rst +0 -0
  105. {taskflow-5.9.0 → taskflow-5.10.0}/run_tests.sh +0 -0
  106. {taskflow-5.9.0 → taskflow-5.10.0}/setup-etcd-env.sh +0 -0
  107. {taskflow-5.9.0 → taskflow-5.10.0}/setup.py +0 -0
  108. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/__init__.py +0 -0
  109. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/atom.py +0 -0
  110. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/__init__.py +0 -0
  111. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/__init__.py +0 -0
  112. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_blocking.py +0 -0
  113. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_executor.py +0 -0
  114. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_nonblocking.py +0 -0
  115. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/base.py +0 -0
  116. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/contrib/__init__.py +0 -0
  117. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/deciders.py +0 -0
  118. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/__init__.py +0 -0
  119. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/__init__.py +0 -0
  120. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/__init__.py +0 -0
  121. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/base.py +0 -0
  122. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/retry.py +0 -0
  123. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/task.py +0 -0
  124. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/builder.py +0 -0
  125. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/compiler.py +0 -0
  126. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/completer.py +0 -0
  127. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/deciders.py +0 -0
  128. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/engine.py +0 -0
  129. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/executor.py +0 -0
  130. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/process_executor.py +0 -0
  131. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/scheduler.py +0 -0
  132. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/scopes.py +0 -0
  133. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/selector.py +0 -0
  134. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/traversal.py +0 -0
  135. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/base.py +0 -0
  136. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/helpers.py +0 -0
  137. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/__init__.py +0 -0
  138. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/dispatcher.py +0 -0
  139. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/endpoint.py +0 -0
  140. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/engine.py +0 -0
  141. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/executor.py +0 -0
  142. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/protocol.py +0 -0
  143. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/proxy.py +0 -0
  144. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/server.py +0 -0
  145. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/types.py +0 -0
  146. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/worker.py +0 -0
  147. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/99_bottles.py +0 -0
  148. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/alphabet_soup.py +0 -0
  149. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/build_a_car.py +0 -0
  150. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/buildsystem.py +0 -0
  151. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/calculate_in_parallel.py +0 -0
  152. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/calculate_linear.py +0 -0
  153. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/create_parallel_volume.py +0 -0
  154. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/delayed_return.py +0 -0
  155. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/distance_calculator.py +0 -0
  156. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/dump_memory_backend.py +0 -0
  157. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/echo_listener.py +0 -0
  158. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/example_utils.py +0 -0
  159. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/fake_billing.py +0 -0
  160. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/graph_flow.py +0 -0
  161. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/hello_world.py +0 -0
  162. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/jobboard_produce_consume_colors.py +0 -0
  163. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/parallel_table_multiply.py +0 -0
  164. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/persistence_example.py +0 -0
  165. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/pseudo_scoping.out.txt +0 -0
  166. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/pseudo_scoping.py +0 -0
  167. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_from_backend.out.txt +0 -0
  168. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_from_backend.py +0 -0
  169. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/my_flows.py +0 -0
  170. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/resume_all.py +0 -0
  171. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/run_flow.py +0 -0
  172. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows.out.txt +0 -0
  173. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows.py +0 -0
  174. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_vm_boot.py +0 -0
  175. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_volume_create.py +0 -0
  176. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/retry_flow.out.txt +0 -0
  177. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/retry_flow.py +0 -0
  178. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/reverting_linear.out.txt +0 -0
  179. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/reverting_linear.py +0 -0
  180. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter.out.txt +0 -0
  181. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter.py +0 -0
  182. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter_enumerate.out.txt +0 -0
  183. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter_enumerate.py +0 -0
  184. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/share_engine_thread.py +0 -0
  185. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear.out.txt +0 -0
  186. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear.py +0 -0
  187. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_listening.out.txt +0 -0
  188. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_listening.py +0 -0
  189. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_pass.out.txt +0 -0
  190. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_pass.py +0 -0
  191. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_map_reduce.py +0 -0
  192. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/switch_graph_flow.py +0 -0
  193. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/timing_listener.py +0 -0
  194. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/tox_conductor.py +0 -0
  195. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_event_sender.py +0 -0
  196. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_mandelbrot.out.txt +0 -0
  197. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_mandelbrot.py +0 -0
  198. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_simple_linear.out.txt +0 -0
  199. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_simple_linear.py +0 -0
  200. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wrapped_exception.py +0 -0
  201. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/exceptions.py +0 -0
  202. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/flow.py +0 -0
  203. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/formatters.py +0 -0
  204. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/__init__.py +0 -0
  205. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/__init__.py +0 -0
  206. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_etcd.py +0 -0
  207. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_redis.py +0 -0
  208. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_zookeeper.py +0 -0
  209. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/base.py +0 -0
  210. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/__init__.py +0 -0
  211. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/base.py +0 -0
  212. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/capturing.py +0 -0
  213. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/claims.py +0 -0
  214. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/logging.py +0 -0
  215. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/printing.py +0 -0
  216. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/timing.py +0 -0
  217. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/logging.py +0 -0
  218. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/__init__.py +0 -0
  219. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/graph_flow.py +0 -0
  220. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/linear_flow.py +0 -0
  221. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/unordered_flow.py +0 -0
  222. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/__init__.py +0 -0
  223. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/__init__.py +0 -0
  224. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_dir.py +0 -0
  225. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_memory.py +0 -0
  226. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_sqlalchemy.py +0 -0
  227. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_zookeeper.py +0 -0
  228. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/__init__.py +0 -0
  229. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/README +0 -0
  230. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini +0 -0
  231. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -0
  232. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako +0 -0
  233. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/0bc3e1a3c135_set_result_meduimtext_type.py +0 -0
  234. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -0
  235. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -0
  236. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -0
  237. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -0
  238. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -0
  239. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/40fc8c914bd2_fix_atomdetails_failure_size.py +0 -0
  240. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -0
  241. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/6df9422fcb43_fix_flowdetails_meta_size.py +0 -0
  242. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -0
  243. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/README +0 -0
  244. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/migration.py +0 -0
  245. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/tables.py +0 -0
  246. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/base.py +0 -0
  247. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/models.py +0 -0
  248. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/path_based.py +0 -0
  249. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/retry.py +0 -0
  250. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/states.py +0 -0
  251. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/storage.py +0 -0
  252. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/task.py +0 -0
  253. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/test.py +0 -0
  254. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/__init__.py +0 -0
  255. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/fixtures.py +0 -0
  256. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/test_examples.py +0 -0
  257. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/__init__.py +0 -0
  258. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/__init__.py +0 -0
  259. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_builder.py +0 -0
  260. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_compile.py +0 -0
  261. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_creation.py +0 -0
  262. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_process_executor.py +0 -0
  263. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_scoping.py +0 -0
  264. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/__init__.py +0 -0
  265. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/base.py +0 -0
  266. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_entrypoint.py +0 -0
  267. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_etcd_job.py +0 -0
  268. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_redis_job.py +0 -0
  269. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_zk_job.py +0 -0
  270. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/__init__.py +0 -0
  271. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_graph_flow.py +0 -0
  272. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_linear_flow.py +0 -0
  273. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_unordered_flow.py +0 -0
  274. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/__init__.py +0 -0
  275. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/base.py +0 -0
  276. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_dir_persistence.py +0 -0
  277. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_memory_persistence.py +0 -0
  278. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_sql_persistence.py +0 -0
  279. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_zk_persistence.py +0 -0
  280. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_arguments_passing.py +0 -0
  281. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_check_transition.py +0 -0
  282. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_conductors.py +0 -0
  283. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_deciders.py +0 -0
  284. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_engine_helpers.py +0 -0
  285. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_engines.py +0 -0
  286. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_exceptions.py +0 -0
  287. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_failure.py +0 -0
  288. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_flow_dependencies.py +0 -0
  289. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_formatters.py +0 -0
  290. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_functor_task.py +0 -0
  291. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_listeners.py +0 -0
  292. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_mapfunctor_task.py +0 -0
  293. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_notifier.py +0 -0
  294. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_progress.py +0 -0
  295. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_reducefunctor_task.py +0 -0
  296. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_states.py +0 -0
  297. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_storage.py +0 -0
  298. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_suspend.py +0 -0
  299. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_task.py +0 -0
  300. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_types.py +0 -0
  301. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils.py +0 -0
  302. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_async_utils.py +0 -0
  303. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_binary.py +0 -0
  304. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_iter_utils.py +0 -0
  305. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_kazoo_utils.py +0 -0
  306. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_threading_utils.py +0 -0
  307. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/__init__.py +0 -0
  308. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_creation.py +0 -0
  309. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_dispatcher.py +0 -0
  310. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_endpoint.py +0 -0
  311. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_executor.py +0 -0
  312. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_message_pump.py +0 -0
  313. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_pipeline.py +0 -0
  314. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_protocol.py +0 -0
  315. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_proxy.py +0 -0
  316. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_server.py +0 -0
  317. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_types.py +0 -0
  318. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_worker.py +0 -0
  319. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/__init__.py +0 -0
  320. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/entity.py +0 -0
  321. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/failure.py +0 -0
  322. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/graph.py +0 -0
  323. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/latch.py +0 -0
  324. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/notifier.py +0 -0
  325. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/sets.py +0 -0
  326. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/timing.py +0 -0
  327. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/tree.py +0 -0
  328. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/__init__.py +0 -0
  329. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/async_utils.py +0 -0
  330. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/banner.py +0 -0
  331. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/eventlet_utils.py +0 -0
  332. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/iter_utils.py +0 -0
  333. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/kazoo_utils.py +0 -0
  334. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/kombu_utils.py +0 -0
  335. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/misc.py +0 -0
  336. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/persistence_utils.py +0 -0
  337. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/redis_utils.py +0 -0
  338. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/schema_utils.py +0 -0
  339. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/threading_utils.py +0 -0
  340. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/dependency_links.txt +0 -0
  341. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/entry_points.txt +0 -0
  342. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/not-zip-safe +0 -0
  343. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/requires.txt +0 -0
  344. {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/top_level.txt +0 -0
  345. {taskflow-5.9.0 → taskflow-5.10.0}/test-requirements.txt +0 -0
  346. {taskflow-5.9.0 → taskflow-5.10.0}/tools/clear_zk.sh +0 -0
  347. {taskflow-5.9.0 → taskflow-5.10.0}/tools/env_builder.sh +0 -0
  348. {taskflow-5.9.0 → taskflow-5.10.0}/tools/pretty_tox.sh +0 -0
  349. {taskflow-5.9.0 → taskflow-5.10.0}/tools/schema_generator.py +0 -0
  350. {taskflow-5.9.0 → taskflow-5.10.0}/tools/speed_test.py +0 -0
  351. {taskflow-5.9.0 → taskflow-5.10.0}/tools/state_graph.py +0 -0
  352. {taskflow-5.9.0 → taskflow-5.10.0}/tools/subunit_trace.py +0 -0
  353. {taskflow-5.9.0 → taskflow-5.10.0}/tools/test-setup.sh +0 -0
  354. {taskflow-5.9.0 → taskflow-5.10.0}/tools/update_states.sh +0 -0
@@ -1,6 +1,20 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 5.10.0
5
+ ------
6
+
7
+ * Add note about requirements lower bounds
8
+ * Remove Python 3.8 support
9
+ * Declare Python 3.12 support
10
+ * Remove unused usage of pkg\_resources
11
+ * Drop SQLALCHEMY\_WARN\_20
12
+ * Update master for stable/2024.2
13
+
14
+ 5.9.1
15
+ -----
16
+
17
+
4
18
  5.9.0
5
19
  -----
6
20
 
@@ -12,6 +26,7 @@ CHANGES
12
26
  -----
13
27
 
14
28
  * Python3.12: disable process\_executor, which depends on asyncore
29
+ * Fix REVERT\_ALL with Retries in unordered Flows
15
30
  * Remove SQLAlchemy tips jobs
16
31
  * Remove old excludes
17
32
  * Remove assertRaisesRegex
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskflow
3
- Version: 5.9.0
3
+ Version: 5.10.0
4
4
  Summary: Taskflow structured state management library.
5
5
  Home-page: https://docs.openstack.org/taskflow/latest/
6
6
  Author: OpenStack
@@ -91,15 +91,15 @@ Classifier: License :: OSI Approved :: Apache Software License
91
91
  Classifier: Operating System :: POSIX :: Linux
92
92
  Classifier: Programming Language :: Python
93
93
  Classifier: Programming Language :: Python :: 3
94
- Classifier: Programming Language :: Python :: 3.8
95
94
  Classifier: Programming Language :: Python :: 3.9
96
95
  Classifier: Programming Language :: Python :: 3.10
97
96
  Classifier: Programming Language :: Python :: 3.11
97
+ Classifier: Programming Language :: Python :: 3.12
98
98
  Classifier: Programming Language :: Python :: 3 :: Only
99
99
  Classifier: Programming Language :: Python :: Implementation :: CPython
100
100
  Classifier: Topic :: Software Development :: Libraries
101
101
  Classifier: Topic :: System :: Distributed Computing
102
- Requires-Python: >=3.8
102
+ Requires-Python: >=3.9
103
103
  Provides-Extra: database
104
104
  Provides-Extra: etcd
105
105
  Provides-Extra: eventlet
@@ -0,0 +1,6 @@
1
+ ---
2
+ fixes:
3
+ - |
4
+ Fixed a bug when using retries with unordered flows, a REVERT_ALL triggered
5
+ by one of the subflow was overriden by an other subflow running in parallel,
6
+ leading to an incomplete revert of the flow.
@@ -0,0 +1,5 @@
1
+ ---
2
+ upgrade:
3
+ - |
4
+ Support for Python 3.8 has been removed. Now the minimum python version
5
+ supported is 3.9 .
@@ -0,0 +1,6 @@
1
+ ===========================
2
+ 2024.2 Series Release Notes
3
+ ===========================
4
+
5
+ .. release-notes::
6
+ :branch: stable/2024.2
@@ -6,6 +6,7 @@
6
6
  :maxdepth: 1
7
7
 
8
8
  unreleased
9
+ 2024.2
9
10
  2024.1
10
11
  2023.2
11
12
  2023.1
@@ -1,3 +1,7 @@
1
+ # Requirements lower bounds listed here are our best effort to keep them up to
2
+ # date but we do not test them so no guarantee of having them all correct. If
3
+ # you find any incorrect lower bounds, let us know or propose a fix.
4
+
1
5
  # See: https://bugs.launchpad.net/pbr/+bug/1384919 for why this is here...
2
6
  pbr>=2.0.0 # Apache-2.0
3
7
 
@@ -7,7 +7,7 @@ author = OpenStack
7
7
  author_email = openstack-discuss@lists.openstack.org
8
8
  home_page = https://docs.openstack.org/taskflow/latest/
9
9
  keywords = reliable,tasks,execution,parallel,dataflow,workflows,distributed
10
- python_requires = >=3.8
10
+ python_requires = >=3.9
11
11
  classifier =
12
12
  Development Status :: 5 - Production/Stable
13
13
  Environment :: OpenStack
@@ -17,10 +17,10 @@ classifier =
17
17
  Operating System :: POSIX :: Linux
18
18
  Programming Language :: Python
19
19
  Programming Language :: Python :: 3
20
- Programming Language :: Python :: 3.8
21
20
  Programming Language :: Python :: 3.9
22
21
  Programming Language :: Python :: 3.10
23
22
  Programming Language :: Python :: 3.11
23
+ Programming Language :: Python :: 3.12
24
24
  Programming Language :: Python :: 3 :: Only
25
25
  Programming Language :: Python :: Implementation :: CPython
26
26
  Topic :: Software Development :: Libraries
@@ -291,6 +291,18 @@ class Runtime(object):
291
291
  """Resets all the provided atoms to the given state and intention."""
292
292
  tweaked = []
293
293
  for atom in atoms:
294
+ cur_intention = self.storage.get_atom_intention(atom.name)
295
+ # Don't trigger a RETRY if the atom needs to be REVERTED.
296
+ # This is a workaround for a bug when REVERT_ALL is applied to
297
+ # unordered flows
298
+ # (https://bugs.launchpad.net/taskflow/+bug/2043808)
299
+ # A subflow may trigger a REVERT_ALL, all the atoms of all the
300
+ # related subflows are marked as REVERT but a task of a related
301
+ # flow may still be running in another thread. If this task
302
+ # triggers a RETRY, it overrides the previously set REVERT status,
303
+ # breaking the revert path of the flow.
304
+ if cur_intention == st.REVERT and intention == st.RETRY:
305
+ continue
294
306
  if state or intention:
295
307
  tweaked.append((atom, state, intention))
296
308
  if state:
@@ -15,8 +15,10 @@
15
15
  # under the License.
16
16
 
17
17
  import testtools
18
+ import time
18
19
 
19
20
  import taskflow.engines
21
+ from taskflow.engines.action_engine import executor
20
22
  from taskflow import exceptions as exc
21
23
  from taskflow.patterns import graph_flow as gf
22
24
  from taskflow.patterns import linear_flow as lf
@@ -502,6 +504,56 @@ class RetryTest(utils.EngineTestBase):
502
504
  self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
503
505
  self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
504
506
 
507
+ def test_restart_reverted_unordered_flows_with_retries(self):
508
+ now = time.time()
509
+
510
+ # First flow of an unordered flow:
511
+ subflow1 = lf.Flow('subflow1')
512
+
513
+ # * a task that completes in 3 sec with a few retries
514
+ subsubflow1 = lf.Flow('subflow1.subsubflow1',
515
+ retry=utils.RetryFiveTimes())
516
+ subsubflow1.add(utils.SuccessAfter3Sec('subflow1.fail1',
517
+ inject={'start_time': now}))
518
+ subflow1.add(subsubflow1)
519
+
520
+ # * a task that fails and triggers a revert after 5 retries
521
+ subsubflow2 = lf.Flow('subflow1.subsubflow2',
522
+ retry=utils.RetryFiveTimes())
523
+ subsubflow2.add(utils.FailingTask('subflow1.fail2'))
524
+ subflow1.add(subsubflow2)
525
+
526
+ # Second flow of the unordered flow:
527
+ subflow2 = lf.Flow('subflow2')
528
+
529
+ # * a task that always fails and retries
530
+ subsubflow1 = lf.Flow('subflow2.subsubflow1',
531
+ retry=utils.AlwaysRetry())
532
+ subsubflow1.add(utils.FailingTask('subflow2.fail1'))
533
+ subflow2.add(subsubflow1)
534
+
535
+ unordered_flow = uf.Flow('unordered_flow')
536
+ unordered_flow.add(subflow1, subflow2)
537
+
538
+ # Main flow, contains a simple task and an unordered flow
539
+ flow = lf.Flow('test')
540
+ flow.add(utils.NoopTask('task1'))
541
+ flow.add(unordered_flow)
542
+
543
+ engine = self._make_engine(flow)
544
+
545
+ # This test fails when using Green threads, skipping it for now
546
+ if isinstance(engine._task_executor,
547
+ executor.ParallelGreenThreadTaskExecutor):
548
+ self.skipTest("Skipping this test when using green threads.")
549
+
550
+ with utils.CaptureListener(engine) as capturer:
551
+ self.assertRaisesRegex(exc.WrappedFailure,
552
+ '.*RuntimeError: Woot!',
553
+ engine.run)
554
+ # task1 should have been reverted
555
+ self.assertIn('task1.t REVERTED(None)', capturer.values)
556
+
505
557
  def test_run_just_retry(self):
506
558
  flow = utils.OneReturnRetry(provides='x')
507
559
  engine = self._make_engine(flow)
@@ -227,6 +227,32 @@ class FailingTask(ProgressingTask):
227
227
  raise RuntimeError('Woot!')
228
228
 
229
229
 
230
+ class SimpleTask(task.Task):
231
+ def execute(self, time_sleep=0, **kwargs):
232
+ time.sleep(time_sleep)
233
+
234
+
235
+ class SuccessAfter3Sec(task.Task):
236
+ def execute(self, start_time, **kwargs):
237
+ now = time.time()
238
+ if now - start_time >= 3:
239
+ return None
240
+ raise RuntimeError('Woot!')
241
+
242
+
243
+ class RetryFiveTimes(retry.Times):
244
+ def on_failure(self, history, *args, **kwargs):
245
+ if len(history) < 5:
246
+ time.sleep(1)
247
+ return retry.RETRY
248
+ return retry.REVERT_ALL
249
+
250
+
251
+ class AlwaysRetry(retry.Times):
252
+ def on_failure(self, history, *args, **kwargs):
253
+ return retry.RETRY
254
+
255
+
230
256
  class OptionalTask(task.Task):
231
257
  def execute(self, a, b=5):
232
258
  result = a * b
@@ -14,19 +14,14 @@
14
14
  # License for the specific language governing permissions and limitations
15
15
  # under the License.
16
16
 
17
- import pkg_resources
17
+ from pbr import version as pbr_version
18
18
 
19
19
  TASK_VENDOR = "OpenStack Foundation"
20
20
  TASK_PRODUCT = "OpenStack TaskFlow"
21
21
  TASK_PACKAGE = None # OS distro package version suffix
22
22
 
23
- try:
24
- from pbr import version as pbr_version
25
- _version_info = pbr_version.VersionInfo('taskflow')
26
- version_string = _version_info.version_string
27
- except ImportError:
28
- _version_info = pkg_resources.get_distribution('taskflow')
29
- version_string = lambda: _version_info.version
23
+ _version_info = pbr_version.VersionInfo('taskflow')
24
+ version_string = _version_info.version_string
30
25
 
31
26
 
32
27
  def version_string_with_package():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskflow
3
- Version: 5.9.0
3
+ Version: 5.10.0
4
4
  Summary: Taskflow structured state management library.
5
5
  Home-page: https://docs.openstack.org/taskflow/latest/
6
6
  Author: OpenStack
@@ -91,15 +91,15 @@ Classifier: License :: OSI Approved :: Apache Software License
91
91
  Classifier: Operating System :: POSIX :: Linux
92
92
  Classifier: Programming Language :: Python
93
93
  Classifier: Programming Language :: Python :: 3
94
- Classifier: Programming Language :: Python :: 3.8
95
94
  Classifier: Programming Language :: Python :: 3.9
96
95
  Classifier: Programming Language :: Python :: 3.10
97
96
  Classifier: Programming Language :: Python :: 3.11
97
+ Classifier: Programming Language :: Python :: 3.12
98
98
  Classifier: Programming Language :: Python :: 3 :: Only
99
99
  Classifier: Programming Language :: Python :: Implementation :: CPython
100
100
  Classifier: Topic :: Software Development :: Libraries
101
101
  Classifier: Topic :: System :: Distributed Computing
102
- Requires-Python: >=3.8
102
+ Requires-Python: >=3.9
103
103
  Provides-Extra: database
104
104
  Provides-Extra: etcd
105
105
  Provides-Extra: eventlet
@@ -70,9 +70,11 @@ releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
70
70
  releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml
71
71
  releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml
72
72
  releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml
73
+ releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml
73
74
  releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml
74
75
  releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml
75
76
  releasenotes/notes/redis-username-df0eb33869db09a2.yaml
77
+ releasenotes/notes/remove-py38-15af791146f479e1.yaml
76
78
  releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml
77
79
  releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml
78
80
  releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml
@@ -81,6 +83,7 @@ releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml
81
83
  releasenotes/source/2023.1.rst
82
84
  releasenotes/source/2023.2.rst
83
85
  releasenotes/source/2024.1.rst
86
+ releasenotes/source/2024.2.rst
84
87
  releasenotes/source/conf.py
85
88
  releasenotes/source/index.rst
86
89
  releasenotes/source/ocata.rst
@@ -0,0 +1 @@
1
+ {"git_version": "ca0b7bbe", "is_release": true}
@@ -3,9 +3,6 @@ minversion = 3.18.0
3
3
  envlist = cover,docs,pep8,py3,pylint,update-states
4
4
 
5
5
  [testenv]
6
- setenv =
7
- # TODO(stephenfin): Remove once we bump our upper-constraint to SQLAlchemy 2.0
8
- SQLALCHEMY_WARN_20=1
9
6
  # We need to install a bit more than just `test' because those drivers have
10
7
  # custom tests that we always run
11
8
  deps =
@@ -52,7 +49,6 @@ deps =
52
49
  {[testenv]deps}
53
50
  coverage>=3.6
54
51
  setenv =
55
- {[testenv]setenv}
56
52
  PYTHON=coverage run --source taskflow --parallel-mode
57
53
  commands =
58
54
  stestr run {posargs}
@@ -1 +0,0 @@
1
- {"git_version": "fc14510a", "is_release": true}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes