Ejemplo n.º 1
0
  def testConvertValueEnum(self):
    choices = [
        yaml_command_schema_util.Choice({'arg_value': 'a',
                                         'enum_value': 'thing-one'}),
        yaml_command_schema_util.Choice({'arg_value': 'c',
                                         'enum_value': 'thing-two'})]
    choices = yaml_command_schema_util.Choice.ToChoiceMap(choices)

    # Non-repeated.
    self.assertEqual(
        fm.FakeMessage.FakeEnum.THING_ONE,
        arg_utils.ConvertValue(fm.FakeMessage.enum1, 'a', choices=choices))
    self.assertEqual(
        fm.FakeMessage.FakeEnum.THING_TWO,
        arg_utils.ConvertValue(fm.FakeMessage.enum1, 'c', choices=choices))
    self.assertEqual(
        fm.FakeMessage.FakeEnum.THING_ONE,
        arg_utils.ConvertValue(fm.FakeMessage.enum1, 'thing-one',
                               choices=choices))
    self.assertEqual(
        fm.FakeMessage.FakeEnum.THING_TWO,
        arg_utils.ConvertValue(fm.FakeMessage.enum1, 'thing-two',
                               choices=choices))

    # Repeated.
    self.assertEqual(
        [fm.FakeMessage.FakeEnum.THING_ONE, fm.FakeMessage.FakeEnum.THING_TWO],
        arg_utils.ConvertValue(fm.FakeMessage.enum2, ['a', 'c'],
                               choices=choices))

    # Repeated field, but forced singular arg.
    self.assertEqual(
        [fm.FakeMessage.FakeEnum.THING_ONE],
        arg_utils.ConvertValue(
            fm.FakeMessage.enum2, 'a', repeated=False, choices=choices))
    self.assertEqual(
        [fm.FakeMessage.FakeEnum.THING_TWO],
        arg_utils.ConvertValue(
            fm.FakeMessage.enum2, 'c', repeated=False, choices=choices))
    self.assertEqual(
        [fm.FakeMessage.FakeEnum.THING_ONE],
        arg_utils.ConvertValue(
            fm.FakeMessage.enum2, 'thing-one', repeated=False, choices=choices))
    self.assertEqual(
        [fm.FakeMessage.FakeEnum.THING_TWO],
        arg_utils.ConvertValue(
            fm.FakeMessage.enum2, 'thing-two', repeated=False, choices=choices))
Ejemplo n.º 2
0
  def testGenerateFlagBasics(self):
    a = yaml_command_schema.Argument('asdf', 'foo', 'foo help')
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(arg.name, '--foo')
    self.assertEqual(self._MakeKwargs(), arg.kwargs)

    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a, category='ASDF')
    self.assertDictContainsSubset(self._MakeKwargs(category='ASDF'), arg.kwargs)

    a = yaml_command_schema.Argument('foo', 'foo', 'foo help', default='junk')
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(self._MakeKwargs(default='junk'), arg.kwargs)

    a = yaml_command_schema.Argument(
        'foo', 'foo', 'foo help',
        choices=[yaml_command_schema_util.Choice({'arg_value': 'a',
                                                  'enum_value': 'b'}),
                 yaml_command_schema_util.Choice({'arg_value': 'c',
                                                  'enum_value': 'd'})])
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(self._MakeKwargs(choices=['a', 'c']), arg.kwargs)

    a = yaml_command_schema.Argument('foo', 'foo', 'foo help', completer='junk')
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(self._MakeKwargs(completer='junk'), arg.kwargs)

    a = yaml_command_schema.Argument('foo', 'foo', 'foo help', hidden=True)
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(self._MakeKwargs(hidden=True), arg.kwargs)

    a = yaml_command_schema.Argument('foo', 'foo', 'foo help', required=True)
    arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a)
    self.assertEqual(self._MakeKwargs(required=True), arg.kwargs)

    # No api_field
    a = yaml_command_schema.Argument(None, 'foo', 'foo help', repeated=False)
    arg = arg_utils.GenerateFlag(None, a)
    self.assertEqual(arg.kwargs['type'], None)

    # Unknown type
    a = yaml_command_schema.Argument('foo', 'foo', 'foo help')
    with self.assertRaisesRegex(
        arg_utils.ArgumentGenerationError,
        r'Failed to generate argument for field \[message1\]: The field is of '
        r'an unknown type.'):
      arg_utils.GenerateFlag(fm.FakeMessage.message1, a)
    def FromData(cls, data):
        """Gets the arg definition from the spec data.

    Args:
      data: The spec data.

    Returns:
      Argument, the parsed argument.

    Raises:
      InvalidSchemaError: if the YAML command is malformed.
    """
        group = data.get('group')
        if group:
            return ArgumentGroup.FromData(group)

        api_field = data.get('api_field')
        disable_unused_arg_check = data.get('disable_unused_arg_check')
        arg_name = data.get('arg_name', api_field)
        if not arg_name:
            raise util.InvalidSchemaError(
                'An argument must have at least one of [api_field, arg_name].')
        is_positional = data.get('is_positional')
        flag_name = arg_name if is_positional else '--' + arg_name

        if data.get('default') and data.get('fallback'):
            raise util.InvalidSchemaError(
                'An argument may have at most one of [default, fallback].')

        try:
            help_text = data['help_text']
        except KeyError:
            raise util.InvalidSchemaError('An argument must have help_text.')

        choices = data.get('choices')

        return cls(
            api_field=api_field,
            arg_name=arg_name,
            help_text=help_text,
            metavar=data.get('metavar'),
            completer=util.Hook.FromData(data, 'completer'),
            is_positional=is_positional,
            type=util.ParseType(data.get('type')),
            choices=[util.Choice(d) for d in choices] if choices else None,
            default=data.get('default', arg_utils.UNSPECIFIED),
            fallback=util.Hook.FromData(data, 'fallback'),
            processor=util.Hook.FromData(data, 'processor'),
            required=data.get('required', False),
            hidden=data.get('hidden', False),
            action=util.ParseAction(data.get('action'), flag_name),
            repeated=data.get('repeated'),
            disable_unused_arg_check=disable_unused_arg_check,
        )
Ejemplo n.º 4
0
  def testConvertValueWithChoices(self):
    choices = [
        yaml_command_schema_util.Choice({'arg_value': 'a', 'enum_value': 'b'}),
        yaml_command_schema_util.Choice({'arg_value': 'c', 'enum_value': 'd'})]
    choices = yaml_command_schema_util.Choice.ToChoiceMap(choices)

    # Value not provided.
    self.assertEqual(
        None,
        arg_utils.ConvertValue(fm.FakeMessage.string1, None, choices=choices))

    # Non-repeated.
    self.assertEqual(
        'b',
        arg_utils.ConvertValue(fm.FakeMessage.string1, 'a', choices=choices))
    self.assertEqual(
        'd',
        arg_utils.ConvertValue(fm.FakeMessage.string1, 'c', choices=choices))
    # Make sure case insensitive works.
    self.assertEqual(
        'b',
        arg_utils.ConvertValue(fm.FakeMessage.string1, 'A', choices=choices))
    # Repeated.
    self.assertEqual(
        ['b', 'b', 'd', 'd'],
        arg_utils.ConvertValue(
            fm.FakeMessage.string2, ['a', 'b', 'c', 'd'], choices=choices))

    # Repeated field, but forced singular arg.
    self.assertEqual(
        ['b'],
        arg_utils.ConvertValue(
            fm.FakeMessage.string2, 'a', repeated=False, choices=choices))
    self.assertEqual(
        ['d'],
        arg_utils.ConvertValue(
            fm.FakeMessage.string2, 'c', repeated=False, choices=choices))
 def testChoice_DefaultEnumValue(self):
   data = {'arg_value': 'thing-one'}
   choice = util.Choice(data)
   self.assertEqual(choice.arg_value, 'thing-one')
   self.assertEqual(choice.enum_value, 'THING_ONE')
 def testChoices(self):
   data = {'arg_value': 'thing-one',
           'enum_value': fm.FakeMessage.FakeEnum.THING_ONE}
   choice = util.Choice(data)
   self.assertEqual(choice.arg_value, 'thing-one')
   self.assertEqual(choice.enum_value, fm.FakeMessage.FakeEnum.THING_ONE)