Skip to content

Commit 5dae5a7

Browse files
authored
support FlyteRemote.execute with no inputs (#3266)
Signed-off-by: Niels Bantilan <niels.bantilan@gmail.com>
1 parent 3c6b61d commit 5dae5a7

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

flytekit/remote/remote.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,7 @@ def register_launch_plan(
15061506
def _execute(
15071507
self,
15081508
entity: typing.Union[FlyteTask, FlyteWorkflow, FlyteLaunchPlan],
1509-
inputs: typing.Dict[str, typing.Any],
1509+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
15101510
project: str = None,
15111511
domain: str = None,
15121512
execution_name: typing.Optional[str] = None,
@@ -1541,6 +1541,9 @@ def _execute(
15411541
:param execution_cluster_label: Specify label of cluster(s) on which newly created execution should be placed.
15421542
:returns: :class:`~flytekit.remote.workflow_execution.FlyteWorkflowExecution`
15431543
"""
1544+
if inputs is None:
1545+
inputs = {}
1546+
15441547
if execution_name is not None and execution_name_prefix is not None:
15451548
raise ValueError("Only one of execution_name and execution_name_prefix can be set, but got both set")
15461549
# todo: The prefix should be passed to the backend
@@ -1675,7 +1678,7 @@ def execute(
16751678
entity: typing.Union[
16761679
FlyteTask, FlyteLaunchPlan, FlyteWorkflow, PythonTask, WorkflowBase, LaunchPlan, ReferenceEntity
16771680
],
1678-
inputs: typing.Dict[str, typing.Any],
1681+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
16791682
project: str = None,
16801683
domain: str = None,
16811684
name: str = None,
@@ -1898,7 +1901,7 @@ def execute(
18981901
def execute_remote_task_lp(
18991902
self,
19001903
entity: typing.Union[FlyteTask, FlyteLaunchPlan],
1901-
inputs: typing.Dict[str, typing.Any],
1904+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
19021905
project: str = None,
19031906
domain: str = None,
19041907
execution_name: typing.Optional[str] = None,
@@ -1938,7 +1941,7 @@ def execute_remote_task_lp(
19381941
def execute_remote_wf(
19391942
self,
19401943
entity: FlyteWorkflow,
1941-
inputs: typing.Dict[str, typing.Any],
1944+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
19421945
project: str = None,
19431946
domain: str = None,
19441947
execution_name: typing.Optional[str] = None,
@@ -1981,7 +1984,7 @@ def execute_remote_wf(
19811984
def execute_reference_task(
19821985
self,
19831986
entity: ReferenceTask,
1984-
inputs: typing.Dict[str, typing.Any],
1987+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
19851988
execution_name: typing.Optional[str] = None,
19861989
execution_name_prefix: typing.Optional[str] = None,
19871990
options: typing.Optional[Options] = None,
@@ -2030,7 +2033,7 @@ def execute_reference_task(
20302033
def execute_reference_workflow(
20312034
self,
20322035
entity: ReferenceWorkflow,
2033-
inputs: typing.Dict[str, typing.Any],
2036+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
20342037
execution_name: typing.Optional[str] = None,
20352038
execution_name_prefix: typing.Optional[str] = None,
20362039
options: typing.Optional[Options] = None,
@@ -2093,7 +2096,7 @@ def execute_reference_workflow(
20932096
def execute_reference_launch_plan(
20942097
self,
20952098
entity: ReferenceLaunchPlan,
2096-
inputs: typing.Dict[str, typing.Any],
2099+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
20972100
execution_name: typing.Optional[str] = None,
20982101
execution_name_prefix: typing.Optional[str] = None,
20992102
options: typing.Optional[Options] = None,
@@ -2145,7 +2148,7 @@ def execute_reference_launch_plan(
21452148
def execute_local_task(
21462149
self,
21472150
entity: PythonTask,
2148-
inputs: typing.Dict[str, typing.Any],
2151+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
21492152
project: str = None,
21502153
domain: str = None,
21512154
name: str = None,
@@ -2227,7 +2230,7 @@ def execute_local_task(
22272230
def execute_local_workflow(
22282231
self,
22292232
entity: WorkflowBase,
2230-
inputs: typing.Dict[str, typing.Any],
2233+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
22312234
project: str = None,
22322235
domain: str = None,
22332236
name: str = None,
@@ -2337,7 +2340,8 @@ def execute_local_workflow(
23372340
def execute_local_launch_plan(
23382341
self,
23392342
entity: LaunchPlan,
2340-
inputs: typing.Dict[str, typing.Any],
2343+
inputs: typing.Optional[typing.Dict[str, typing.Any]] = None,
2344+
*,
23412345
version: str,
23422346
project: typing.Optional[str] = None,
23432347
domain: typing.Optional[str] = None,

tests/flytekit/unit/remote/test_remote.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from flytekit.models.core.identifier import Identifier, ResourceType, WorkflowExecutionIdentifier
3434
from flytekit.models.execution import Execution
3535
from flytekit.models.task import Task
36-
from flytekit.remote import FlyteTask, FlyteWorkflow
36+
from flytekit.remote import FlyteTask, FlyteWorkflow, FlyteWorkflowExecution
3737
from flytekit.remote.lazy_entity import LazyEntity
3838
from flytekit.remote.remote import FlyteRemote, _get_git_repo_url, _get_pickled_target_dict
3939
from flytekit.tools.translator import Options, get_serializable, get_serializable_launch_plan
@@ -209,7 +209,7 @@ def local_assertions(*args, **kwargs):
209209
)
210210

211211

212-
def test_execute_with_wrong_input_key(remote, mock_wf_exec):
212+
def test_execute_with_wrong_input_key(remote: FlyteRemote, mock_wf_exec):
213213
# mock_url.get.return_value = "localhost"
214214
# mock_insecure.get.return_value = True
215215
mock_wf_exec.return_value = True
@@ -228,6 +228,16 @@ def test_execute_with_wrong_input_key(remote, mock_wf_exec):
228228
)
229229

230230

231+
def test_execute_with_no_inputs(remote: FlyteRemote, mock_wf_exec):
232+
mock_wf_exec.return_value = True
233+
mock_client = MagicMock()
234+
remote._client = mock_client
235+
236+
mock_entity = MagicMock()
237+
out = remote._execute(mock_entity, project="proj", domain="dev")
238+
assert isinstance(out, FlyteWorkflowExecution)
239+
240+
231241
def test_form_config():
232242
remote = FlyteRemote(config=Config.auto(), default_project="p1", default_domain="d1")
233243
assert remote.default_project == "p1"

0 commit comments

Comments
 (0)