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,
        )
 def testParseActionDeprecation(self):
   result = util.ParseAction({'deprecated': {'warn': 'warn'}}, 'foo')
   self.assertTrue(issubclass(result, argparse.Action))
 def testParseAction(self, action, output):
   self.assertEqual(util.ParseAction(action, 'foo'), output)