def test_get_parameter_type_field_name(self): self.assertEqual('string_value', type_utils.get_parameter_type_field_name('String')) self.assertEqual('int_value', type_utils.get_parameter_type_field_name('Integer')) self.assertEqual('double_value', type_utils.get_parameter_type_field_name('Float'))
def _resolve_value_or_reference( self, value_or_reference: Union[str, dsl.PipelineParam]) -> str: """_resolve_value_or_reference resolves values and PipelineParams. The values and PipelineParams could be task parameters or input parameters. Args: value_or_reference: value or reference to be resolved. It could be basic python types or PipelineParam """ if isinstance(value_or_reference, dsl.PipelineParam): input_name = dsl_component_spec.additional_input_name_for_pipelineparam( value_or_reference) if type_utils.is_parameter_type(value_or_reference.param_type): return "inputs.parameters['{input_name}'].{value_field}".format( input_name=input_name, value_field=type_utils.get_parameter_type_field_name( value_or_reference.param_type)) else: raise NotImplementedError( 'Use artifact as dsl.Condition operand is not implemented yet.') else: if isinstance(value_or_reference, str): return "'{}'".format(value_or_reference) else: return str(value_or_reference)
def _resolve_condition_operands( self, operand1: Union[str, dsl.PipelineParam], operand2: Union[str, dsl.PipelineParam]) -> Tuple[str, str]: """Resolves values and PipelineParams for condition operands.""" # Pre-scan the operand to get the type of constant value if there's any. # The value_type can be used to backfill missing PipelineParam.param_type. value_type = None for value_or_reference in [operand1, operand2]: if isinstance(value_or_reference, dsl.PipelineParam): continue if isinstance(value_or_reference, float): value_type = 'Float' elif isinstance(value_or_reference, int): value_type = 'Integer' else: value_type = 'String' operand_values = [] for value_or_reference in [operand1, operand2]: if isinstance(value_or_reference, dsl.PipelineParam): input_name = dsl_component_spec.additional_input_name_for_pipelineparam( value_or_reference) # Condition operand is always parameters for now. value_or_reference.param_type = ( value_or_reference.param_type or value_type) operand_values.append( "inputs.parameters['{input_name}'].{value_field}".format( input_name=input_name, value_field=type_utils.get_parameter_type_field_name( value_or_reference.param_type))) else: if isinstance(value_or_reference, str): operand_values.append("'{}'".format(value_or_reference)) else: operand_values.append(str(value_or_reference)) return tuple(operand_values)