예제 #1
0
def ParseEnum(field, value):
  """Parse an enum value.

  The value can be specified by a number (the enum value), or by
  a string literal (the enum name).

  Args:
    field: Enum field descriptor.
    value: String value.

  Returns:
    Enum value number.

  Raises:
    ValueError: If the enum value could not be parsed.
  """
  enum_descriptor = field.enum_type
  try:
    number = int(value, 0)
  except ValueError:
    # Identifier.
    enum_value = enum_descriptor.values_by_name.get(bytes_to_string(value), None)
    if enum_value is None:
      raise ValueError(
          'Enum type "%s" has no value named %s.' % (
              enum_descriptor.full_name, bytes_to_string(value)))
  else:
    # Numeric value.
    enum_value = enum_descriptor.values_by_number.get(number, None)
    if enum_value is None:
      raise ValueError(
          'Enum type "%s" has no value with number %d.' % (
              enum_descriptor.full_name, number))
  return enum_value.number
예제 #2
0
def ParseEnum(field, value):
    """Parse an enum value.

  The value can be specified by a number (the enum value), or by
  a string literal (the enum name).

  Args:
    field: Enum field descriptor.
    value: String value.

  Returns:
    Enum value number.

  Raises:
    ValueError: If the enum value could not be parsed.
  """
    enum_descriptor = field.enum_type
    try:
        number = int(value, 0)
    except ValueError:
        # Identifier.
        enum_value = enum_descriptor.values_by_name.get(
            bytes_to_string(value), None)
        if enum_value is None:
            raise ValueError(
                'Enum type "%s" has no value named %s.' %
                (enum_descriptor.full_name, bytes_to_string(value)))
    else:
        # Numeric value.
        enum_value = enum_descriptor.values_by_number.get(number, None)
        if enum_value is None:
            raise ValueError('Enum type "%s" has no value with number %d.' %
                             (enum_descriptor.full_name, number))
    return enum_value.number
예제 #3
0
    def ConsumeIdentifier(self):
        """Consumes protocol message field identifier.

    Returns:
      Identifier string.

    Raises:
      ParseError: If an identifier couldn't be consumed.
    """
        result = self.token
        identifier_match = self._IDENTIFIER_BYTES.match(result)
        if not identifier_match:
            raise self._ParseError('Expected identifier.')
        self.NextToken()
        return bytes_to_string(result)
  def ConsumeIdentifier(self):
    """Consumes protocol message field identifier.

    Returns:
      Identifier string.

    Raises:
      ParseError: If an identifier couldn't be consumed.
    """
    result = self.token
    identifier_match = self._IDENTIFIER_BYTES.match(result)
    if not identifier_match:
      raise self._ParseError('Expected identifier.')
    self.NextToken()
    return bytes_to_string(result)
예제 #5
0
def ParseInteger(text, is_signed=False, is_long=False):
  """Parses an integer.

  Args:
    text: The text to parse.
    is_signed: True if a signed integer must be parsed.
    is_long: True if a long integer must be parsed.

  Returns:
    The integer value.

  Raises:
    ValueError: Thrown Iff the text is not a valid integer.
  """
  # Do the actual parsing. Exception handling is propagated to caller.
  try:
    result = int(text, 0)
  except ValueError:
    raise ValueError('Couldn\'t parse integer: %s' % bytes_to_string(text))

  # Check if the integer is sane. Exceptions handled by callers.
  checker = _INTEGER_CHECKERS[2 * int(is_long) + int(is_signed)]
  checker.CheckValue(result)
  return result
예제 #6
0
def ParseInteger(text, is_signed=False, is_long=False):
    """Parses an integer.

  Args:
    text: The text to parse.
    is_signed: True if a signed integer must be parsed.
    is_long: True if a long integer must be parsed.

  Returns:
    The integer value.

  Raises:
    ValueError: Thrown Iff the text is not a valid integer.
  """
    # Do the actual parsing. Exception handling is propagated to caller.
    try:
        result = int(text, 0)
    except ValueError:
        raise ValueError('Couldn\'t parse integer: %s' % bytes_to_string(text))

    # Check if the integer is sane. Exceptions handled by callers.
    checker = _INTEGER_CHECKERS[2 * int(is_long) + int(is_signed)]
    checker.CheckValue(result)
    return result