taskflow 5.5.0__tar.gz → 5.6.1__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.
- taskflow-5.6.1/.zuul.yaml +30 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/ChangeLog +15 -0
- taskflow-5.6.1/PKG-INFO +136 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/bindep.txt +4 -0
- taskflow-5.6.1/playbooks/tests/functional/Debian.yaml +5 -0
- taskflow-5.6.1/playbooks/tests/functional/RedHat.yaml +5 -0
- taskflow-5.6.1/playbooks/tests/functional/pre.yml +21 -0
- taskflow-5.6.1/releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml +7 -0
- taskflow-5.6.1/releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml +6 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/runtime.py +12 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/jobs/backends/impl_redis.py +1 -5
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/jobs/test_redis_job.py +5 -8
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_retries.py +52 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/utils.py +26 -0
- taskflow-5.6.1/taskflow.egg-info/PKG-INFO +136 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/SOURCES.txt +5 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/entry_points.txt +0 -1
- taskflow-5.6.1/taskflow.egg-info/pbr.json +1 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/test-requirements.txt +1 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tox.ini +8 -1
- taskflow-5.5.0/.zuul.yaml +0 -33
- taskflow-5.5.0/PKG-INFO +0 -108
- taskflow-5.5.0/taskflow.egg-info/PKG-INFO +0 -108
- taskflow-5.5.0/taskflow.egg-info/pbr.json +0 -1
- {taskflow-5.5.0 → taskflow-5.6.1}/.coveragerc +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/.mailmap +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/.pre-commit-config.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/.stestr.conf +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/AUTHORS +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/CONTRIBUTING.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/LICENSE +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/README.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/diagrams/area_of_influence.graffle.tgz +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/diagrams/core.graffle.tgz +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/diagrams/jobboard.graffle.tgz +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/diagrams/tasks.graffle.tgz +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/diagrams/worker-engine.graffle.tgz +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/requirements.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/conf.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/index.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/templates/layout.html +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/arguments_and_results.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/atoms.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/conductors.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/engines.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/examples.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/exceptions.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/history.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/area_of_influence.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/conductor.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/conductor_cycle.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/distributed_flow_rpc.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/engine_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/flow_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/job_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/jobboard.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/mandelbrot.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/retry_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/task_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/tasks.png +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/wbe_request_states.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/img/worker-engine.svg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/index.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/inputs_and_outputs.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/jobs.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/notifications.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/patterns.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/persistence.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/resumption.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/shelf.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/states.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/types.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/utils.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/doc/source/user/workers.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/pylintrc +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/.placeholder +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/redis-username-df0eb33869db09a2.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/2023.1.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/2023.2.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/_static/.placeholder +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/_templates/.placeholder +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/conf.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/index.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/ocata.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/pike.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/queens.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/rocky.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/stein.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/train.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/unreleased.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/ussuri.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/releasenotes/source/victoria.rst +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/requirements.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/run_tests.sh +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/setup.cfg +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/setup.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/atom.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/backends/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/backends/impl_blocking.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/backends/impl_executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/backends/impl_nonblocking.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/conductors/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/contrib/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/deciders.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/actions/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/actions/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/actions/retry.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/actions/task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/builder.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/compiler.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/completer.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/deciders.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/engine.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/process_executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/scheduler.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/scopes.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/selector.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/action_engine/traversal.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/helpers.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/dispatcher.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/endpoint.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/engine.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/protocol.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/proxy.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/server.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/types.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/engines/worker_based/worker.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/99_bottles.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/alphabet_soup.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/build_a_car.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/buildsystem.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/calculate_in_parallel.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/calculate_linear.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/create_parallel_volume.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/delayed_return.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/distance_calculator.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/dump_memory_backend.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/echo_listener.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/example_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/fake_billing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/graph_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/hello_world.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/jobboard_produce_consume_colors.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/parallel_table_multiply.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/persistence_example.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/pseudo_scoping.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/pseudo_scoping.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_from_backend.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_from_backend.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_many_flows/my_flows.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_many_flows/resume_all.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_many_flows/run_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_many_flows.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_many_flows.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_vm_boot.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/resume_volume_create.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/retry_flow.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/retry_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/reverting_linear.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/reverting_linear.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/run_by_iter.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/run_by_iter.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/run_by_iter_enumerate.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/run_by_iter_enumerate.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/share_engine_thread.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear_listening.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear_listening.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear_pass.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_linear_pass.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/simple_map_reduce.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/switch_graph_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/timing_listener.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/tox_conductor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wbe_event_sender.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wbe_mandelbrot.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wbe_mandelbrot.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wbe_simple_linear.out.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wbe_simple_linear.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/examples/wrapped_exception.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/exceptions.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/formatters.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/jobs/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/jobs/backends/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/jobs/backends/impl_zookeeper.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/jobs/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/capturing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/claims.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/logging.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/printing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/listeners/timing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/logging.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/patterns/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/patterns/graph_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/patterns/linear_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/patterns/unordered_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/impl_dir.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/impl_memory.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/impl_sqlalchemy.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/impl_zookeeper.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/README +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/0bc3e1a3c135_set_result_meduimtext_type.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/40fc8c914bd2_fix_atomdetails_failure_size.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/6df9422fcb43_fix_flowdetails_meta_size.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/README +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/migration.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/backends/sqlalchemy/tables.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/models.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/persistence/path_based.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/retry.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/states.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/storage.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/test.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/fixtures.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/test_examples.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/test_builder.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/test_compile.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/test_creation.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/test_process_executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/action_engine/test_scoping.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/jobs/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/jobs/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/jobs/test_entrypoint.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/jobs/test_zk_job.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/patterns/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/patterns/test_graph_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/patterns/test_linear_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/patterns/test_unordered_flow.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/base.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/test_dir_persistence.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/test_memory_persistence.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/test_sql_persistence.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/persistence/test_zk_persistence.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_arguments_passing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_check_transition.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_conductors.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_deciders.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_engine_helpers.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_engines.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_exceptions.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_failure.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_flow_dependencies.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_formatters.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_functor_task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_listeners.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_mapfunctor_task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_notifier.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_progress.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_reducefunctor_task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_states.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_storage.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_suspend.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_task.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_types.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils_async_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils_binary.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils_iter_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils_kazoo_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/test_utils_threading_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_creation.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_dispatcher.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_endpoint.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_executor.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_message_pump.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_pipeline.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_protocol.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_proxy.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_server.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_types.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/tests/unit/worker_based/test_worker.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/entity.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/failure.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/graph.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/latch.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/notifier.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/sets.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/timing.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/types/tree.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/__init__.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/async_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/banner.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/eventlet_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/iter_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/kazoo_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/kombu_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/misc.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/persistence_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/redis_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/schema_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/utils/threading_utils.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow/version.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/dependency_links.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/not-zip-safe +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/requires.txt +14 -14
- {taskflow-5.5.0 → taskflow-5.6.1}/taskflow.egg-info/top_level.txt +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/clear_zk.sh +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/env_builder.sh +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/pretty_tox.sh +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/schema_generator.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/speed_test.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/state_graph.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/subunit_trace.py +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/test-setup.sh +0 -0
- {taskflow-5.5.0 → taskflow-5.6.1}/tools/update_states.sh +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
- job:
|
|
2
|
+
name: taskflow-functional
|
|
3
|
+
parent: openstack-tox
|
|
4
|
+
abstract: true
|
|
5
|
+
pre-run: playbooks/tests/functional/pre.yml
|
|
6
|
+
vars:
|
|
7
|
+
tox_envlist: functional
|
|
8
|
+
|
|
9
|
+
- job:
|
|
10
|
+
name: taskflow-functional-redis
|
|
11
|
+
parent: taskflow-functional
|
|
12
|
+
vars:
|
|
13
|
+
tox_environment:
|
|
14
|
+
PIFPAF_DAEMON: redis
|
|
15
|
+
|
|
16
|
+
- project:
|
|
17
|
+
templates:
|
|
18
|
+
- check-requirements
|
|
19
|
+
- lib-forward-testing-python3
|
|
20
|
+
- openstack-cover-jobs
|
|
21
|
+
- openstack-python3-jobs
|
|
22
|
+
- periodic-stable-jobs
|
|
23
|
+
- publish-openstack-docs-pti
|
|
24
|
+
- release-notes-jobs-python3
|
|
25
|
+
check:
|
|
26
|
+
jobs:
|
|
27
|
+
- taskflow-functional-redis
|
|
28
|
+
gate:
|
|
29
|
+
jobs:
|
|
30
|
+
- taskflow-functional-redis
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
5.6.1
|
|
5
|
+
-----
|
|
6
|
+
|
|
7
|
+
* Fix REVERT\_ALL with Retries in unordered Flows
|
|
8
|
+
* Remove SQLAlchemy tips jobs
|
|
9
|
+
* Add functional job with redis enabled
|
|
10
|
+
* Fix broken unit tests for redis jobboard driver
|
|
11
|
+
|
|
12
|
+
5.6.0
|
|
13
|
+
-----
|
|
14
|
+
|
|
15
|
+
* Revert "Use consistent credential for Redis and Redis Sentinel"
|
|
16
|
+
* Update TOX\_CONSTRAINTS\_FILE for stable/2024.1
|
|
17
|
+
* Update .gitreview for stable/2024.1
|
|
18
|
+
|
|
4
19
|
5.5.0
|
|
5
20
|
-----
|
|
6
21
|
|
taskflow-5.6.1/PKG-INFO
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: taskflow
|
|
3
|
+
Version: 5.6.1
|
|
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.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
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.8
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: pbr!=2.1.0,>=2.0.0
|
|
28
|
+
Requires-Dist: futurist>=1.2.0
|
|
29
|
+
Requires-Dist: fasteners>=0.17.3
|
|
30
|
+
Requires-Dist: networkx>=2.1.0
|
|
31
|
+
Requires-Dist: stevedore>=1.20.0
|
|
32
|
+
Requires-Dist: jsonschema>=3.2.0
|
|
33
|
+
Requires-Dist: automaton>=1.9.0
|
|
34
|
+
Requires-Dist: oslo.utils>=3.33.0
|
|
35
|
+
Requires-Dist: oslo.serialization!=2.19.1,>=2.18.0
|
|
36
|
+
Requires-Dist: tenacity>=6.0.0
|
|
37
|
+
Requires-Dist: cachetools>=2.0.0
|
|
38
|
+
Requires-Dist: pydot>=1.2.4
|
|
39
|
+
Provides-Extra: zookeeper
|
|
40
|
+
Requires-Dist: kazoo>=2.6.0; extra == "zookeeper"
|
|
41
|
+
Requires-Dist: zake>=0.1.6; extra == "zookeeper"
|
|
42
|
+
Provides-Extra: redis
|
|
43
|
+
Requires-Dist: redis>=4.0.0; extra == "redis"
|
|
44
|
+
Provides-Extra: workers
|
|
45
|
+
Requires-Dist: kombu>=4.3.0; extra == "workers"
|
|
46
|
+
Provides-Extra: eventlet
|
|
47
|
+
Requires-Dist: eventlet!=0.18.3,!=0.20.1,!=0.21.0,>=0.18.2; extra == "eventlet"
|
|
48
|
+
Provides-Extra: database
|
|
49
|
+
Requires-Dist: SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10; extra == "database"
|
|
50
|
+
Requires-Dist: alembic>=0.8.10; extra == "database"
|
|
51
|
+
Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "database"
|
|
52
|
+
Requires-Dist: PyMySQL>=0.7.6; extra == "database"
|
|
53
|
+
Requires-Dist: psycopg2>=2.8.0; extra == "database"
|
|
54
|
+
Provides-Extra: test
|
|
55
|
+
Requires-Dist: pydotplus>=2.0.2; extra == "test"
|
|
56
|
+
Requires-Dist: hacking<0.11,>=0.10.0; extra == "test"
|
|
57
|
+
Requires-Dist: oslotest>=3.2.0; extra == "test"
|
|
58
|
+
Requires-Dist: mock>=2.0.0; extra == "test"
|
|
59
|
+
Requires-Dist: testtools>=2.2.0; extra == "test"
|
|
60
|
+
Requires-Dist: testscenarios>=0.4; extra == "test"
|
|
61
|
+
Requires-Dist: stestr>=2.0.0; extra == "test"
|
|
62
|
+
|
|
63
|
+
========================
|
|
64
|
+
Team and repository tags
|
|
65
|
+
========================
|
|
66
|
+
|
|
67
|
+
.. image:: https://governance.openstack.org/tc/badges/taskflow.svg
|
|
68
|
+
:target: https://governance.openstack.org/tc/reference/tags/index.html
|
|
69
|
+
|
|
70
|
+
.. Change things from this point on
|
|
71
|
+
|
|
72
|
+
TaskFlow
|
|
73
|
+
========
|
|
74
|
+
|
|
75
|
+
.. image:: https://img.shields.io/pypi/v/taskflow.svg
|
|
76
|
+
:target: https://pypi.org/project/taskflow/
|
|
77
|
+
:alt: Latest Version
|
|
78
|
+
|
|
79
|
+
A library to do [jobs, tasks, flows] in a highly available, easy to understand
|
|
80
|
+
and declarative manner (and more!) to be used with OpenStack and other
|
|
81
|
+
projects.
|
|
82
|
+
|
|
83
|
+
* Free software: Apache license
|
|
84
|
+
* Documentation: https://docs.openstack.org/taskflow/latest/
|
|
85
|
+
* Source: https://opendev.org/openstack/taskflow
|
|
86
|
+
* Bugs: https://bugs.launchpad.net/taskflow/
|
|
87
|
+
* Release notes: https://docs.openstack.org/releasenotes/taskflow/
|
|
88
|
+
|
|
89
|
+
Join us
|
|
90
|
+
-------
|
|
91
|
+
|
|
92
|
+
- https://launchpad.net/taskflow
|
|
93
|
+
|
|
94
|
+
Testing and requirements
|
|
95
|
+
------------------------
|
|
96
|
+
|
|
97
|
+
Requirements
|
|
98
|
+
~~~~~~~~~~~~
|
|
99
|
+
|
|
100
|
+
Because this project has many optional (pluggable) parts like persistence
|
|
101
|
+
backends and engines, we decided to split our requirements into two
|
|
102
|
+
parts: - things that are absolutely required (you can't use the project
|
|
103
|
+
without them) are put into ``requirements.txt``. The requirements
|
|
104
|
+
that are required by some optional part of this project (you can use the
|
|
105
|
+
project without them) are put into our ``test-requirements.txt`` file (so
|
|
106
|
+
that we can still test the optional functionality works as expected). If
|
|
107
|
+
you want to use the feature in question (`eventlet`_ or the worker based engine
|
|
108
|
+
that uses `kombu`_ or the `sqlalchemy`_ persistence backend or jobboards which
|
|
109
|
+
have an implementation built using `kazoo`_ ...), you should add
|
|
110
|
+
that requirement(s) to your project or environment.
|
|
111
|
+
|
|
112
|
+
Tox.ini
|
|
113
|
+
~~~~~~~
|
|
114
|
+
|
|
115
|
+
Our ``tox.ini`` file describes several test environments that allow to test
|
|
116
|
+
TaskFlow with different python versions and sets of requirements installed.
|
|
117
|
+
Please refer to the `tox`_ documentation to understand how to make these test
|
|
118
|
+
environments work for you.
|
|
119
|
+
|
|
120
|
+
Developer documentation
|
|
121
|
+
-----------------------
|
|
122
|
+
|
|
123
|
+
We also have sphinx documentation in ``docs/source``.
|
|
124
|
+
|
|
125
|
+
*To build it, run:*
|
|
126
|
+
|
|
127
|
+
::
|
|
128
|
+
|
|
129
|
+
$ python setup.py build_sphinx
|
|
130
|
+
|
|
131
|
+
.. _kazoo: https://kazoo.readthedocs.io/en/latest/
|
|
132
|
+
.. _sqlalchemy: https://www.sqlalchemy.org/
|
|
133
|
+
.. _kombu: https://kombu.readthedocs.io/en/latest/
|
|
134
|
+
.. _eventlet: http://eventlet.net/
|
|
135
|
+
.. _tox: https://tox.testrun.org/
|
|
136
|
+
|
|
@@ -15,3 +15,7 @@ mysql-server [platform:dpkg !platform:debian]
|
|
|
15
15
|
postgresql
|
|
16
16
|
postgresql-client [platform:dpkg]
|
|
17
17
|
libpq-dev [platform:dpkg]
|
|
18
|
+
|
|
19
|
+
redis [platform:rpm tests-functional-redis]
|
|
20
|
+
redis-server [platform:dpkg tests-functional-redis]
|
|
21
|
+
redis-sentinel [platform:dpkg tests-functional-redis]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
- hosts: all
|
|
2
|
+
vars:
|
|
3
|
+
taskflow_backend_daemon: "{{ tox_environment.PIFPAF_DAEMON }}"
|
|
4
|
+
roles:
|
|
5
|
+
- role: bindep
|
|
6
|
+
bindep_profile: "tests-functional-{{ taskflow_backend_daemon }}"
|
|
7
|
+
tasks:
|
|
8
|
+
- name: Include OS-specific variables
|
|
9
|
+
include_vars: "{{ ansible_os_family }}.yaml"
|
|
10
|
+
# NOTE(yoctozepto): Debian and Ubuntu have this nasty policy of starting
|
|
11
|
+
# installed services for us. We don't rely on system-wide service and use
|
|
12
|
+
# pifpaf. Unfortunately, default port may conflict with system-wide service.
|
|
13
|
+
# So, for sanity and resource conservation, let's stop it before tests run.
|
|
14
|
+
- name: "Stop backend services"
|
|
15
|
+
service:
|
|
16
|
+
name: "{{ item }}"
|
|
17
|
+
state: stopped
|
|
18
|
+
enabled: no
|
|
19
|
+
become: yes
|
|
20
|
+
loop: "{{ backend_services_map[taskflow_backend_daemon] }}"
|
|
21
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Redis job board driver no longer uses ``username`` and ``password`` for
|
|
5
|
+
its connections to Redis Sentinel, to restore the previous behavior which
|
|
6
|
+
was already used by some deployment tools. Add credential to
|
|
7
|
+
``sentinel_kwargs`` to enable authentication for Redis Sentinel.
|
|
@@ -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:
|
|
@@ -584,12 +584,8 @@ return cmsgpack.pack(result)
|
|
|
584
584
|
sentinels = [(client_conf.pop('host'), client_conf.pop('port'))]
|
|
585
585
|
for fallback in conf.get('sentinel_fallbacks', []):
|
|
586
586
|
sentinels.append(cls._parse_sentinel(fallback))
|
|
587
|
-
sentinel_kwargs = conf.get('sentinel_kwargs', {})
|
|
588
|
-
for key in ('username', 'password', 'socket_timeout'):
|
|
589
|
-
if key in conf:
|
|
590
|
-
sentinel_kwargs.setdefault(key, conf[key])
|
|
591
587
|
s = sentinel.Sentinel(sentinels,
|
|
592
|
-
sentinel_kwargs=sentinel_kwargs,
|
|
588
|
+
sentinel_kwargs=conf.get('sentinel_kwargs'),
|
|
593
589
|
**client_conf)
|
|
594
590
|
return s.master_for(conf['sentinel'])
|
|
595
591
|
else:
|
|
@@ -128,7 +128,7 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
|
|
|
128
128
|
'namespace': 'test',
|
|
129
129
|
'sentinel': 'mymaster',
|
|
130
130
|
'sentinel_kwargs': {
|
|
131
|
-
'username': '
|
|
131
|
+
'username': 'default',
|
|
132
132
|
'password': 'senitelsecret'
|
|
133
133
|
}}
|
|
134
134
|
with mock.patch('redis.sentinel.Sentinel') as mock_sentinel:
|
|
@@ -140,7 +140,7 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
|
|
|
140
140
|
mock_sentinel.assert_called_once_with(
|
|
141
141
|
[('127.0.0.1', 26379)],
|
|
142
142
|
sentinel_kwargs={
|
|
143
|
-
'username': '
|
|
143
|
+
'username': 'default',
|
|
144
144
|
'password': 'senitelsecret'
|
|
145
145
|
},
|
|
146
146
|
**test_conf)
|
|
@@ -161,14 +161,11 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
|
|
|
161
161
|
test_conf = {
|
|
162
162
|
'username': 'default',
|
|
163
163
|
'password': 'secret',
|
|
164
|
+
'sentinel_kwargs': None,
|
|
164
165
|
}
|
|
165
166
|
mock_sentinel.assert_called_once_with(
|
|
166
167
|
[('127.0.0.1', 26379), ('::1', 26379),
|
|
167
168
|
('127.0.0.2', 26379), ('localhost', 26379)],
|
|
168
|
-
sentinel_kwargs={
|
|
169
|
-
'username': 'default',
|
|
170
|
-
'password': 'secret'
|
|
171
|
-
},
|
|
172
169
|
**test_conf)
|
|
173
170
|
mock_sentinel().master_for.assert_called_once_with('mymaster')
|
|
174
171
|
|
|
@@ -179,6 +176,7 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
|
|
|
179
176
|
'password': 'secret',
|
|
180
177
|
'namespace': 'test',
|
|
181
178
|
'sentinel': 'mymaster',
|
|
179
|
+
'sentinel_kwargs': None,
|
|
182
180
|
'ssl': True,
|
|
183
181
|
'ssl_ca_certs': '/etc/ssl/certs'}
|
|
184
182
|
with mock.patch('redis.sentinel.Sentinel') as mock_sentinel:
|
|
@@ -191,7 +189,6 @@ class RedisJobboardTest(test.TestCase, base.BoardTestMixin):
|
|
|
191
189
|
}
|
|
192
190
|
mock_sentinel.assert_called_once_with(
|
|
193
191
|
[('127.0.0.1', 26379)],
|
|
194
|
-
sentinel_kwargs=
|
|
195
|
-
'username': 'default', 'password': 'secret'},
|
|
192
|
+
sentinel_kwargs=None,
|
|
196
193
|
**test_conf)
|
|
197
194
|
mock_sentinel().master_for.assert_called_once_with('mymaster')
|
|
@@ -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
|
|
@@ -497,6 +499,56 @@ class RetryTest(utils.EngineTestBase):
|
|
|
497
499
|
self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
|
|
498
500
|
self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
|
|
499
501
|
|
|
502
|
+
def test_restart_reverted_unordered_flows_with_retries(self):
|
|
503
|
+
now = time.time()
|
|
504
|
+
|
|
505
|
+
# First flow of an unordered flow:
|
|
506
|
+
subflow1 = lf.Flow('subflow1')
|
|
507
|
+
|
|
508
|
+
# * a task that completes in 3 sec with a few retries
|
|
509
|
+
subsubflow1 = lf.Flow('subflow1.subsubflow1',
|
|
510
|
+
retry=utils.RetryFiveTimes())
|
|
511
|
+
subsubflow1.add(utils.SuccessAfter3Sec('subflow1.fail1',
|
|
512
|
+
inject={'start_time': now}))
|
|
513
|
+
subflow1.add(subsubflow1)
|
|
514
|
+
|
|
515
|
+
# * a task that fails and triggers a revert after 5 retries
|
|
516
|
+
subsubflow2 = lf.Flow('subflow1.subsubflow2',
|
|
517
|
+
retry=utils.RetryFiveTimes())
|
|
518
|
+
subsubflow2.add(utils.FailingTask('subflow1.fail2'))
|
|
519
|
+
subflow1.add(subsubflow2)
|
|
520
|
+
|
|
521
|
+
# Second flow of the unordered flow:
|
|
522
|
+
subflow2 = lf.Flow('subflow2')
|
|
523
|
+
|
|
524
|
+
# * a task that always fails and retries
|
|
525
|
+
subsubflow1 = lf.Flow('subflow2.subsubflow1',
|
|
526
|
+
retry=utils.AlwaysRetry())
|
|
527
|
+
subsubflow1.add(utils.FailingTask('subflow2.fail1'))
|
|
528
|
+
subflow2.add(subsubflow1)
|
|
529
|
+
|
|
530
|
+
unordered_flow = uf.Flow('unordered_flow')
|
|
531
|
+
unordered_flow.add(subflow1, subflow2)
|
|
532
|
+
|
|
533
|
+
# Main flow, contains a simple task and an unordered flow
|
|
534
|
+
flow = lf.Flow('test')
|
|
535
|
+
flow.add(utils.NoopTask('task1'))
|
|
536
|
+
flow.add(unordered_flow)
|
|
537
|
+
|
|
538
|
+
engine = self._make_engine(flow)
|
|
539
|
+
|
|
540
|
+
# This test fails when using Green threads, skipping it for now
|
|
541
|
+
if isinstance(engine._task_executor,
|
|
542
|
+
executor.ParallelGreenThreadTaskExecutor):
|
|
543
|
+
self.skipTest("Skipping this test when using green threads.")
|
|
544
|
+
|
|
545
|
+
with utils.CaptureListener(engine) as capturer:
|
|
546
|
+
self.assertRaisesRegex(exc.WrappedFailure,
|
|
547
|
+
'.*RuntimeError: Woot!',
|
|
548
|
+
engine.run)
|
|
549
|
+
# task1 should have been reverted
|
|
550
|
+
self.assertIn('task1.t REVERTED(None)', capturer.values)
|
|
551
|
+
|
|
500
552
|
def test_run_just_retry(self):
|
|
501
553
|
flow = utils.OneReturnRetry(provides='x')
|
|
502
554
|
engine = self._make_engine(flow)
|
|
@@ -217,6 +217,32 @@ class FailingTask(ProgressingTask):
|
|
|
217
217
|
raise RuntimeError('Woot!')
|
|
218
218
|
|
|
219
219
|
|
|
220
|
+
class SimpleTask(task.Task):
|
|
221
|
+
def execute(self, time_sleep=0, **kwargs):
|
|
222
|
+
time.sleep(time_sleep)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class SuccessAfter3Sec(task.Task):
|
|
226
|
+
def execute(self, start_time, **kwargs):
|
|
227
|
+
now = time.time()
|
|
228
|
+
if now - start_time >= 3:
|
|
229
|
+
return None
|
|
230
|
+
raise RuntimeError('Woot!')
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class RetryFiveTimes(retry.Times):
|
|
234
|
+
def on_failure(self, history, *args, **kwargs):
|
|
235
|
+
if len(history) < 5:
|
|
236
|
+
time.sleep(1)
|
|
237
|
+
return retry.RETRY
|
|
238
|
+
return retry.REVERT_ALL
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class AlwaysRetry(retry.Times):
|
|
242
|
+
def on_failure(self, history, *args, **kwargs):
|
|
243
|
+
return retry.RETRY
|
|
244
|
+
|
|
245
|
+
|
|
220
246
|
class OptionalTask(task.Task):
|
|
221
247
|
def execute(self, a, b=5):
|
|
222
248
|
result = a * b
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: taskflow
|
|
3
|
+
Version: 5.6.1
|
|
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.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
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.8
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: pbr!=2.1.0,>=2.0.0
|
|
28
|
+
Requires-Dist: futurist>=1.2.0
|
|
29
|
+
Requires-Dist: fasteners>=0.17.3
|
|
30
|
+
Requires-Dist: networkx>=2.1.0
|
|
31
|
+
Requires-Dist: stevedore>=1.20.0
|
|
32
|
+
Requires-Dist: jsonschema>=3.2.0
|
|
33
|
+
Requires-Dist: automaton>=1.9.0
|
|
34
|
+
Requires-Dist: oslo.utils>=3.33.0
|
|
35
|
+
Requires-Dist: oslo.serialization!=2.19.1,>=2.18.0
|
|
36
|
+
Requires-Dist: tenacity>=6.0.0
|
|
37
|
+
Requires-Dist: cachetools>=2.0.0
|
|
38
|
+
Requires-Dist: pydot>=1.2.4
|
|
39
|
+
Provides-Extra: zookeeper
|
|
40
|
+
Requires-Dist: kazoo>=2.6.0; extra == "zookeeper"
|
|
41
|
+
Requires-Dist: zake>=0.1.6; extra == "zookeeper"
|
|
42
|
+
Provides-Extra: redis
|
|
43
|
+
Requires-Dist: redis>=4.0.0; extra == "redis"
|
|
44
|
+
Provides-Extra: workers
|
|
45
|
+
Requires-Dist: kombu>=4.3.0; extra == "workers"
|
|
46
|
+
Provides-Extra: eventlet
|
|
47
|
+
Requires-Dist: eventlet!=0.18.3,!=0.20.1,!=0.21.0,>=0.18.2; extra == "eventlet"
|
|
48
|
+
Provides-Extra: database
|
|
49
|
+
Requires-Dist: SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10; extra == "database"
|
|
50
|
+
Requires-Dist: alembic>=0.8.10; extra == "database"
|
|
51
|
+
Requires-Dist: SQLAlchemy-Utils>=0.30.11; extra == "database"
|
|
52
|
+
Requires-Dist: PyMySQL>=0.7.6; extra == "database"
|
|
53
|
+
Requires-Dist: psycopg2>=2.8.0; extra == "database"
|
|
54
|
+
Provides-Extra: test
|
|
55
|
+
Requires-Dist: pydotplus>=2.0.2; extra == "test"
|
|
56
|
+
Requires-Dist: hacking<0.11,>=0.10.0; extra == "test"
|
|
57
|
+
Requires-Dist: oslotest>=3.2.0; extra == "test"
|
|
58
|
+
Requires-Dist: mock>=2.0.0; extra == "test"
|
|
59
|
+
Requires-Dist: testtools>=2.2.0; extra == "test"
|
|
60
|
+
Requires-Dist: testscenarios>=0.4; extra == "test"
|
|
61
|
+
Requires-Dist: stestr>=2.0.0; extra == "test"
|
|
62
|
+
|
|
63
|
+
========================
|
|
64
|
+
Team and repository tags
|
|
65
|
+
========================
|
|
66
|
+
|
|
67
|
+
.. image:: https://governance.openstack.org/tc/badges/taskflow.svg
|
|
68
|
+
:target: https://governance.openstack.org/tc/reference/tags/index.html
|
|
69
|
+
|
|
70
|
+
.. Change things from this point on
|
|
71
|
+
|
|
72
|
+
TaskFlow
|
|
73
|
+
========
|
|
74
|
+
|
|
75
|
+
.. image:: https://img.shields.io/pypi/v/taskflow.svg
|
|
76
|
+
:target: https://pypi.org/project/taskflow/
|
|
77
|
+
:alt: Latest Version
|
|
78
|
+
|
|
79
|
+
A library to do [jobs, tasks, flows] in a highly available, easy to understand
|
|
80
|
+
and declarative manner (and more!) to be used with OpenStack and other
|
|
81
|
+
projects.
|
|
82
|
+
|
|
83
|
+
* Free software: Apache license
|
|
84
|
+
* Documentation: https://docs.openstack.org/taskflow/latest/
|
|
85
|
+
* Source: https://opendev.org/openstack/taskflow
|
|
86
|
+
* Bugs: https://bugs.launchpad.net/taskflow/
|
|
87
|
+
* Release notes: https://docs.openstack.org/releasenotes/taskflow/
|
|
88
|
+
|
|
89
|
+
Join us
|
|
90
|
+
-------
|
|
91
|
+
|
|
92
|
+
- https://launchpad.net/taskflow
|
|
93
|
+
|
|
94
|
+
Testing and requirements
|
|
95
|
+
------------------------
|
|
96
|
+
|
|
97
|
+
Requirements
|
|
98
|
+
~~~~~~~~~~~~
|
|
99
|
+
|
|
100
|
+
Because this project has many optional (pluggable) parts like persistence
|
|
101
|
+
backends and engines, we decided to split our requirements into two
|
|
102
|
+
parts: - things that are absolutely required (you can't use the project
|
|
103
|
+
without them) are put into ``requirements.txt``. The requirements
|
|
104
|
+
that are required by some optional part of this project (you can use the
|
|
105
|
+
project without them) are put into our ``test-requirements.txt`` file (so
|
|
106
|
+
that we can still test the optional functionality works as expected). If
|
|
107
|
+
you want to use the feature in question (`eventlet`_ or the worker based engine
|
|
108
|
+
that uses `kombu`_ or the `sqlalchemy`_ persistence backend or jobboards which
|
|
109
|
+
have an implementation built using `kazoo`_ ...), you should add
|
|
110
|
+
that requirement(s) to your project or environment.
|
|
111
|
+
|
|
112
|
+
Tox.ini
|
|
113
|
+
~~~~~~~
|
|
114
|
+
|
|
115
|
+
Our ``tox.ini`` file describes several test environments that allow to test
|
|
116
|
+
TaskFlow with different python versions and sets of requirements installed.
|
|
117
|
+
Please refer to the `tox`_ documentation to understand how to make these test
|
|
118
|
+
environments work for you.
|
|
119
|
+
|
|
120
|
+
Developer documentation
|
|
121
|
+
-----------------------
|
|
122
|
+
|
|
123
|
+
We also have sphinx documentation in ``docs/source``.
|
|
124
|
+
|
|
125
|
+
*To build it, run:*
|
|
126
|
+
|
|
127
|
+
::
|
|
128
|
+
|
|
129
|
+
$ python setup.py build_sphinx
|
|
130
|
+
|
|
131
|
+
.. _kazoo: https://kazoo.readthedocs.io/en/latest/
|
|
132
|
+
.. _sqlalchemy: https://www.sqlalchemy.org/
|
|
133
|
+
.. _kombu: https://kombu.readthedocs.io/en/latest/
|
|
134
|
+
.. _eventlet: http://eventlet.net/
|
|
135
|
+
.. _tox: https://tox.testrun.org/
|
|
136
|
+
|
|
@@ -58,11 +58,16 @@ doc/source/user/img/task_states.svg
|
|
|
58
58
|
doc/source/user/img/tasks.png
|
|
59
59
|
doc/source/user/img/wbe_request_states.svg
|
|
60
60
|
doc/source/user/img/worker-engine.svg
|
|
61
|
+
playbooks/tests/functional/Debian.yaml
|
|
62
|
+
playbooks/tests/functional/RedHat.yaml
|
|
63
|
+
playbooks/tests/functional/pre.yml
|
|
61
64
|
releasenotes/notes/.placeholder
|
|
62
65
|
releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml
|
|
66
|
+
releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml
|
|
63
67
|
releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
|
|
64
68
|
releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml
|
|
65
69
|
releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml
|
|
70
|
+
releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml
|
|
66
71
|
releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml
|
|
67
72
|
releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml
|
|
68
73
|
releasenotes/notes/redis-username-df0eb33869db09a2.yaml
|
|
@@ -21,4 +21,3 @@ mysql = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
|
|
|
21
21
|
postgresql = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
|
|
22
22
|
sqlite = taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend
|
|
23
23
|
zookeeper = taskflow.persistence.backends.impl_zookeeper:ZkBackend
|
|
24
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "24c88865", "is_release": true}
|
|
@@ -9,7 +9,7 @@ setenv =
|
|
|
9
9
|
# We need to install a bit more than just `test' because those drivers have
|
|
10
10
|
# custom tests that we always run
|
|
11
11
|
deps =
|
|
12
|
-
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/
|
|
12
|
+
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2024.1}
|
|
13
13
|
-r{toxinidir}/test-requirements.txt
|
|
14
14
|
-r{toxinidir}/requirements.txt
|
|
15
15
|
commands =
|
|
@@ -23,6 +23,13 @@ commands =
|
|
|
23
23
|
sphinx-build -E -W -b html doc/source doc/build/html
|
|
24
24
|
doc8 doc/source
|
|
25
25
|
|
|
26
|
+
[testenv:functional]
|
|
27
|
+
commands =
|
|
28
|
+
find . -type f -name "*.pyc" -delete
|
|
29
|
+
pifpaf -e TAKSFLOW_TEST run {env:PIFPAF_DAEMON} {env:PIFPAF_OPTS} -- stestr run
|
|
30
|
+
allowlist_externals =
|
|
31
|
+
find
|
|
32
|
+
|
|
26
33
|
[testenv:update-states]
|
|
27
34
|
deps =
|
|
28
35
|
{[testenv]deps}
|
taskflow-5.5.0/.zuul.yaml
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Temporary job until SQLAlchemy 2.0 is no longer blocked by upper-requirements
|
|
2
|
-
- job:
|
|
3
|
-
name: taskflow-tox-py310-with-sqlalchemy-2x
|
|
4
|
-
parent: openstack-tox-py310
|
|
5
|
-
description: |
|
|
6
|
-
Run unit tests with main branch of SQLAlchemy, alembic and oslo.db.
|
|
7
|
-
Takes advantage of the base tox job's install-siblings feature.
|
|
8
|
-
# The job only tests the latest and shouldn't be run on the stable branches
|
|
9
|
-
branches:
|
|
10
|
-
regex: ^stable/.*$
|
|
11
|
-
negate: true
|
|
12
|
-
required-projects:
|
|
13
|
-
- name: github.com/sqlalchemy/sqlalchemy
|
|
14
|
-
override-checkout: main
|
|
15
|
-
- name: github.com/sqlalchemy/alembic
|
|
16
|
-
override-checkout: main
|
|
17
|
-
- name: openstack/oslo.db
|
|
18
|
-
|
|
19
|
-
- project:
|
|
20
|
-
templates:
|
|
21
|
-
- check-requirements
|
|
22
|
-
- lib-forward-testing-python3
|
|
23
|
-
- openstack-cover-jobs
|
|
24
|
-
- openstack-python3-jobs
|
|
25
|
-
- periodic-stable-jobs
|
|
26
|
-
- publish-openstack-docs-pti
|
|
27
|
-
- release-notes-jobs-python3
|
|
28
|
-
check:
|
|
29
|
-
jobs:
|
|
30
|
-
- taskflow-tox-py310-with-sqlalchemy-2x
|
|
31
|
-
gate:
|
|
32
|
-
jobs:
|
|
33
|
-
- taskflow-tox-py310-with-sqlalchemy-2x
|