Giordano Bianchi
Giordano Bianchi

Reputation: 1

how to run an execution from a launchplan with flytesdk

I'm trying to use the flytesdk to run an execution from a launch plan. I was given an example of

lp = SdkLaunchPlan.fetch('project', 'domain', 'name',  'version')
ex = lp.execute('project', 'domain' inputs={'a': 1, 'b': 'hello'}, <name='optional idempotency string'>)

but it looks like SdkLaunchPlan.execute() is not implemented but SdkLaunchPlan.execute_with_literals() is.

I was able to execute it with this code:

#I omitted the version parameter because the launch plan is active    
lp = flytekit.common.launch_plan.SdkLaunchPlan.fetch(project="prj", domain="development", name="train.single.test_launch_plan")
literals = flytekit.clis.helpers.construct_literal_map_from_parameter_map(lp.default_inputs, {"depth": "False"})
lp.execute_with_literals("prj", "development", literal_inputs=literals)

is this the correct way of doing this or is there a better one?

Upvotes: 0

Views: 310

Answers (2)

Giordano Bianchi
Giordano Bianchi

Reputation: 1

My bad, it looks like my editor's (VSCode) autocomplete did not recognize the .execute() method...I tried it anyways and it's working as advertised

Upvotes: 0

kaylindris
kaylindris

Reputation: 88

Which version of flytekit are you on? Both should work. I think execute is a bit easier to use when you have an ipython terminal running. I was able to launch an execution on my cluster with the following commands.

(examples3) alice:~ [docker-desktop] $ ipython
Python 3.7.5 (default, Nov  1 2019, 02:16:32)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.7.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from flytekit.clis.flyte_cli.main import _detect_default_config_file
Using default config file at /Users/alice/.flyte/config

In [2]: from flytekit.common.launch_plan import SdkLaunchPlan

In [3]: lp = SdkLaunchPlan.fetch("flyteexamples", "development", "app.workflows.work.WorkflowWithIO", "8f49b8d8c04251865a7a8aba1b423293efc51374")

In [4]: lp.execute('flyteexamples', 'development', inputs={'a': 42, 'b': 'hello world'})

The code for execute_with_literals is here: https://github.com/lyft/flytekit/blob/5a0a8da9251bd13bd67b71e0b05b6e59ecb970f9/flytekit/common/launch_plan.py#L186

And the code for execute is here: https://github.com/lyft/flytekit/blob/5a0a8da9251bd13bd67b71e0b05b6e59ecb970f9/flytekit/common/mixins/executable.py#L8

The difference between the two is that one is meant to work with raw Python literals and the other is meant to work with Flyte literal types.

Upvotes: 0

Related Questions