taskflow 5.11.0__py3-none-any.whl → 6.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- taskflow/atom.py +3 -5
- taskflow/conductors/backends/__init__.py +0 -2
- taskflow/conductors/backends/impl_blocking.py +1 -3
- taskflow/conductors/backends/impl_executor.py +3 -6
- taskflow/conductors/backends/impl_nonblocking.py +1 -3
- taskflow/conductors/base.py +1 -3
- taskflow/deciders.py +0 -2
- taskflow/engines/__init__.py +0 -2
- taskflow/engines/action_engine/actions/base.py +1 -3
- taskflow/engines/action_engine/actions/retry.py +1 -3
- taskflow/engines/action_engine/actions/task.py +1 -3
- taskflow/engines/action_engine/builder.py +2 -4
- taskflow/engines/action_engine/compiler.py +9 -11
- taskflow/engines/action_engine/completer.py +5 -7
- taskflow/engines/action_engine/deciders.py +1 -3
- taskflow/engines/action_engine/engine.py +4 -26
- taskflow/engines/action_engine/executor.py +2 -4
- taskflow/engines/action_engine/runtime.py +1 -3
- taskflow/engines/action_engine/scheduler.py +3 -5
- taskflow/engines/action_engine/scopes.py +3 -5
- taskflow/engines/action_engine/selector.py +1 -3
- taskflow/engines/action_engine/traversal.py +0 -2
- taskflow/engines/base.py +1 -3
- taskflow/engines/helpers.py +0 -2
- taskflow/engines/worker_based/dispatcher.py +2 -4
- taskflow/engines/worker_based/endpoint.py +1 -3
- taskflow/engines/worker_based/engine.py +1 -4
- taskflow/engines/worker_based/executor.py +0 -2
- taskflow/engines/worker_based/protocol.py +1 -3
- taskflow/engines/worker_based/proxy.py +2 -4
- taskflow/engines/worker_based/server.py +3 -5
- taskflow/engines/worker_based/types.py +6 -7
- taskflow/engines/worker_based/worker.py +4 -6
- taskflow/examples/99_bottles.py +0 -2
- taskflow/examples/alphabet_soup.py +0 -2
- taskflow/examples/build_a_car.py +1 -3
- taskflow/examples/buildsystem.py +1 -3
- taskflow/examples/calculate_in_parallel.py +1 -3
- taskflow/examples/calculate_linear.py +3 -5
- taskflow/examples/create_parallel_volume.py +2 -5
- taskflow/examples/delayed_return.py +1 -3
- taskflow/examples/distance_calculator.py +12 -24
- taskflow/examples/dump_memory_backend.py +1 -3
- taskflow/examples/echo_listener.py +0 -2
- taskflow/examples/example_utils.py +1 -3
- taskflow/examples/fake_billing.py +9 -11
- taskflow/examples/graph_flow.py +2 -4
- taskflow/examples/hello_world.py +2 -4
- taskflow/examples/jobboard_produce_consume_colors.py +3 -5
- taskflow/examples/parallel_table_multiply.py +1 -3
- taskflow/examples/persistence_example.py +1 -3
- taskflow/examples/pseudo_scoping.py +2 -4
- taskflow/examples/resume_from_backend.py +1 -3
- taskflow/examples/resume_many_flows/my_flows.py +0 -2
- taskflow/examples/resume_many_flows/resume_all.py +1 -3
- taskflow/examples/resume_many_flows/run_flow.py +2 -4
- taskflow/examples/resume_many_flows.py +0 -2
- taskflow/examples/resume_vm_boot.py +12 -15
- taskflow/examples/resume_volume_create.py +3 -5
- taskflow/examples/retry_flow.py +0 -2
- taskflow/examples/reverting_linear.py +1 -3
- taskflow/examples/run_by_iter.py +0 -2
- taskflow/examples/run_by_iter_enumerate.py +1 -3
- taskflow/examples/share_engine_thread.py +2 -4
- taskflow/examples/simple_linear.py +0 -2
- taskflow/examples/simple_linear_listening.py +1 -3
- taskflow/examples/simple_linear_pass.py +0 -2
- taskflow/examples/simple_map_reduce.py +0 -2
- taskflow/examples/switch_graph_flow.py +1 -3
- taskflow/examples/timing_listener.py +1 -3
- taskflow/examples/tox_conductor.py +3 -5
- taskflow/examples/wbe_event_sender.py +0 -2
- taskflow/examples/wbe_mandelbrot.py +0 -2
- taskflow/examples/wbe_simple_linear.py +0 -2
- taskflow/examples/wrapped_exception.py +0 -2
- taskflow/exceptions.py +7 -9
- taskflow/flow.py +1 -3
- taskflow/formatters.py +22 -8
- taskflow/jobs/backends/__init__.py +0 -2
- taskflow/jobs/backends/impl_redis.py +22 -18
- taskflow/jobs/backends/impl_zookeeper.py +7 -8
- taskflow/jobs/base.py +5 -7
- taskflow/listeners/base.py +1 -3
- taskflow/listeners/capturing.py +1 -3
- taskflow/listeners/claims.py +1 -3
- taskflow/listeners/logging.py +10 -6
- taskflow/listeners/printing.py +1 -3
- taskflow/listeners/timing.py +10 -13
- taskflow/logging.py +0 -2
- taskflow/patterns/graph_flow.py +2 -4
- taskflow/patterns/linear_flow.py +4 -9
- taskflow/patterns/unordered_flow.py +4 -9
- taskflow/persistence/backends/__init__.py +1 -3
- taskflow/persistence/backends/impl_dir.py +3 -6
- taskflow/persistence/backends/impl_memory.py +6 -9
- taskflow/persistence/backends/impl_sqlalchemy.py +4 -6
- taskflow/persistence/backends/impl_zookeeper.py +2 -4
- taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/00af93df9d77_add_unique_into_all_indexes.py +80 -0
- taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -2
- taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -2
- taskflow/persistence/backends/sqlalchemy/tables.py +0 -2
- taskflow/persistence/base.py +2 -4
- taskflow/persistence/models.py +19 -24
- taskflow/persistence/path_based.py +1 -3
- taskflow/retry.py +12 -18
- taskflow/states.py +0 -2
- taskflow/storage.py +9 -11
- taskflow/task.py +15 -18
- taskflow/test.py +5 -5
- taskflow/tests/test_examples.py +0 -2
- taskflow/tests/unit/action_engine/test_builder.py +1 -3
- taskflow/tests/unit/action_engine/test_compile.py +4 -6
- taskflow/tests/unit/action_engine/test_creation.py +0 -21
- taskflow/tests/unit/action_engine/test_scoping.py +1 -3
- taskflow/tests/unit/jobs/base.py +1 -3
- taskflow/tests/unit/jobs/test_entrypoint.py +0 -2
- taskflow/tests/unit/jobs/test_redis_job.py +1 -3
- taskflow/tests/unit/jobs/test_zk_job.py +2 -4
- taskflow/tests/unit/patterns/test_graph_flow.py +18 -20
- taskflow/tests/unit/patterns/test_linear_flow.py +7 -9
- taskflow/tests/unit/patterns/test_unordered_flow.py +12 -14
- taskflow/tests/unit/persistence/base.py +2 -4
- taskflow/tests/unit/persistence/test_dir_persistence.py +2 -4
- taskflow/tests/unit/persistence/test_memory_persistence.py +2 -4
- taskflow/tests/unit/persistence/test_sql_persistence.py +4 -6
- taskflow/tests/unit/persistence/test_zk_persistence.py +2 -4
- taskflow/tests/unit/test_arguments_passing.py +3 -25
- taskflow/tests/unit/test_check_transition.py +3 -5
- taskflow/tests/unit/test_conductors.py +0 -2
- taskflow/tests/unit/test_deciders.py +1 -3
- taskflow/tests/unit/test_engine_helpers.py +0 -2
- taskflow/tests/unit/test_engines.py +19 -102
- taskflow/tests/unit/test_exceptions.py +4 -6
- taskflow/tests/unit/test_failure.py +10 -12
- taskflow/tests/unit/test_flow_dependencies.py +62 -64
- taskflow/tests/unit/test_formatters.py +0 -2
- taskflow/tests/unit/test_functor_task.py +1 -3
- taskflow/tests/unit/test_listeners.py +9 -11
- taskflow/tests/unit/test_mapfunctor_task.py +1 -3
- taskflow/tests/unit/test_notifier.py +1 -3
- taskflow/tests/unit/test_progress.py +2 -4
- taskflow/tests/unit/test_reducefunctor_task.py +1 -3
- taskflow/tests/unit/test_retries.py +1 -25
- taskflow/tests/unit/test_states.py +0 -2
- taskflow/tests/unit/test_storage.py +10 -12
- taskflow/tests/unit/test_suspend.py +2 -23
- taskflow/tests/unit/test_task.py +17 -19
- taskflow/tests/unit/test_types.py +4 -6
- taskflow/tests/unit/test_utils.py +9 -11
- taskflow/tests/unit/test_utils_async_utils.py +0 -2
- taskflow/tests/unit/test_utils_binary.py +12 -14
- taskflow/tests/unit/test_utils_iter_utils.py +1 -3
- taskflow/tests/unit/test_utils_kazoo_utils.py +0 -2
- taskflow/tests/unit/test_utils_threading_utils.py +1 -3
- taskflow/tests/unit/worker_based/test_creation.py +0 -2
- taskflow/tests/unit/worker_based/test_dispatcher.py +0 -2
- taskflow/tests/unit/worker_based/test_endpoint.py +2 -4
- taskflow/tests/unit/worker_based/test_executor.py +1 -3
- taskflow/tests/unit/worker_based/test_message_pump.py +0 -2
- taskflow/tests/unit/worker_based/test_pipeline.py +0 -2
- taskflow/tests/unit/worker_based/test_protocol.py +2 -4
- taskflow/tests/unit/worker_based/test_proxy.py +2 -4
- taskflow/tests/unit/worker_based/test_server.py +3 -5
- taskflow/tests/unit/worker_based/test_types.py +0 -2
- taskflow/tests/unit/worker_based/test_worker.py +1 -3
- taskflow/tests/utils.py +11 -15
- taskflow/types/entity.py +1 -3
- taskflow/types/failure.py +3 -6
- taskflow/types/graph.py +14 -18
- taskflow/types/latch.py +1 -3
- taskflow/types/notifier.py +6 -9
- taskflow/types/sets.py +2 -5
- taskflow/types/timing.py +1 -3
- taskflow/types/tree.py +6 -10
- taskflow/utils/async_utils.py +0 -2
- taskflow/utils/banner.py +8 -9
- taskflow/utils/eventlet_utils.py +2 -2
- taskflow/utils/iter_utils.py +0 -2
- taskflow/utils/kazoo_utils.py +7 -9
- taskflow/utils/kombu_utils.py +5 -7
- taskflow/utils/misc.py +4 -6
- taskflow/utils/persistence_utils.py +0 -2
- taskflow/utils/redis_utils.py +2 -4
- taskflow/utils/schema_utils.py +0 -2
- taskflow/utils/threading_utils.py +1 -3
- taskflow/version.py +1 -3
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/AUTHORS +1 -0
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/METADATA +2 -1
- taskflow-6.0.0.dist-info/RECORD +243 -0
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/WHEEL +1 -1
- taskflow-6.0.0.dist-info/pbr.json +1 -0
- taskflow/engines/action_engine/process_executor.py +0 -720
- taskflow/tests/unit/action_engine/test_process_executor.py +0 -106
- taskflow-5.11.0.dist-info/RECORD +0 -244
- taskflow-5.11.0.dist-info/pbr.json +0 -1
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/LICENSE +0 -0
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/entry_points.txt +0 -0
- {taskflow-5.11.0.dist-info → taskflow-6.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -32,28 +30,28 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
32
30
|
|
|
33
31
|
def test_task_requires_default_values(self):
|
|
34
32
|
flow = utils.TaskMultiArg()
|
|
35
|
-
self.assertEqual(
|
|
33
|
+
self.assertEqual({'x', 'y', 'z'}, flow.requires)
|
|
36
34
|
self.assertEqual(set(), flow.provides, )
|
|
37
35
|
|
|
38
36
|
def test_task_requires_rebinded_mapped(self):
|
|
39
37
|
flow = utils.TaskMultiArg(rebind={'x': 'a', 'y': 'b', 'z': 'c'})
|
|
40
|
-
self.assertEqual(
|
|
38
|
+
self.assertEqual({'a', 'b', 'c'}, flow.requires)
|
|
41
39
|
self.assertEqual(set(), flow.provides)
|
|
42
40
|
|
|
43
41
|
def test_task_requires_additional_values(self):
|
|
44
42
|
flow = utils.TaskMultiArg(requires=['a', 'b'])
|
|
45
|
-
self.assertEqual(
|
|
43
|
+
self.assertEqual({'a', 'b', 'x', 'y', 'z'}, flow.requires)
|
|
46
44
|
self.assertEqual(set(), flow.provides)
|
|
47
45
|
|
|
48
46
|
def test_task_provides_values(self):
|
|
49
47
|
flow = utils.TaskMultiReturn(provides=['a', 'b', 'c'])
|
|
50
48
|
self.assertEqual(set(), flow.requires)
|
|
51
|
-
self.assertEqual(
|
|
49
|
+
self.assertEqual({'a', 'b', 'c'}, flow.provides)
|
|
52
50
|
|
|
53
51
|
def test_task_provides_and_requires_values(self):
|
|
54
52
|
flow = utils.TaskMultiArgMultiReturn(provides=['a', 'b', 'c'])
|
|
55
|
-
self.assertEqual(
|
|
56
|
-
self.assertEqual(
|
|
53
|
+
self.assertEqual({'x', 'y', 'z'}, flow.requires)
|
|
54
|
+
self.assertEqual({'a', 'b', 'c'}, flow.provides)
|
|
57
55
|
|
|
58
56
|
def test_linear_flow_without_dependencies(self):
|
|
59
57
|
flow = lf.Flow('lf').add(
|
|
@@ -66,14 +64,14 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
66
64
|
flow = lf.Flow('lf').add(
|
|
67
65
|
utils.TaskOneArg('task1'),
|
|
68
66
|
utils.TaskMultiArg('task2'))
|
|
69
|
-
self.assertEqual(
|
|
67
|
+
self.assertEqual({'x', 'y', 'z'}, flow.requires)
|
|
70
68
|
self.assertEqual(set(), flow.provides)
|
|
71
69
|
|
|
72
70
|
def test_linear_flow_requires_rebind_values(self):
|
|
73
71
|
flow = lf.Flow('lf').add(
|
|
74
72
|
utils.TaskOneArg('task1', rebind=['q']),
|
|
75
73
|
utils.TaskMultiArg('task2'))
|
|
76
|
-
self.assertEqual(
|
|
74
|
+
self.assertEqual({'x', 'y', 'z', 'q'}, flow.requires)
|
|
77
75
|
self.assertEqual(set(), flow.provides)
|
|
78
76
|
|
|
79
77
|
def test_linear_flow_provides_values(self):
|
|
@@ -81,14 +79,14 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
81
79
|
utils.TaskOneReturn('task1', provides='x'),
|
|
82
80
|
utils.TaskMultiReturn('task2', provides=['a', 'b', 'c']))
|
|
83
81
|
self.assertEqual(set(), flow.requires)
|
|
84
|
-
self.assertEqual(
|
|
82
|
+
self.assertEqual({'x', 'a', 'b', 'c'}, flow.provides)
|
|
85
83
|
|
|
86
84
|
def test_linear_flow_provides_required_values(self):
|
|
87
85
|
flow = lf.Flow('lf').add(
|
|
88
86
|
utils.TaskOneReturn('task1', provides='x'),
|
|
89
87
|
utils.TaskOneArg('task2'))
|
|
90
88
|
self.assertEqual(set(), flow.requires)
|
|
91
|
-
self.assertEqual(
|
|
89
|
+
self.assertEqual({'x'}, flow.provides)
|
|
92
90
|
|
|
93
91
|
def test_linear_flow_multi_provides_and_requires_values(self):
|
|
94
92
|
flow = lf.Flow('lf').add(
|
|
@@ -97,8 +95,8 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
97
95
|
provides=['x', 'y', 'q']),
|
|
98
96
|
utils.TaskMultiArgMultiReturn('task2',
|
|
99
97
|
provides=['i', 'j', 'k']))
|
|
100
|
-
self.assertEqual(
|
|
101
|
-
self.assertEqual(
|
|
98
|
+
self.assertEqual({'a', 'b', 'c', 'z'}, flow.requires)
|
|
99
|
+
self.assertEqual({'x', 'y', 'q', 'i', 'j', 'k'}, flow.provides)
|
|
102
100
|
|
|
103
101
|
def test_unordered_flow_without_dependencies(self):
|
|
104
102
|
flow = uf.Flow('uf').add(
|
|
@@ -111,14 +109,14 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
111
109
|
flow = uf.Flow('uf').add(
|
|
112
110
|
utils.TaskOneArg('task1'),
|
|
113
111
|
utils.TaskMultiArg('task2'))
|
|
114
|
-
self.assertEqual(
|
|
112
|
+
self.assertEqual({'x', 'y', 'z'}, flow.requires)
|
|
115
113
|
self.assertEqual(set(), flow.provides)
|
|
116
114
|
|
|
117
115
|
def test_unordered_flow_requires_rebind_values(self):
|
|
118
116
|
flow = uf.Flow('uf').add(
|
|
119
117
|
utils.TaskOneArg('task1', rebind=['q']),
|
|
120
118
|
utils.TaskMultiArg('task2'))
|
|
121
|
-
self.assertEqual(
|
|
119
|
+
self.assertEqual({'x', 'y', 'z', 'q'}, flow.requires)
|
|
122
120
|
self.assertEqual(set(), flow.provides)
|
|
123
121
|
|
|
124
122
|
def test_unordered_flow_provides_values(self):
|
|
@@ -126,7 +124,7 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
126
124
|
utils.TaskOneReturn('task1', provides='x'),
|
|
127
125
|
utils.TaskMultiReturn('task2', provides=['a', 'b', 'c']))
|
|
128
126
|
self.assertEqual(set(), flow.requires)
|
|
129
|
-
self.assertEqual(
|
|
127
|
+
self.assertEqual({'x', 'a', 'b', 'c'}, flow.provides)
|
|
130
128
|
|
|
131
129
|
def test_unordered_flow_provides_required_values(self):
|
|
132
130
|
flow = uf.Flow('uf')
|
|
@@ -134,23 +132,23 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
134
132
|
utils.TaskOneArg('task2'))
|
|
135
133
|
flow.add(utils.TaskOneReturn('task1', provides='x'),
|
|
136
134
|
utils.TaskOneArg('task2'))
|
|
137
|
-
self.assertEqual(
|
|
138
|
-
self.assertEqual(
|
|
135
|
+
self.assertEqual({'x'}, flow.provides)
|
|
136
|
+
self.assertEqual({'x'}, flow.requires)
|
|
139
137
|
|
|
140
138
|
def test_unordered_flow_requires_provided_value_other_call(self):
|
|
141
139
|
flow = uf.Flow('uf')
|
|
142
140
|
flow.add(utils.TaskOneReturn('task1', provides='x'))
|
|
143
141
|
flow.add(utils.TaskOneArg('task2'))
|
|
144
|
-
self.assertEqual(
|
|
145
|
-
self.assertEqual(
|
|
142
|
+
self.assertEqual({'x'}, flow.provides)
|
|
143
|
+
self.assertEqual({'x'}, flow.requires)
|
|
146
144
|
|
|
147
145
|
def test_unordered_flow_provides_required_value_other_call(self):
|
|
148
146
|
flow = uf.Flow('uf')
|
|
149
147
|
flow.add(utils.TaskOneArg('task2'))
|
|
150
148
|
flow.add(utils.TaskOneReturn('task1', provides='x'))
|
|
151
149
|
self.assertEqual(2, len(flow))
|
|
152
|
-
self.assertEqual(
|
|
153
|
-
self.assertEqual(
|
|
150
|
+
self.assertEqual({'x'}, flow.provides)
|
|
151
|
+
self.assertEqual({'x'}, flow.requires)
|
|
154
152
|
|
|
155
153
|
def test_unordered_flow_multi_provides_and_requires_values(self):
|
|
156
154
|
flow = uf.Flow('uf').add(
|
|
@@ -159,19 +157,19 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
159
157
|
provides=['d', 'e', 'f']),
|
|
160
158
|
utils.TaskMultiArgMultiReturn('task2',
|
|
161
159
|
provides=['i', 'j', 'k']))
|
|
162
|
-
self.assertEqual(
|
|
163
|
-
self.assertEqual(
|
|
160
|
+
self.assertEqual({'a', 'b', 'c', 'x', 'y', 'z'}, flow.requires)
|
|
161
|
+
self.assertEqual({'d', 'e', 'f', 'i', 'j', 'k'}, flow.provides)
|
|
164
162
|
|
|
165
163
|
def test_unordered_flow_provides_same_values(self):
|
|
166
164
|
flow = uf.Flow('uf').add(utils.TaskOneReturn(provides='x'))
|
|
167
165
|
flow.add(utils.TaskOneReturn(provides='x'))
|
|
168
|
-
self.assertEqual(
|
|
166
|
+
self.assertEqual({'x'}, flow.provides)
|
|
169
167
|
|
|
170
168
|
def test_unordered_flow_provides_same_values_one_add(self):
|
|
171
169
|
flow = uf.Flow('uf')
|
|
172
170
|
flow.add(utils.TaskOneReturn(provides='x'),
|
|
173
171
|
utils.TaskOneReturn(provides='x'))
|
|
174
|
-
self.assertEqual(
|
|
172
|
+
self.assertEqual({'x'}, flow.provides)
|
|
175
173
|
|
|
176
174
|
def test_nested_flows_requirements(self):
|
|
177
175
|
flow = uf.Flow('uf').add(
|
|
@@ -184,21 +182,21 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
184
182
|
rebind=['b'], provides=['z']),
|
|
185
183
|
utils.TaskOneArgOneReturn('task4', rebind=['c'],
|
|
186
184
|
provides=['q'])))
|
|
187
|
-
self.assertEqual(
|
|
188
|
-
self.assertEqual(
|
|
185
|
+
self.assertEqual({'a', 'b', 'c'}, flow.requires)
|
|
186
|
+
self.assertEqual({'x', 'y', 'z', 'q'}, flow.provides)
|
|
189
187
|
|
|
190
188
|
def test_graph_flow_requires_values(self):
|
|
191
189
|
flow = gf.Flow('gf').add(
|
|
192
190
|
utils.TaskOneArg('task1'),
|
|
193
191
|
utils.TaskMultiArg('task2'))
|
|
194
|
-
self.assertEqual(
|
|
192
|
+
self.assertEqual({'x', 'y', 'z'}, flow.requires)
|
|
195
193
|
self.assertEqual(set(), flow.provides)
|
|
196
194
|
|
|
197
195
|
def test_graph_flow_requires_rebind_values(self):
|
|
198
196
|
flow = gf.Flow('gf').add(
|
|
199
197
|
utils.TaskOneArg('task1', rebind=['q']),
|
|
200
198
|
utils.TaskMultiArg('task2'))
|
|
201
|
-
self.assertEqual(
|
|
199
|
+
self.assertEqual({'x', 'y', 'z', 'q'}, flow.requires)
|
|
202
200
|
self.assertEqual(set(), flow.provides)
|
|
203
201
|
|
|
204
202
|
def test_graph_flow_provides_values(self):
|
|
@@ -206,20 +204,20 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
206
204
|
utils.TaskOneReturn('task1', provides='x'),
|
|
207
205
|
utils.TaskMultiReturn('task2', provides=['a', 'b', 'c']))
|
|
208
206
|
self.assertEqual(set(), flow.requires)
|
|
209
|
-
self.assertEqual(
|
|
207
|
+
self.assertEqual({'x', 'a', 'b', 'c'}, flow.provides)
|
|
210
208
|
|
|
211
209
|
def test_graph_flow_provides_required_values(self):
|
|
212
210
|
flow = gf.Flow('gf').add(
|
|
213
211
|
utils.TaskOneReturn('task1', provides='x'),
|
|
214
212
|
utils.TaskOneArg('task2'))
|
|
215
213
|
self.assertEqual(set(), flow.requires)
|
|
216
|
-
self.assertEqual(
|
|
214
|
+
self.assertEqual({'x'}, flow.provides)
|
|
217
215
|
|
|
218
216
|
def test_graph_flow_provides_provided_value_other_call(self):
|
|
219
217
|
flow = gf.Flow('gf')
|
|
220
218
|
flow.add(utils.TaskOneReturn('task1', provides='x'))
|
|
221
219
|
flow.add(utils.TaskOneReturn('task2', provides='x'))
|
|
222
|
-
self.assertEqual(
|
|
220
|
+
self.assertEqual({'x'}, flow.provides)
|
|
223
221
|
|
|
224
222
|
def test_graph_flow_multi_provides_and_requires_values(self):
|
|
225
223
|
flow = gf.Flow('gf').add(
|
|
@@ -228,8 +226,8 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
228
226
|
provides=['d', 'e', 'f']),
|
|
229
227
|
utils.TaskMultiArgMultiReturn('task2',
|
|
230
228
|
provides=['i', 'j', 'k']))
|
|
231
|
-
self.assertEqual(
|
|
232
|
-
self.assertEqual(
|
|
229
|
+
self.assertEqual({'a', 'b', 'c', 'x', 'y', 'z'}, flow.requires)
|
|
230
|
+
self.assertEqual({'d', 'e', 'f', 'i', 'j', 'k'}, flow.provides)
|
|
233
231
|
|
|
234
232
|
def test_graph_cyclic_dependency(self):
|
|
235
233
|
flow = gf.Flow('g-3-cyclic')
|
|
@@ -255,27 +253,27 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
255
253
|
|
|
256
254
|
def test_retry_in_linear_flow_with_requirements(self):
|
|
257
255
|
flow = lf.Flow('lf', retry.AlwaysRevert('rt', requires=['x', 'y']))
|
|
258
|
-
self.assertEqual(
|
|
256
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
259
257
|
self.assertEqual(set(), flow.provides)
|
|
260
258
|
|
|
261
259
|
def test_retry_in_linear_flow_with_provides(self):
|
|
262
260
|
flow = lf.Flow('lf', retry.AlwaysRevert('rt', provides=['x', 'y']))
|
|
263
261
|
self.assertEqual(set(), flow.requires)
|
|
264
|
-
self.assertEqual(
|
|
262
|
+
self.assertEqual({'x', 'y'}, flow.provides)
|
|
265
263
|
|
|
266
264
|
def test_retry_in_linear_flow_requires_and_provides(self):
|
|
267
265
|
flow = lf.Flow('lf', retry.AlwaysRevert('rt',
|
|
268
266
|
requires=['x', 'y'],
|
|
269
267
|
provides=['a', 'b']))
|
|
270
|
-
self.assertEqual(
|
|
271
|
-
self.assertEqual(
|
|
268
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
269
|
+
self.assertEqual({'a', 'b'}, flow.provides)
|
|
272
270
|
|
|
273
271
|
def test_retry_requires_and_provides_same_value(self):
|
|
274
272
|
flow = lf.Flow('lf', retry.AlwaysRevert('rt',
|
|
275
273
|
requires=['x', 'y'],
|
|
276
274
|
provides=['x', 'y']))
|
|
277
|
-
self.assertEqual(
|
|
278
|
-
self.assertEqual(
|
|
275
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
276
|
+
self.assertEqual({'x', 'y'}, flow.provides)
|
|
279
277
|
|
|
280
278
|
def test_retry_in_unordered_flow_no_requirements_no_provides(self):
|
|
281
279
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt'))
|
|
@@ -284,20 +282,20 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
284
282
|
|
|
285
283
|
def test_retry_in_unordered_flow_with_requirements(self):
|
|
286
284
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt', requires=['x', 'y']))
|
|
287
|
-
self.assertEqual(
|
|
285
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
288
286
|
self.assertEqual(set(), flow.provides)
|
|
289
287
|
|
|
290
288
|
def test_retry_in_unordered_flow_with_provides(self):
|
|
291
289
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt', provides=['x', 'y']))
|
|
292
290
|
self.assertEqual(set(), flow.requires)
|
|
293
|
-
self.assertEqual(
|
|
291
|
+
self.assertEqual({'x', 'y'}, flow.provides)
|
|
294
292
|
|
|
295
293
|
def test_retry_in_unordered_flow_requires_and_provides(self):
|
|
296
294
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt',
|
|
297
295
|
requires=['x', 'y'],
|
|
298
296
|
provides=['a', 'b']))
|
|
299
|
-
self.assertEqual(
|
|
300
|
-
self.assertEqual(
|
|
297
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
298
|
+
self.assertEqual({'a', 'b'}, flow.provides)
|
|
301
299
|
|
|
302
300
|
def test_retry_in_graph_flow_no_requirements_no_provides(self):
|
|
303
301
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt'))
|
|
@@ -306,20 +304,20 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
306
304
|
|
|
307
305
|
def test_retry_in_graph_flow_with_requirements(self):
|
|
308
306
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt', requires=['x', 'y']))
|
|
309
|
-
self.assertEqual(
|
|
307
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
310
308
|
self.assertEqual(set(), flow.provides)
|
|
311
309
|
|
|
312
310
|
def test_retry_in_graph_flow_with_provides(self):
|
|
313
311
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt', provides=['x', 'y']))
|
|
314
312
|
self.assertEqual(set(), flow.requires)
|
|
315
|
-
self.assertEqual(
|
|
313
|
+
self.assertEqual({'x', 'y'}, flow.provides)
|
|
316
314
|
|
|
317
315
|
def test_retry_in_graph_flow_requires_and_provides(self):
|
|
318
316
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt',
|
|
319
317
|
requires=['x', 'y'],
|
|
320
318
|
provides=['a', 'b']))
|
|
321
|
-
self.assertEqual(
|
|
322
|
-
self.assertEqual(
|
|
319
|
+
self.assertEqual({'x', 'y'}, flow.requires)
|
|
320
|
+
self.assertEqual({'a', 'b'}, flow.provides)
|
|
323
321
|
|
|
324
322
|
def test_linear_flow_retry_and_task(self):
|
|
325
323
|
flow = lf.Flow('lf', retry.AlwaysRevert('rt',
|
|
@@ -328,8 +326,8 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
328
326
|
flow.add(utils.TaskMultiArgOneReturn(rebind=['a', 'x', 'c'],
|
|
329
327
|
provides=['z']))
|
|
330
328
|
|
|
331
|
-
self.assertEqual(
|
|
332
|
-
self.assertEqual(
|
|
329
|
+
self.assertEqual({'x', 'y', 'c'}, flow.requires)
|
|
330
|
+
self.assertEqual({'a', 'b', 'z'}, flow.provides)
|
|
333
331
|
|
|
334
332
|
def test_unordered_flow_retry_and_task(self):
|
|
335
333
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt',
|
|
@@ -338,25 +336,25 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
338
336
|
flow.add(utils.TaskMultiArgOneReturn(rebind=['a', 'x', 'c'],
|
|
339
337
|
provides=['z']))
|
|
340
338
|
|
|
341
|
-
self.assertEqual(
|
|
342
|
-
self.assertEqual(
|
|
339
|
+
self.assertEqual({'x', 'y', 'c'}, flow.requires)
|
|
340
|
+
self.assertEqual({'a', 'b', 'z'}, flow.provides)
|
|
343
341
|
|
|
344
342
|
def test_unordered_flow_retry_and_task_same_requires_provides(self):
|
|
345
343
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt', requires=['x']))
|
|
346
344
|
flow.add(utils.TaskOneReturn(provides=['x']))
|
|
347
|
-
self.assertEqual(
|
|
348
|
-
self.assertEqual(
|
|
345
|
+
self.assertEqual({'x'}, flow.requires)
|
|
346
|
+
self.assertEqual({'x'}, flow.provides)
|
|
349
347
|
|
|
350
348
|
def test_unordered_flow_retry_and_task_provide_same_value(self):
|
|
351
349
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt', provides=['x']))
|
|
352
350
|
flow.add(utils.TaskOneReturn('t1', provides=['x']))
|
|
353
|
-
self.assertEqual(
|
|
351
|
+
self.assertEqual({'x'}, flow.provides)
|
|
354
352
|
|
|
355
353
|
def test_unordered_flow_retry_two_tasks_provide_same_value(self):
|
|
356
354
|
flow = uf.Flow('uf', retry.AlwaysRevert('rt', provides=['y']))
|
|
357
355
|
flow.add(utils.TaskOneReturn('t1', provides=['x']),
|
|
358
356
|
utils.TaskOneReturn('t2', provides=['x']))
|
|
359
|
-
self.assertEqual(
|
|
357
|
+
self.assertEqual({'x', 'y'}, flow.provides)
|
|
360
358
|
|
|
361
359
|
def test_graph_flow_retry_and_task(self):
|
|
362
360
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt',
|
|
@@ -365,19 +363,19 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
365
363
|
flow.add(utils.TaskMultiArgOneReturn(rebind=['a', 'x', 'c'],
|
|
366
364
|
provides=['z']))
|
|
367
365
|
|
|
368
|
-
self.assertEqual(
|
|
369
|
-
self.assertEqual(
|
|
366
|
+
self.assertEqual({'x', 'y', 'c'}, flow.requires)
|
|
367
|
+
self.assertEqual({'a', 'b', 'z'}, flow.provides)
|
|
370
368
|
|
|
371
369
|
def test_graph_flow_retry_and_task_dependency_provide_require(self):
|
|
372
370
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt', requires=['x']))
|
|
373
371
|
flow.add(utils.TaskOneReturn(provides=['x']))
|
|
374
|
-
self.assertEqual(
|
|
375
|
-
self.assertEqual(
|
|
372
|
+
self.assertEqual({'x'}, flow.provides)
|
|
373
|
+
self.assertEqual({'x'}, flow.requires)
|
|
376
374
|
|
|
377
375
|
def test_graph_flow_retry_and_task_provide_same_value(self):
|
|
378
376
|
flow = gf.Flow('gf', retry.AlwaysRevert('rt', provides=['x']))
|
|
379
377
|
flow.add(utils.TaskOneReturn('t1', provides=['x']))
|
|
380
|
-
self.assertEqual(
|
|
378
|
+
self.assertEqual({'x'}, flow.provides)
|
|
381
379
|
|
|
382
380
|
def test_builtin_retry_args(self):
|
|
383
381
|
|
|
@@ -389,4 +387,4 @@ class FlowDependenciesTest(test.TestCase):
|
|
|
389
387
|
pass
|
|
390
388
|
|
|
391
389
|
flow = lf.Flow('lf', retry=FullArgsRetry(requires='a'))
|
|
392
|
-
self.assertEqual(
|
|
390
|
+
self.assertEqual({'a'}, flow.requires)
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2012-2013 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -24,7 +22,7 @@ def add(a, b):
|
|
|
24
22
|
return a + b
|
|
25
23
|
|
|
26
24
|
|
|
27
|
-
class BunchOfFunctions
|
|
25
|
+
class BunchOfFunctions:
|
|
28
26
|
|
|
29
27
|
def __init__(self, values):
|
|
30
28
|
self.values = values
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2014 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -52,7 +50,7 @@ _LOG_LEVELS = frozenset([
|
|
|
52
50
|
|
|
53
51
|
class SleepyTask(task.Task):
|
|
54
52
|
def __init__(self, name, sleep_for=0.0):
|
|
55
|
-
super(
|
|
53
|
+
super().__init__(name=name)
|
|
56
54
|
self._sleep_for = float(sleep_for)
|
|
57
55
|
|
|
58
56
|
def execute(self):
|
|
@@ -62,7 +60,7 @@ class SleepyTask(task.Task):
|
|
|
62
60
|
time.sleep(self._sleep_for)
|
|
63
61
|
|
|
64
62
|
|
|
65
|
-
class EngineMakerMixin
|
|
63
|
+
class EngineMakerMixin:
|
|
66
64
|
def _make_engine(self, flow, flow_detail=None, backend=None):
|
|
67
65
|
e = taskflow.engines.load(flow,
|
|
68
66
|
flow_detail=flow_detail,
|
|
@@ -80,7 +78,7 @@ class TestClaimListener(test.TestCase, EngineMakerMixin):
|
|
|
80
78
|
return f
|
|
81
79
|
|
|
82
80
|
def setUp(self):
|
|
83
|
-
super(
|
|
81
|
+
super().setUp()
|
|
84
82
|
self.client = fake_client.FakeClient()
|
|
85
83
|
self.addCleanup(self.client.stop)
|
|
86
84
|
self.board = jobs.fetch('test', 'zookeeper', client=self.client)
|
|
@@ -315,7 +313,7 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
315
313
|
with logging_listeners.LoggingListener(e, log=log):
|
|
316
314
|
e.run()
|
|
317
315
|
self.assertGreater(0, handler.counts[logging.DEBUG])
|
|
318
|
-
for levelno in _LOG_LEVELS -
|
|
316
|
+
for levelno in _LOG_LEVELS - {logging.DEBUG}:
|
|
319
317
|
self.assertEqual(0, handler.counts[levelno])
|
|
320
318
|
self.assertEqual([], handler.exc_infos)
|
|
321
319
|
|
|
@@ -329,7 +327,7 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
329
327
|
with listener:
|
|
330
328
|
e.run()
|
|
331
329
|
self.assertGreater(0, handler.counts[logging.INFO])
|
|
332
|
-
for levelno in _LOG_LEVELS -
|
|
330
|
+
for levelno in _LOG_LEVELS - {logging.INFO}:
|
|
333
331
|
self.assertEqual(0, handler.counts[levelno])
|
|
334
332
|
self.assertEqual([], handler.exc_infos)
|
|
335
333
|
|
|
@@ -341,7 +339,7 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
341
339
|
with logging_listeners.LoggingListener(e, log=log):
|
|
342
340
|
self.assertRaises(RuntimeError, e.run)
|
|
343
341
|
self.assertGreater(0, handler.counts[logging.DEBUG])
|
|
344
|
-
for levelno in _LOG_LEVELS -
|
|
342
|
+
for levelno in _LOG_LEVELS - {logging.DEBUG}:
|
|
345
343
|
self.assertEqual(0, handler.counts[levelno])
|
|
346
344
|
self.assertEqual(1, len(handler.exc_infos))
|
|
347
345
|
|
|
@@ -353,7 +351,7 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
353
351
|
with logging_listeners.DynamicLoggingListener(e, log=log):
|
|
354
352
|
e.run()
|
|
355
353
|
self.assertGreater(0, handler.counts[logging.DEBUG])
|
|
356
|
-
for levelno in _LOG_LEVELS -
|
|
354
|
+
for levelno in _LOG_LEVELS - {logging.DEBUG}:
|
|
357
355
|
self.assertEqual(0, handler.counts[levelno])
|
|
358
356
|
self.assertEqual([], handler.exc_infos)
|
|
359
357
|
|
|
@@ -367,7 +365,7 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
367
365
|
self.assertGreater(0, handler.counts[logging.WARNING])
|
|
368
366
|
self.assertGreater(0, handler.counts[logging.DEBUG])
|
|
369
367
|
self.assertEqual(1, len(handler.exc_infos))
|
|
370
|
-
for levelno in _LOG_LEVELS -
|
|
368
|
+
for levelno in _LOG_LEVELS - {logging.DEBUG, logging.WARNING}:
|
|
371
369
|
self.assertEqual(0, handler.counts[levelno])
|
|
372
370
|
|
|
373
371
|
def test_dynamic_failure_customized_level(self):
|
|
@@ -382,5 +380,5 @@ class TestLoggingListeners(test.TestCase, EngineMakerMixin):
|
|
|
382
380
|
self.assertGreater(0, handler.counts[logging.ERROR])
|
|
383
381
|
self.assertGreater(0, handler.counts[logging.DEBUG])
|
|
384
382
|
self.assertEqual(1, len(handler.exc_infos))
|
|
385
|
-
for levelno in _LOG_LEVELS -
|
|
383
|
+
for levelno in _LOG_LEVELS - {logging.DEBUG, logging.ERROR}:
|
|
386
384
|
self.assertEqual(0, handler.counts[levelno])
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -29,7 +27,7 @@ square = lambda x: x * x
|
|
|
29
27
|
class MapFunctorTaskTest(test.TestCase):
|
|
30
28
|
|
|
31
29
|
def setUp(self):
|
|
32
|
-
super(
|
|
30
|
+
super().setUp()
|
|
33
31
|
|
|
34
32
|
self.flow_store = {
|
|
35
33
|
'a': 1,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2013 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -57,7 +55,7 @@ class NotifierTest(test.TestCase):
|
|
|
57
55
|
def call_me(state, details):
|
|
58
56
|
pass
|
|
59
57
|
|
|
60
|
-
class A
|
|
58
|
+
class A:
|
|
61
59
|
def call_me_too(self, state, details):
|
|
62
60
|
pass
|
|
63
61
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -26,7 +24,7 @@ from taskflow.utils import persistence_utils as p_utils
|
|
|
26
24
|
|
|
27
25
|
class ProgressTask(task.Task):
|
|
28
26
|
def __init__(self, name, segments):
|
|
29
|
-
super(
|
|
27
|
+
super().__init__(name=name)
|
|
30
28
|
self._segments = segments
|
|
31
29
|
|
|
32
30
|
def execute(self):
|
|
@@ -57,7 +55,7 @@ class TestProgress(test.TestCase):
|
|
|
57
55
|
return e
|
|
58
56
|
|
|
59
57
|
def tearDown(self):
|
|
60
|
-
super(
|
|
58
|
+
super().tearDown()
|
|
61
59
|
with contextlib.closing(impl_memory.MemoryBackend({})) as be:
|
|
62
60
|
with contextlib.closing(be.get_connection()) as conn:
|
|
63
61
|
conn.clear_all()
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -29,7 +27,7 @@ multiply = lambda x, y: x * y
|
|
|
29
27
|
class ReduceFunctorTaskTest(test.TestCase):
|
|
30
28
|
|
|
31
29
|
def setUp(self):
|
|
32
|
-
super(
|
|
30
|
+
super().setUp()
|
|
33
31
|
|
|
34
32
|
self.flow_store = {
|
|
35
33
|
'a': 1,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
1
|
# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
@@ -30,11 +28,6 @@ from taskflow.tests import utils
|
|
|
30
28
|
from taskflow.types import failure
|
|
31
29
|
from taskflow.utils import eventlet_utils as eu
|
|
32
30
|
|
|
33
|
-
try:
|
|
34
|
-
from taskflow.engines.action_engine import process_executor as pe
|
|
35
|
-
except ImportError:
|
|
36
|
-
pe = None
|
|
37
|
-
|
|
38
31
|
|
|
39
32
|
class FailingRetry(retry.Retry):
|
|
40
33
|
|
|
@@ -740,7 +733,7 @@ class RetryTest(utils.EngineTestBase):
|
|
|
740
733
|
self.assertEqual(expected, capturer.values)
|
|
741
734
|
|
|
742
735
|
def test_for_each_with_set(self):
|
|
743
|
-
collection =
|
|
736
|
+
collection = {3, 2, 5}
|
|
744
737
|
retry1 = retry.ForEach(collection, 'r1', provides='x')
|
|
745
738
|
flow = lf.Flow('flow-1', retry1).add(utils.FailingTaskWithOneArg('t1'))
|
|
746
739
|
engine = self._make_engine(flow)
|
|
@@ -1368,20 +1361,3 @@ class ParallelEngineWithEventletTest(RetryTest, test.TestCase):
|
|
|
1368
1361
|
engine='parallel',
|
|
1369
1362
|
executor=executor,
|
|
1370
1363
|
defer_reverts=defer_reverts)
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
@testtools.skipIf(pe is None, 'process_executor is not available')
|
|
1374
|
-
class ParallelEngineWithProcessTest(RetryTest, test.TestCase):
|
|
1375
|
-
_EXECUTOR_WORKERS = 2
|
|
1376
|
-
|
|
1377
|
-
def _make_engine(self, flow, defer_reverts=None, flow_detail=None,
|
|
1378
|
-
executor=None):
|
|
1379
|
-
if executor is None:
|
|
1380
|
-
executor = 'processes'
|
|
1381
|
-
return taskflow.engines.load(flow,
|
|
1382
|
-
flow_detail=flow_detail,
|
|
1383
|
-
engine='parallel',
|
|
1384
|
-
backend=self.backend,
|
|
1385
|
-
executor=executor,
|
|
1386
|
-
max_workers=self._EXECUTOR_WORKERS,
|
|
1387
|
-
defer_reverts=defer_reverts)
|