def define_isolid_field(solid, handle, dependency_structure): check.inst_param(solid, 'solid', Solid) check.inst_param(handle, 'handle', SolidHandle) # All solids regardless of compositing status get the same inputs and outputs # config. The only thing the varies is on extra element of configuration # 1) Vanilla solid definition: a 'config' key with the config_schema as the value # 2) Composite with field mapping: a 'config' key with the config_schema of # the config mapping # 3) Composite without field mapping: a 'solids' key with recursively defined # solids dictionary if isinstance(solid.definition, SolidDefinition): return construct_leaf_solid_config( solid, handle, dependency_structure, solid.definition.config_schema ) composite_def = check.inst(solid.definition, CompositeSolidDefinition) if composite_def.has_config_mapping: return construct_leaf_solid_config( solid, handle, dependency_structure, composite_def.config_mapping.config_schema ) else: return filtered_system_dict( { 'inputs': get_inputs_field(solid, handle, dependency_structure), 'outputs': get_outputs_field(solid, handle), 'solids': Field( define_solid_dictionary_cls( composite_def.solids, composite_def.dependency_structure, handle, ) ), } )
def define_isolid_field(solid, handle, dependency_structure, resource_defs, ignored): check.inst_param(solid, "solid", Solid) check.inst_param(handle, "handle", SolidHandle) # All solids regardless of compositing status get the same inputs and outputs # config. The only thing the varies is on extra element of configuration # 1) Vanilla solid definition: a 'config' key with the config_schema as the value # 2) Composite with field mapping: a 'config' key with the config_schema of # the config mapping (via CompositeSolidDefinition#config_schema) # 3) Composite without field mapping: a 'solids' key with recursively defined # solids dictionary # 4) `configured` composite with field mapping: a 'config' key with the config_schema that was # provided when `configured` was called (via CompositeSolidDefinition#config_schema) if isinstance(solid.definition, SolidDefinition): return construct_leaf_solid_config( solid, handle, dependency_structure, solid.definition.config_schema, resource_defs, ignored, ) graph_def = check.inst(solid.definition, GraphDefinition) if graph_def.has_config_mapping: # has_config_mapping covers cases 2 & 4 from above (only config mapped composite solids can # be `configured`)... return construct_leaf_solid_config( solid, handle, dependency_structure, # ...and in both cases, the correct schema for 'config' key is exposed by this property: graph_def.config_schema, resource_defs, ignored, ) # This case omits a 'solids' key, thus if a composite solid is `configured` or has a field # mapping, the user cannot stub any config, inputs, or outputs for inner (child) solids. else: return solid_config_field( { "inputs": get_inputs_field(solid, handle, dependency_structure, resource_defs), "outputs": get_outputs_field(solid, handle, resource_defs), "solids": Field( define_solid_dictionary_cls( solids=graph_def.solids, ignored_solids=None, dependency_structure=graph_def.dependency_structure, parent_handle=handle, resource_defs=resource_defs, ) ), }, ignored=ignored, )