Fran Sanchez
07/02/2020, 9:57 PM@solid(output_defs=[OutputDefinition(name="num", dagster_type=int, is_required=False)])
def optional_input_output(_, num: Optional[int] = None):
if num:
yield Output(num, "num")
@solid
def takes_optional(_, num: Optional[int] = 333) -> int:
return num*2
@pipeline
def optional_pipeline():
takes_optional(optional_input_output())
If I don't provide any input to to optional_input_output
then takes_optional
is always skipped, regardless of the input marked as Optional and having a default value... how can I achieve this then?alex
07/02/2020, 10:01 PMOptional
just means it accepts None
or the type, in this case int
Fran Sanchez
07/02/2020, 10:06 PMis_required
in the OutputDefinition
is different to the behaviour of declaring it Optional
with the typing system...alex
07/02/2020, 10:36 PMAlso, it seems that the behaviour of using is_required in the OutputDefinition is different to the behaviour of declaring it Optional with the typing systemYa it used to be worse - the flag used to be called
is_optional
- we renamed it to is_required
to try to help with this confusion.MultiDependency
sFran Sanchez
07/02/2020, 10:40 PMalex
07/02/2020, 10:41 PMFran Sanchez
07/02/2020, 10:47 PMDependencyDefinition
by MultiDependencyDefinition
when building my PipelineDefinition
dependencies argument, right?MultiDependencyDefinition
one, but I guess it should be the same?@solid(output_defs=[OutputDefinition(name="num", dagster_type=int, is_required=False)])
def optional_input_output(_, num: Optional[int] = None):
if num:
yield Output(num, "num")
@solid(input_defs=[InputDefinition("nums", List[int])])
def takes_optional(_, nums) -> int:
return sum(nums)
@pipeline
def optional_pipeline():
takes_optional(
[
optional_input_output.alias("does_not_return_anything")(),
optional_input_output.alias("returns_something")()
]
)
alex
07/06/2020, 2:56 PM