taskflow 5.10.0__tar.gz → 5.12.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 (357) hide show
  1. {taskflow-5.10.0 → taskflow-5.12.0}/.pre-commit-config.yaml +5 -18
  2. {taskflow-5.10.0 → taskflow-5.12.0}/.zuul.yaml +6 -0
  3. {taskflow-5.10.0 → taskflow-5.12.0}/ChangeLog +23 -0
  4. taskflow-5.12.0/PKG-INFO +148 -0
  5. taskflow-5.12.0/releasenotes/notes/deprecate-eventlet-df4a34a7d56acc47.yaml +10 -0
  6. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/2023.1.rst +1 -1
  7. {taskflow-5.10.0 → taskflow-5.12.0}/requirements.txt +3 -0
  8. {taskflow-5.10.0 → taskflow-5.12.0}/setup-etcd-env.sh +1 -1
  9. {taskflow-5.10.0 → taskflow-5.12.0}/setup.cfg +0 -9
  10. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/test_etcd_job.py +2 -0
  11. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/test_redis_job.py +2 -1
  12. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_failure.py +2 -5
  13. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/utils.py +7 -6
  14. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/failure.py +2 -6
  15. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/eventlet_utils.py +3 -1
  16. taskflow-5.12.0/taskflow.egg-info/PKG-INFO +148 -0
  17. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/SOURCES.txt +2 -1
  18. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/entry_points.txt +0 -1
  19. taskflow-5.12.0/taskflow.egg-info/pbr.json +1 -0
  20. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/requires.txt +26 -16
  21. {taskflow-5.10.0 → taskflow-5.12.0}/test-requirements.txt +1 -4
  22. {taskflow-5.10.0 → taskflow-5.12.0}/tox.ini +7 -3
  23. taskflow-5.10.0/PKG-INFO +0 -109
  24. taskflow-5.10.0/taskflow.egg-info/PKG-INFO +0 -109
  25. taskflow-5.10.0/taskflow.egg-info/pbr.json +0 -1
  26. {taskflow-5.10.0 → taskflow-5.12.0}/.coveragerc +0 -0
  27. {taskflow-5.10.0 → taskflow-5.12.0}/.mailmap +0 -0
  28. /taskflow-5.10.0/pylintrc → /taskflow-5.12.0/.pylintrc +0 -0
  29. {taskflow-5.10.0 → taskflow-5.12.0}/.stestr.conf +0 -0
  30. {taskflow-5.10.0 → taskflow-5.12.0}/AUTHORS +0 -0
  31. {taskflow-5.10.0 → taskflow-5.12.0}/CONTRIBUTING.rst +0 -0
  32. {taskflow-5.10.0 → taskflow-5.12.0}/LICENSE +0 -0
  33. {taskflow-5.10.0 → taskflow-5.12.0}/README.rst +0 -0
  34. {taskflow-5.10.0 → taskflow-5.12.0}/bindep.txt +0 -0
  35. {taskflow-5.10.0 → taskflow-5.12.0}/doc/diagrams/area_of_influence.graffle.tgz +0 -0
  36. {taskflow-5.10.0 → taskflow-5.12.0}/doc/diagrams/core.graffle.tgz +0 -0
  37. {taskflow-5.10.0 → taskflow-5.12.0}/doc/diagrams/jobboard.graffle.tgz +0 -0
  38. {taskflow-5.10.0 → taskflow-5.12.0}/doc/diagrams/tasks.graffle.tgz +0 -0
  39. {taskflow-5.10.0 → taskflow-5.12.0}/doc/diagrams/worker-engine.graffle.tgz +0 -0
  40. {taskflow-5.10.0 → taskflow-5.12.0}/doc/requirements.txt +0 -0
  41. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/conf.py +0 -0
  42. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/index.rst +0 -0
  43. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/templates/layout.html +0 -0
  44. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/arguments_and_results.rst +0 -0
  45. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/atoms.rst +0 -0
  46. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/conductors.rst +0 -0
  47. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/engines.rst +0 -0
  48. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/examples.rst +0 -0
  49. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/exceptions.rst +0 -0
  50. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/history.rst +0 -0
  51. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/area_of_influence.svg +0 -0
  52. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/conductor.png +0 -0
  53. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/conductor_cycle.png +0 -0
  54. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/distributed_flow_rpc.png +0 -0
  55. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/engine_states.svg +0 -0
  56. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/flow_states.svg +0 -0
  57. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/job_states.svg +0 -0
  58. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/jobboard.png +0 -0
  59. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/mandelbrot.png +0 -0
  60. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/retry_states.svg +0 -0
  61. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/task_states.svg +0 -0
  62. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/tasks.png +0 -0
  63. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/wbe_request_states.svg +0 -0
  64. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/img/worker-engine.svg +0 -0
  65. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/index.rst +0 -0
  66. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/inputs_and_outputs.rst +0 -0
  67. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/jobs.rst +0 -0
  68. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/notifications.rst +0 -0
  69. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/patterns.rst +0 -0
  70. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/persistence.rst +0 -0
  71. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/resumption.rst +0 -0
  72. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/shelf.rst +0 -0
  73. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/states.rst +0 -0
  74. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/types.rst +0 -0
  75. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/utils.rst +0 -0
  76. {taskflow-5.10.0 → taskflow-5.12.0}/doc/source/user/workers.rst +0 -0
  77. {taskflow-5.10.0 → taskflow-5.12.0}/playbooks/tests/functional/Debian.yaml +0 -0
  78. {taskflow-5.10.0 → taskflow-5.12.0}/playbooks/tests/functional/RedHat.yaml +0 -0
  79. {taskflow-5.10.0 → taskflow-5.12.0}/playbooks/tests/functional/pre.yml +0 -0
  80. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/.placeholder +0 -0
  81. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml +0 -0
  82. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml +0 -0
  83. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/disable-process_executor-python-312-d1074c816bc8303e.yaml +0 -0
  84. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml +0 -0
  85. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml +0 -0
  86. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml +0 -0
  87. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml +0 -0
  88. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml +0 -0
  89. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml +0 -0
  90. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml +0 -0
  91. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/redis-username-df0eb33869db09a2.yaml +0 -0
  92. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/remove-py38-15af791146f479e1.yaml +0 -0
  93. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml +0 -0
  94. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml +0 -0
  95. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml +0 -0
  96. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml +0 -0
  97. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml +0 -0
  98. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/2023.2.rst +0 -0
  99. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/2024.1.rst +0 -0
  100. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/2024.2.rst +0 -0
  101. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/_static/.placeholder +0 -0
  102. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/_templates/.placeholder +0 -0
  103. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/conf.py +0 -0
  104. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/index.rst +0 -0
  105. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/ocata.rst +0 -0
  106. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/pike.rst +0 -0
  107. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/queens.rst +0 -0
  108. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/rocky.rst +0 -0
  109. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/stein.rst +0 -0
  110. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/train.rst +0 -0
  111. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/unreleased.rst +0 -0
  112. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/ussuri.rst +0 -0
  113. {taskflow-5.10.0 → taskflow-5.12.0}/releasenotes/source/victoria.rst +0 -0
  114. {taskflow-5.10.0 → taskflow-5.12.0}/run_tests.sh +0 -0
  115. {taskflow-5.10.0 → taskflow-5.12.0}/setup.py +0 -0
  116. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/__init__.py +0 -0
  117. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/atom.py +0 -0
  118. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/__init__.py +0 -0
  119. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/backends/__init__.py +0 -0
  120. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/backends/impl_blocking.py +0 -0
  121. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/backends/impl_executor.py +0 -0
  122. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/backends/impl_nonblocking.py +0 -0
  123. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/conductors/base.py +0 -0
  124. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/contrib/__init__.py +0 -0
  125. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/deciders.py +0 -0
  126. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/__init__.py +0 -0
  127. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/__init__.py +0 -0
  128. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/actions/__init__.py +0 -0
  129. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/actions/base.py +0 -0
  130. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/actions/retry.py +0 -0
  131. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/actions/task.py +0 -0
  132. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/builder.py +0 -0
  133. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/compiler.py +0 -0
  134. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/completer.py +0 -0
  135. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/deciders.py +0 -0
  136. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/engine.py +0 -0
  137. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/executor.py +0 -0
  138. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/process_executor.py +0 -0
  139. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/runtime.py +0 -0
  140. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/scheduler.py +0 -0
  141. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/scopes.py +0 -0
  142. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/selector.py +0 -0
  143. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/action_engine/traversal.py +0 -0
  144. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/base.py +0 -0
  145. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/helpers.py +0 -0
  146. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/__init__.py +0 -0
  147. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/dispatcher.py +0 -0
  148. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/endpoint.py +0 -0
  149. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/engine.py +0 -0
  150. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/executor.py +0 -0
  151. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/protocol.py +0 -0
  152. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/proxy.py +0 -0
  153. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/server.py +0 -0
  154. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/types.py +0 -0
  155. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/engines/worker_based/worker.py +0 -0
  156. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/99_bottles.py +0 -0
  157. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/alphabet_soup.py +0 -0
  158. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/build_a_car.py +0 -0
  159. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/buildsystem.py +0 -0
  160. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/calculate_in_parallel.py +0 -0
  161. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/calculate_linear.py +0 -0
  162. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/create_parallel_volume.py +0 -0
  163. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/delayed_return.py +0 -0
  164. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/distance_calculator.py +0 -0
  165. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/dump_memory_backend.py +0 -0
  166. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/echo_listener.py +0 -0
  167. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/example_utils.py +0 -0
  168. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/fake_billing.py +0 -0
  169. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/graph_flow.py +0 -0
  170. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/hello_world.py +0 -0
  171. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/jobboard_produce_consume_colors.py +0 -0
  172. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/parallel_table_multiply.py +0 -0
  173. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/persistence_example.py +0 -0
  174. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/pseudo_scoping.out.txt +0 -0
  175. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/pseudo_scoping.py +0 -0
  176. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_from_backend.out.txt +0 -0
  177. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_from_backend.py +0 -0
  178. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_many_flows/my_flows.py +0 -0
  179. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_many_flows/resume_all.py +0 -0
  180. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_many_flows/run_flow.py +0 -0
  181. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_many_flows.out.txt +0 -0
  182. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_many_flows.py +0 -0
  183. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_vm_boot.py +0 -0
  184. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/resume_volume_create.py +0 -0
  185. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/retry_flow.out.txt +0 -0
  186. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/retry_flow.py +0 -0
  187. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/reverting_linear.out.txt +0 -0
  188. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/reverting_linear.py +0 -0
  189. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/run_by_iter.out.txt +0 -0
  190. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/run_by_iter.py +0 -0
  191. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/run_by_iter_enumerate.out.txt +0 -0
  192. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/run_by_iter_enumerate.py +0 -0
  193. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/share_engine_thread.py +0 -0
  194. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear.out.txt +0 -0
  195. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear.py +0 -0
  196. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear_listening.out.txt +0 -0
  197. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear_listening.py +0 -0
  198. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear_pass.out.txt +0 -0
  199. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_linear_pass.py +0 -0
  200. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/simple_map_reduce.py +0 -0
  201. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/switch_graph_flow.py +0 -0
  202. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/timing_listener.py +0 -0
  203. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/tox_conductor.py +0 -0
  204. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wbe_event_sender.py +0 -0
  205. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wbe_mandelbrot.out.txt +0 -0
  206. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wbe_mandelbrot.py +0 -0
  207. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wbe_simple_linear.out.txt +0 -0
  208. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wbe_simple_linear.py +0 -0
  209. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/examples/wrapped_exception.py +0 -0
  210. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/exceptions.py +0 -0
  211. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/flow.py +0 -0
  212. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/formatters.py +0 -0
  213. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/__init__.py +0 -0
  214. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/backends/__init__.py +0 -0
  215. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/backends/impl_etcd.py +0 -0
  216. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/backends/impl_redis.py +0 -0
  217. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/backends/impl_zookeeper.py +0 -0
  218. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/jobs/base.py +0 -0
  219. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/__init__.py +0 -0
  220. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/base.py +0 -0
  221. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/capturing.py +0 -0
  222. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/claims.py +0 -0
  223. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/logging.py +0 -0
  224. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/printing.py +0 -0
  225. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/listeners/timing.py +0 -0
  226. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/logging.py +0 -0
  227. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/patterns/__init__.py +0 -0
  228. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/patterns/graph_flow.py +0 -0
  229. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/patterns/linear_flow.py +0 -0
  230. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/patterns/unordered_flow.py +0 -0
  231. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/__init__.py +0 -0
  232. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/__init__.py +0 -0
  233. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/impl_dir.py +0 -0
  234. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/impl_memory.py +0 -0
  235. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/impl_sqlalchemy.py +0 -0
  236. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/impl_zookeeper.py +0 -0
  237. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/__init__.py +0 -0
  238. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/README +0 -0
  239. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini +0 -0
  240. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -0
  241. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako +0 -0
  242. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/0bc3e1a3c135_set_result_meduimtext_type.py +0 -0
  243. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -0
  244. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -0
  245. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -0
  246. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -0
  247. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -0
  248. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/40fc8c914bd2_fix_atomdetails_failure_size.py +0 -0
  249. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -0
  250. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/6df9422fcb43_fix_flowdetails_meta_size.py +0 -0
  251. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -0
  252. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/README +0 -0
  253. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/migration.py +0 -0
  254. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/backends/sqlalchemy/tables.py +0 -0
  255. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/base.py +0 -0
  256. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/models.py +0 -0
  257. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/persistence/path_based.py +0 -0
  258. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/retry.py +0 -0
  259. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/states.py +0 -0
  260. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/storage.py +0 -0
  261. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/task.py +0 -0
  262. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/test.py +0 -0
  263. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/__init__.py +0 -0
  264. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/fixtures.py +0 -0
  265. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/test_examples.py +0 -0
  266. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/__init__.py +0 -0
  267. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/__init__.py +0 -0
  268. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/test_builder.py +0 -0
  269. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/test_compile.py +0 -0
  270. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/test_creation.py +0 -0
  271. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/test_process_executor.py +0 -0
  272. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/action_engine/test_scoping.py +0 -0
  273. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/__init__.py +0 -0
  274. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/base.py +0 -0
  275. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/test_entrypoint.py +0 -0
  276. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/jobs/test_zk_job.py +0 -0
  277. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/patterns/__init__.py +0 -0
  278. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/patterns/test_graph_flow.py +0 -0
  279. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/patterns/test_linear_flow.py +0 -0
  280. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/patterns/test_unordered_flow.py +0 -0
  281. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/__init__.py +0 -0
  282. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/base.py +0 -0
  283. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/test_dir_persistence.py +0 -0
  284. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/test_memory_persistence.py +0 -0
  285. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/test_sql_persistence.py +0 -0
  286. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/persistence/test_zk_persistence.py +0 -0
  287. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_arguments_passing.py +0 -0
  288. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_check_transition.py +0 -0
  289. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_conductors.py +0 -0
  290. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_deciders.py +0 -0
  291. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_engine_helpers.py +0 -0
  292. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_engines.py +0 -0
  293. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_exceptions.py +0 -0
  294. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_flow_dependencies.py +0 -0
  295. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_formatters.py +0 -0
  296. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_functor_task.py +0 -0
  297. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_listeners.py +0 -0
  298. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_mapfunctor_task.py +0 -0
  299. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_notifier.py +0 -0
  300. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_progress.py +0 -0
  301. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_reducefunctor_task.py +0 -0
  302. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_retries.py +0 -0
  303. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_states.py +0 -0
  304. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_storage.py +0 -0
  305. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_suspend.py +0 -0
  306. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_task.py +0 -0
  307. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_types.py +0 -0
  308. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils.py +0 -0
  309. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils_async_utils.py +0 -0
  310. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils_binary.py +0 -0
  311. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils_iter_utils.py +0 -0
  312. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils_kazoo_utils.py +0 -0
  313. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/test_utils_threading_utils.py +0 -0
  314. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/__init__.py +0 -0
  315. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_creation.py +0 -0
  316. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_dispatcher.py +0 -0
  317. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_endpoint.py +0 -0
  318. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_executor.py +0 -0
  319. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_message_pump.py +0 -0
  320. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_pipeline.py +0 -0
  321. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_protocol.py +0 -0
  322. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_proxy.py +0 -0
  323. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_server.py +0 -0
  324. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_types.py +0 -0
  325. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/tests/unit/worker_based/test_worker.py +0 -0
  326. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/__init__.py +0 -0
  327. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/entity.py +0 -0
  328. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/graph.py +0 -0
  329. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/latch.py +0 -0
  330. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/notifier.py +0 -0
  331. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/sets.py +0 -0
  332. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/timing.py +0 -0
  333. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/types/tree.py +0 -0
  334. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/__init__.py +0 -0
  335. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/async_utils.py +0 -0
  336. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/banner.py +0 -0
  337. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/iter_utils.py +0 -0
  338. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/kazoo_utils.py +0 -0
  339. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/kombu_utils.py +0 -0
  340. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/misc.py +0 -0
  341. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/persistence_utils.py +0 -0
  342. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/redis_utils.py +0 -0
  343. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/schema_utils.py +0 -0
  344. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/utils/threading_utils.py +0 -0
  345. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow/version.py +0 -0
  346. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/dependency_links.txt +0 -0
  347. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/not-zip-safe +0 -0
  348. {taskflow-5.10.0 → taskflow-5.12.0}/taskflow.egg-info/top_level.txt +0 -0
  349. {taskflow-5.10.0 → taskflow-5.12.0}/tools/clear_zk.sh +0 -0
  350. {taskflow-5.10.0 → taskflow-5.12.0}/tools/env_builder.sh +0 -0
  351. {taskflow-5.10.0 → taskflow-5.12.0}/tools/pretty_tox.sh +0 -0
  352. {taskflow-5.10.0 → taskflow-5.12.0}/tools/schema_generator.py +0 -0
  353. {taskflow-5.10.0 → taskflow-5.12.0}/tools/speed_test.py +0 -0
  354. {taskflow-5.10.0 → taskflow-5.12.0}/tools/state_graph.py +0 -0
  355. {taskflow-5.10.0 → taskflow-5.12.0}/tools/subunit_trace.py +0 -0
  356. {taskflow-5.10.0 → taskflow-5.12.0}/tools/test-setup.sh +0 -0
  357. {taskflow-5.10.0 → taskflow-5.12.0}/tools/update_states.sh +0 -0
@@ -1,15 +1,6 @@
1
- # We from the Oslo project decided to pin repos based on the
2
- # commit hash instead of the version tag to prevend arbitrary
3
- # code from running in developer's machines. To update to a
4
- # newer version, run `pre-commit autoupdate` and then replace
5
- # the newer versions with their commit hash.
6
-
7
- default_language_version:
8
- python: python3
9
-
10
1
  repos:
11
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
12
- rev: 9136088a246768144165fcc3ecc3d31bb686920a # v3.3.0
3
+ rev: v5.0.0
13
4
  hooks:
14
5
  - id: trailing-whitespace
15
6
  # Replaces or checks mixed line ending
@@ -27,13 +18,9 @@ repos:
27
18
  - id: debug-statements
28
19
  - id: check-yaml
29
20
  files: .*\.(yaml|yml)$
30
- - repo: local
21
+ - repo: https://opendev.org/openstack/hacking
22
+ rev: 7.0.0
31
23
  hooks:
32
- - id: flake8
33
- name: flake8
34
- additional_dependencies:
35
- - hacking>=6.1.0,<6.2.0
36
- language: python
37
- entry: flake8
38
- files: '^.*\.py$'
24
+ - id: hacking
25
+ additional_dependencies: []
39
26
  exclude: '^(doc|releasenotes|tools)/.*$'
@@ -5,6 +5,12 @@
5
5
  pre-run: playbooks/tests/functional/pre.yml
6
6
  vars:
7
7
  tox_envlist: functional
8
+ irrelevant-files:
9
+ - ^.*\.rst$
10
+ - ^doc/.*$
11
+ - ^LICENSE$
12
+ - ^releasenotes/.*$
13
+ - ^\.pre-commit-config\.yaml$
8
14
 
9
15
  - job:
10
16
  name: taskflow-functional-redis
@@ -1,6 +1,29 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 5.12.0
5
+ ------
6
+
7
+
8
+ 5.11.0
9
+ ------
10
+
11
+ * Skip installation to speed up pep8
12
+ * Deprecate utility for eventlet
13
+ * fix typo
14
+ * Skip functional jobs for license file update
15
+ * pre-commit: Bump versions
16
+ * Remove "test" extra
17
+ * Sync test requirements
18
+ * Remove zake from runtime dependency
19
+ * Read pifpaf environments to detect service ports
20
+ * Drop unused constants
21
+ * Bump etcd in tests
22
+ * Replace oslo\_utils.encodeutils.exception\_to\_unicode
23
+ * Bump pylint
24
+ * Skip functional tests for doc update
25
+ * reno: Update master for unmaintained/2023.1
26
+
4
27
  5.10.0
5
28
  ------
6
29
 
@@ -0,0 +1,148 @@
1
+ Metadata-Version: 2.1
2
+ Name: taskflow
3
+ Version: 5.12.0
4
+ Summary: Taskflow structured state management library.
5
+ Home-page: https://docs.openstack.org/taskflow/latest/
6
+ Author: OpenStack
7
+ Author-email: openstack-discuss@lists.openstack.org
8
+ Keywords: reliable,tasks,execution,parallel,dataflow,workflows,distributed
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Environment :: OpenStack
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: Implementation :: CPython
23
+ Classifier: Topic :: Software Development :: Libraries
24
+ Classifier: Topic :: System :: Distributed Computing
25
+ Requires-Python: >=3.9
26
+ License-File: LICENSE
27
+ Requires-Dist: pbr>=2.0.0
28
+ Requires-Dist: debtcollector>=1.2.0
29
+ Requires-Dist: futurist>=1.2.0
30
+ Requires-Dist: fasteners>=0.17.3
31
+ Requires-Dist: networkx>=2.1.0
32
+ Requires-Dist: stevedore>=1.20.0
33
+ Requires-Dist: jsonschema>=3.2.0
34
+ Requires-Dist: automaton>=1.9.0
35
+ Requires-Dist: oslo.utils>=3.33.0
36
+ Requires-Dist: oslo.serialization>=2.18.0
37
+ Requires-Dist: tenacity>=6.0.0
38
+ Requires-Dist: cachetools>=2.0.0
39
+ Requires-Dist: pydot>=1.2.4
40
+ Provides-Extra: zookeeper
41
+ Requires-Dist: kazoo>=2.6.0; extra == "zookeeper"
42
+ Provides-Extra: redis
43
+ Requires-Dist: redis>=4.0.0; extra == "redis"
44
+ Provides-Extra: etcd
45
+ Requires-Dist: etcd3gw>=2.0.0; extra == "etcd"
46
+ Provides-Extra: workers
47
+ Requires-Dist: kombu>=4.3.0; extra == "workers"
48
+ Provides-Extra: eventlet
49
+ Requires-Dist: eventlet>=0.18.2; extra == "eventlet"
50
+ Provides-Extra: database
51
+ Requires-Dist: SQLAlchemy>=1.0.10; extra == "database"
52
+ Requires-Dist: alembic>=0.8.10; extra == "database"
53
+ Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "database"
54
+ Requires-Dist: PyMySQL>=0.7.6; extra == "database"
55
+ Requires-Dist: psycopg2>=2.8.0; extra == "database"
56
+ Provides-Extra: test
57
+ Requires-Dist: kazoo>=2.6.0; extra == "test"
58
+ Requires-Dist: redis>=4.0.0; extra == "test"
59
+ Requires-Dist: etcd3gw>=2.0.0; extra == "test"
60
+ Requires-Dist: kombu>=4.3.0; extra == "test"
61
+ Requires-Dist: eventlet>=0.18.2; extra == "test"
62
+ Requires-Dist: SQLAlchemy>=1.0.10; extra == "test"
63
+ Requires-Dist: alembic>=0.8.10; extra == "test"
64
+ Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "test"
65
+ Requires-Dist: PyMySQL>=0.7.6; extra == "test"
66
+ Requires-Dist: psycopg2>=2.8.0; extra == "test"
67
+ Requires-Dist: zake>=0.1.6; extra == "test"
68
+ Requires-Dist: pydotplus>=2.0.2; extra == "test"
69
+ Requires-Dist: oslotest>=3.2.0; extra == "test"
70
+ Requires-Dist: testtools>=2.2.0; extra == "test"
71
+ Requires-Dist: testscenarios>=0.4; extra == "test"
72
+ Requires-Dist: stestr>=2.0.0; extra == "test"
73
+ Requires-Dist: pifpaf>=0.10.0; extra == "test"
74
+
75
+ ========================
76
+ Team and repository tags
77
+ ========================
78
+
79
+ .. image:: https://governance.openstack.org/tc/badges/taskflow.svg
80
+ :target: https://governance.openstack.org/tc/reference/tags/index.html
81
+
82
+ .. Change things from this point on
83
+
84
+ TaskFlow
85
+ ========
86
+
87
+ .. image:: https://img.shields.io/pypi/v/taskflow.svg
88
+ :target: https://pypi.org/project/taskflow/
89
+ :alt: Latest Version
90
+
91
+ A library to do [jobs, tasks, flows] in a highly available, easy to understand
92
+ and declarative manner (and more!) to be used with OpenStack and other
93
+ projects.
94
+
95
+ * Free software: Apache license
96
+ * Documentation: https://docs.openstack.org/taskflow/latest/
97
+ * Source: https://opendev.org/openstack/taskflow
98
+ * Bugs: https://bugs.launchpad.net/taskflow/
99
+ * Release notes: https://docs.openstack.org/releasenotes/taskflow/
100
+
101
+ Join us
102
+ -------
103
+
104
+ - https://launchpad.net/taskflow
105
+
106
+ Testing and requirements
107
+ ------------------------
108
+
109
+ Requirements
110
+ ~~~~~~~~~~~~
111
+
112
+ Because this project has many optional (pluggable) parts like persistence
113
+ backends and engines, we decided to split our requirements into two
114
+ parts: - things that are absolutely required (you can't use the project
115
+ without them) are put into ``requirements.txt``. The requirements
116
+ that are required by some optional part of this project (you can use the
117
+ project without them) are put into our ``test-requirements.txt`` file (so
118
+ that we can still test the optional functionality works as expected). If
119
+ you want to use the feature in question (`eventlet`_ or the worker based engine
120
+ that uses `kombu`_ or the `sqlalchemy`_ persistence backend or jobboards which
121
+ have an implementation built using `kazoo`_ ...), you should add
122
+ that requirement(s) to your project or environment.
123
+
124
+ Tox.ini
125
+ ~~~~~~~
126
+
127
+ Our ``tox.ini`` file describes several test environments that allow to test
128
+ TaskFlow with different python versions and sets of requirements installed.
129
+ Please refer to the `tox`_ documentation to understand how to make these test
130
+ environments work for you.
131
+
132
+ Developer documentation
133
+ -----------------------
134
+
135
+ We also have sphinx documentation in ``docs/source``.
136
+
137
+ *To build it, run:*
138
+
139
+ ::
140
+
141
+ $ python setup.py build_sphinx
142
+
143
+ .. _kazoo: https://kazoo.readthedocs.io/en/latest/
144
+ .. _sqlalchemy: https://www.sqlalchemy.org/
145
+ .. _kombu: https://kombu.readthedocs.io/en/latest/
146
+ .. _eventlet: http://eventlet.net/
147
+ .. _tox: https://tox.testrun.org/
148
+
@@ -0,0 +1,10 @@
1
+ ---
2
+ deprecations:
3
+ - |
4
+ Eventlet usages are deprecated and the removal of Eventlet from
5
+ OpenStack `is planned <https://governance.openstack.org/tc//goals/proposed/remove-eventlet.html>`_,
6
+ for this reason the eventlet_utils module is now deprecated.
7
+ The support of Eventlet will be soon removed from taskflow.
8
+
9
+ Please start considering removing your internal Eventlet usages and
10
+ start migrating your stack.
@@ -3,4 +3,4 @@
3
3
  ===========================
4
4
 
5
5
  .. release-notes::
6
- :branch: stable/2023.1
6
+ :branch: unmaintained/2023.1
@@ -7,6 +7,9 @@ pbr>=2.0.0 # Apache-2.0
7
7
 
8
8
  # Packages needed for using this library.
9
9
 
10
+ # For deprecation warning
11
+ debtcollector>=1.2.0 # Apache-2.0
12
+
10
13
  # For async and/or periodic work
11
14
  futurist>=1.2.0 # Apache-2.0
12
15
 
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  set -eux
3
3
  if [ -z "$(which etcd)" ]; then
4
- ETCD_VERSION=3.3.27
4
+ ETCD_VERSION=3.4.27
5
5
  case `uname -s` in
6
6
  Darwin)
7
7
  OS=darwin
@@ -56,7 +56,6 @@ taskflow.engines =
56
56
  [extras]
57
57
  zookeeper =
58
58
  kazoo>=2.6.0 # Apache-2.0
59
- zake>=0.1.6 # Apache-2.0
60
59
  redis =
61
60
  redis>=4.0.0 # MIT
62
61
  etcd =
@@ -71,14 +70,6 @@ database =
71
70
  SQLAlchemy-Utils>=0.30.11 # BSD License
72
71
  PyMySQL>=0.7.6 # MIT License
73
72
  psycopg2>=2.8.0 # LGPL/ZPL
74
- test =
75
- pydotplus>=2.0.2 # MIT License
76
- hacking<0.11,>=0.10.0
77
- oslotest>=3.2.0 # Apache-2.0
78
- mock>=2.0.0 # BSD
79
- testtools>=2.2.0 # MIT
80
- testscenarios>=0.4 # Apache-2.0/BSD
81
- stestr>=2.0.0 # Apache-2.0
82
73
 
83
74
  [egg_info]
84
75
  tag_build =
@@ -26,12 +26,14 @@ from taskflow.tests.unit.jobs import base
26
26
  from taskflow.tests import utils as test_utils
27
27
 
28
28
  ETCD_AVAILABLE = test_utils.etcd_available()
29
+ ETCD_PORT = test_utils.ETCD_PORT
29
30
 
30
31
 
31
32
  class EtcdJobBoardMixin:
32
33
  def create_board(self, conf=None, persistence=None):
33
34
  self.path = f"test-{uuidutils.generate_uuid()}"
34
35
  board_conf = {
36
+ "port": ETCD_PORT,
35
37
  "path": self.path,
36
38
  }
37
39
  if conf:
@@ -32,6 +32,7 @@ from taskflow.utils import redis_utils as ru
32
32
 
33
33
  REDIS_AVAILABLE = test_utils.redis_available(
34
34
  impl_redis.RedisJobBoard.MIN_REDIS_VERSION)
35
+ REDIS_PORT = test_utils.REDIS_PORT
35
36
 
36
37
 
37
38
  @testtools.skipIf(not REDIS_AVAILABLE, 'redis is not available')
@@ -41,7 +42,7 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
41
42
 
42
43
  def create_board(self, persistence=None):
43
44
  namespace = uuidutils.generate_uuid()
44
- client = ru.RedisClient()
45
+ client = ru.RedisClient(port=REDIS_PORT)
45
46
  config = {
46
47
  'namespace': ("taskflow-%s" % namespace).encode('latin-1'),
47
48
  }
@@ -17,8 +17,6 @@
17
17
  import pickle
18
18
  import sys
19
19
 
20
- from oslo_utils import encodeutils
21
-
22
20
  from taskflow import exceptions
23
21
  from taskflow import test
24
22
  from taskflow.tests import utils as test_utils
@@ -334,8 +332,7 @@ class NonAsciiExceptionsTestCase(test.TestCase):
334
332
  bad_string = chr(200)
335
333
  excp = ValueError(bad_string)
336
334
  fail = failure.Failure.from_exception(excp)
337
- self.assertEqual(encodeutils.exception_to_unicode(excp),
338
- fail.exception_str)
335
+ self.assertEqual(str(excp), fail.exception_str)
339
336
  expected = u'Failure: ValueError: \xc8'
340
337
  self.assertEqual(expected, str(fail))
341
338
 
@@ -350,7 +347,7 @@ class NonAsciiExceptionsTestCase(test.TestCase):
350
347
  def test_wrapped_failure_non_ascii_unicode(self):
351
348
  hi_cn = u'嗨'
352
349
  fail = ValueError(hi_cn)
353
- self.assertEqual(hi_cn, encodeutils.exception_to_unicode(fail))
350
+ self.assertEqual(hi_cn, str(fail))
354
351
  fail = failure.Failure.from_exception(fail)
355
352
  wrapped_fail = exceptions.WrappedFailure([fail])
356
353
  expected_result = (u"WrappedFailure: "
@@ -15,6 +15,7 @@
15
15
  # under the License.
16
16
 
17
17
  import contextlib
18
+ import os
18
19
  import string
19
20
  import threading
20
21
  import time
@@ -32,12 +33,12 @@ from taskflow.types import failure
32
33
  from taskflow.utils import kazoo_utils
33
34
  from taskflow.utils import redis_utils
34
35
 
35
- ARGS_KEY = '__args__'
36
- KWARGS_KEY = '__kwargs__'
37
- ORDER_KEY = '__order__'
36
+ ETCD_PORT = int(os.getenv("TASKFLOW_TEST_ETCD_PORT", 2379))
37
+ REDIS_PORT = int(os.getenv("TASKFLOW_TEST_REDIS_SENTINEL_PORT", 6379))
38
+ ZK_PORT = int(os.getenv("TASKFLOW_TEST_ZOOKEEPER_PORT", 2181))
38
39
  ZK_TEST_CONFIG = {
39
40
  'timeout': 1.0,
40
- 'hosts': ["localhost:2181"],
41
+ 'hosts': ["localhost:%d" % ZK_PORT],
41
42
  }
42
43
  # If latches/events take longer than this to become empty/set, something is
43
44
  # usually wrong and should be debugged instead of deadlocking...
@@ -78,7 +79,7 @@ def zookeeper_available(min_version, timeout=3):
78
79
 
79
80
 
80
81
  def redis_available(min_version):
81
- client = redis.Redis()
82
+ client = redis.Redis(port=REDIS_PORT)
82
83
  try:
83
84
  client.ping()
84
85
  except Exception:
@@ -90,7 +91,7 @@ def redis_available(min_version):
90
91
 
91
92
 
92
93
  def etcd_available():
93
- client = etcd3gw.Etcd3Client()
94
+ client = etcd3gw.Etcd3Client(port=ETCD_PORT)
94
95
  try:
95
96
  client.get("/")
96
97
  except Exception:
@@ -21,7 +21,6 @@ import os
21
21
  import sys
22
22
  import traceback
23
23
 
24
- from oslo_utils import encodeutils
25
24
  from oslo_utils import reflection
26
25
 
27
26
  from taskflow import exceptions as exc
@@ -29,9 +28,6 @@ from taskflow.utils import iter_utils
29
28
  from taskflow.utils import schema_utils as su
30
29
 
31
30
 
32
- _exception_message = encodeutils.exception_to_unicode
33
-
34
-
35
31
  def _copy_exc_info(exc_info):
36
32
  if exc_info is None:
37
33
  return None
@@ -57,7 +53,7 @@ def _are_equal_exc_info_tuples(ei1, ei2):
57
53
  # because we want the types to be exactly the same, not just have
58
54
  # one be inherited from the other.
59
55
  if not all((type(ei1[1]) == type(ei2[1]), # noqa: E721
60
- _exception_message(ei1[1]) == _exception_message(ei2[1]),
56
+ str(ei1[1]) == str(ei2[1]),
61
57
  repr(ei1[1]) == repr(ei2[1]))):
62
58
  return False
63
59
  if ei1[2] == ei2[2]:
@@ -195,7 +191,7 @@ class Failure():
195
191
  if not self._exc_type_names:
196
192
  raise TypeError("Invalid exception type '%s' (%s)"
197
193
  % (exc_info[0], type(exc_info[0])))
198
- self._exception_str = _exception_message(self._exc_info[1])
194
+ self._exception_str = str(self._exc_info[1])
199
195
  self._traceback_str = ''.join(
200
196
  traceback.format_tb(self._exc_info[2]))
201
197
  self._causes = kwargs.pop('causes', None)
@@ -14,6 +14,7 @@
14
14
  # License for the specific language governing permissions and limitations
15
15
  # under the License.
16
16
 
17
+ import debtcollector.removals
17
18
  from oslo_utils import importutils
18
19
 
19
20
  _eventlet = importutils.try_import('eventlet')
@@ -21,6 +22,7 @@ _eventlet = importutils.try_import('eventlet')
21
22
  EVENTLET_AVAILABLE = bool(_eventlet)
22
23
 
23
24
 
25
+ @debtcollector.removals.remove(message='Eventlet support is deprecated.')
24
26
  def check_for_eventlet(exc=None):
25
27
  """Check if eventlet is available and if not raise a runtime error.
26
28
 
@@ -29,6 +31,6 @@ def check_for_eventlet(exc=None):
29
31
  """
30
32
  if not EVENTLET_AVAILABLE:
31
33
  if exc is None:
32
- raise RuntimeError('Eventlet is not current available')
34
+ raise RuntimeError('Eventlet is not currently available')
33
35
  else:
34
36
  raise exc
@@ -0,0 +1,148 @@
1
+ Metadata-Version: 2.1
2
+ Name: taskflow
3
+ Version: 5.12.0
4
+ Summary: Taskflow structured state management library.
5
+ Home-page: https://docs.openstack.org/taskflow/latest/
6
+ Author: OpenStack
7
+ Author-email: openstack-discuss@lists.openstack.org
8
+ Keywords: reliable,tasks,execution,parallel,dataflow,workflows,distributed
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Environment :: OpenStack
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: Implementation :: CPython
23
+ Classifier: Topic :: Software Development :: Libraries
24
+ Classifier: Topic :: System :: Distributed Computing
25
+ Requires-Python: >=3.9
26
+ License-File: LICENSE
27
+ Requires-Dist: pbr>=2.0.0
28
+ Requires-Dist: debtcollector>=1.2.0
29
+ Requires-Dist: futurist>=1.2.0
30
+ Requires-Dist: fasteners>=0.17.3
31
+ Requires-Dist: networkx>=2.1.0
32
+ Requires-Dist: stevedore>=1.20.0
33
+ Requires-Dist: jsonschema>=3.2.0
34
+ Requires-Dist: automaton>=1.9.0
35
+ Requires-Dist: oslo.utils>=3.33.0
36
+ Requires-Dist: oslo.serialization>=2.18.0
37
+ Requires-Dist: tenacity>=6.0.0
38
+ Requires-Dist: cachetools>=2.0.0
39
+ Requires-Dist: pydot>=1.2.4
40
+ Provides-Extra: zookeeper
41
+ Requires-Dist: kazoo>=2.6.0; extra == "zookeeper"
42
+ Provides-Extra: redis
43
+ Requires-Dist: redis>=4.0.0; extra == "redis"
44
+ Provides-Extra: etcd
45
+ Requires-Dist: etcd3gw>=2.0.0; extra == "etcd"
46
+ Provides-Extra: workers
47
+ Requires-Dist: kombu>=4.3.0; extra == "workers"
48
+ Provides-Extra: eventlet
49
+ Requires-Dist: eventlet>=0.18.2; extra == "eventlet"
50
+ Provides-Extra: database
51
+ Requires-Dist: SQLAlchemy>=1.0.10; extra == "database"
52
+ Requires-Dist: alembic>=0.8.10; extra == "database"
53
+ Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "database"
54
+ Requires-Dist: PyMySQL>=0.7.6; extra == "database"
55
+ Requires-Dist: psycopg2>=2.8.0; extra == "database"
56
+ Provides-Extra: test
57
+ Requires-Dist: kazoo>=2.6.0; extra == "test"
58
+ Requires-Dist: redis>=4.0.0; extra == "test"
59
+ Requires-Dist: etcd3gw>=2.0.0; extra == "test"
60
+ Requires-Dist: kombu>=4.3.0; extra == "test"
61
+ Requires-Dist: eventlet>=0.18.2; extra == "test"
62
+ Requires-Dist: SQLAlchemy>=1.0.10; extra == "test"
63
+ Requires-Dist: alembic>=0.8.10; extra == "test"
64
+ Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "test"
65
+ Requires-Dist: PyMySQL>=0.7.6; extra == "test"
66
+ Requires-Dist: psycopg2>=2.8.0; extra == "test"
67
+ Requires-Dist: zake>=0.1.6; extra == "test"
68
+ Requires-Dist: pydotplus>=2.0.2; extra == "test"
69
+ Requires-Dist: oslotest>=3.2.0; extra == "test"
70
+ Requires-Dist: testtools>=2.2.0; extra == "test"
71
+ Requires-Dist: testscenarios>=0.4; extra == "test"
72
+ Requires-Dist: stestr>=2.0.0; extra == "test"
73
+ Requires-Dist: pifpaf>=0.10.0; extra == "test"
74
+
75
+ ========================
76
+ Team and repository tags
77
+ ========================
78
+
79
+ .. image:: https://governance.openstack.org/tc/badges/taskflow.svg
80
+ :target: https://governance.openstack.org/tc/reference/tags/index.html
81
+
82
+ .. Change things from this point on
83
+
84
+ TaskFlow
85
+ ========
86
+
87
+ .. image:: https://img.shields.io/pypi/v/taskflow.svg
88
+ :target: https://pypi.org/project/taskflow/
89
+ :alt: Latest Version
90
+
91
+ A library to do [jobs, tasks, flows] in a highly available, easy to understand
92
+ and declarative manner (and more!) to be used with OpenStack and other
93
+ projects.
94
+
95
+ * Free software: Apache license
96
+ * Documentation: https://docs.openstack.org/taskflow/latest/
97
+ * Source: https://opendev.org/openstack/taskflow
98
+ * Bugs: https://bugs.launchpad.net/taskflow/
99
+ * Release notes: https://docs.openstack.org/releasenotes/taskflow/
100
+
101
+ Join us
102
+ -------
103
+
104
+ - https://launchpad.net/taskflow
105
+
106
+ Testing and requirements
107
+ ------------------------
108
+
109
+ Requirements
110
+ ~~~~~~~~~~~~
111
+
112
+ Because this project has many optional (pluggable) parts like persistence
113
+ backends and engines, we decided to split our requirements into two
114
+ parts: - things that are absolutely required (you can't use the project
115
+ without them) are put into ``requirements.txt``. The requirements
116
+ that are required by some optional part of this project (you can use the
117
+ project without them) are put into our ``test-requirements.txt`` file (so
118
+ that we can still test the optional functionality works as expected). If
119
+ you want to use the feature in question (`eventlet`_ or the worker based engine
120
+ that uses `kombu`_ or the `sqlalchemy`_ persistence backend or jobboards which
121
+ have an implementation built using `kazoo`_ ...), you should add
122
+ that requirement(s) to your project or environment.
123
+
124
+ Tox.ini
125
+ ~~~~~~~
126
+
127
+ Our ``tox.ini`` file describes several test environments that allow to test
128
+ TaskFlow with different python versions and sets of requirements installed.
129
+ Please refer to the `tox`_ documentation to understand how to make these test
130
+ environments work for you.
131
+
132
+ Developer documentation
133
+ -----------------------
134
+
135
+ We also have sphinx documentation in ``docs/source``.
136
+
137
+ *To build it, run:*
138
+
139
+ ::
140
+
141
+ $ python setup.py build_sphinx
142
+
143
+ .. _kazoo: https://kazoo.readthedocs.io/en/latest/
144
+ .. _sqlalchemy: https://www.sqlalchemy.org/
145
+ .. _kombu: https://kombu.readthedocs.io/en/latest/
146
+ .. _eventlet: http://eventlet.net/
147
+ .. _tox: https://tox.testrun.org/
148
+
@@ -1,6 +1,7 @@
1
1
  .coveragerc
2
2
  .mailmap
3
3
  .pre-commit-config.yaml
4
+ .pylintrc
4
5
  .stestr.conf
5
6
  .zuul.yaml
6
7
  AUTHORS
@@ -9,7 +10,6 @@ ChangeLog
9
10
  LICENSE
10
11
  README.rst
11
12
  bindep.txt
12
- pylintrc
13
13
  requirements.txt
14
14
  run_tests.sh
15
15
  setup-etcd-env.sh
@@ -65,6 +65,7 @@ playbooks/tests/functional/pre.yml
65
65
  releasenotes/notes/.placeholder
66
66
  releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml
67
67
  releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml
68
+ releasenotes/notes/deprecate-eventlet-df4a34a7d56acc47.yaml
68
69
  releasenotes/notes/disable-process_executor-python-312-d1074c816bc8303e.yaml
69
70
  releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
70
71
  releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml
@@ -22,4 +22,3 @@ mysql = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
22
22
  postgresql = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
23
23
  sqlite = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
24
24
  zookeeper = taskflow.persistence.backends.impl_zookeeper:ZkBackend
25
-
@@ -0,0 +1 @@
1
+ {"git_version": "e41463b1", "is_release": true}