예제 #1
0
 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'))
예제 #2
0
  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)
예제 #3
0
  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)