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,
                    )
                ),
            }
        )
Exemple #2
0
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,
        )