Skip to content

Commit 5b0d938

Browse files
committed
[feature] Add support for future objects in input dictionaries
1 parent f7de7f7 commit 5b0d938

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

executorlib/interactive/shared.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,8 @@ def get_result(arg: Union[list[Future], Future]) -> Any:
483483
return arg.result()
484484
elif isinstance(arg, list):
485485
return [get_result(arg=el) for el in arg]
486+
elif isinstance(arg, dict):
487+
return {k: get_result(arg=v) for k, v in arg.items()}
486488
else:
487489
return arg
488490

@@ -510,6 +512,8 @@ def find_future_in_list(lst):
510512
future_lst.append(el)
511513
elif isinstance(el, list):
512514
find_future_in_list(lst=el)
515+
elif isinstance(el, dict):
516+
find_future_in_list(lst=el.values())
513517

514518
find_future_in_list(lst=task_dict["args"])
515519
find_future_in_list(lst=task_dict["kwargs"].values())

tests/test_dependencies_executor.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def merge(lst):
3838
return sum(lst)
3939

4040

41+
def return_input_dict(input_dict):
42+
return input_dict
43+
44+
4145
def raise_error():
4246
raise RuntimeError
4347

@@ -130,6 +134,14 @@ def test_many_to_one(self):
130134
)
131135
self.assertEqual(future_sum.result(), 15)
132136

137+
def test_future_input_dict(self):
138+
with SingleNodeExecutor() as exe:
139+
fs = exe.submit(
140+
return_input_dict,
141+
input_dict={"a": exe.submit(sum, [2, 2])},
142+
)
143+
self.assertEqual(fs.result()["a"], 4)
144+
133145

134146
class TestExecutorErrors(unittest.TestCase):
135147
def test_block_allocation_false_one_worker(self):

0 commit comments

Comments
 (0)