Exemplo n.º 1
0
    def MergeFrom(self, msg):
        if not isinstance(msg, cls):
            raise TypeError(
                "Parameter to MergeFrom() must be instance of same class: "
                "expected %s got %s." % (cls.__name__, type(msg).__name__))

        assert msg is not self
        self._Modified()

        fields = self._fields

        for field, value in iteritems(msg._fields):
            if field.label == LABEL_REPEATED:
                field_value = fields.get(field)
                if field_value is None:
                    # Construct a new object to represent this field.
                    field_value = field._default_constructor(self)
                    fields[field] = field_value
                field_value.MergeFrom(value)
            elif field.cpp_type == CPPTYPE_MESSAGE:
                if value._is_present_in_parent:
                    field_value = fields.get(field)
                    if field_value is None:
                        # Construct a new object to represent this field.
                        field_value = field._default_constructor(self)
                        fields[field] = field_value
                    field_value.MergeFrom(value)
            else:
                self._fields[field] = value

        if msg._unknown_fields:
            if not self._unknown_fields:
                self._unknown_fields = []
            self._unknown_fields.extend(msg._unknown_fields)
Exemplo n.º 2
0
 def init(self, **kwargs):
     self._cached_byte_size = 0
     self._cached_byte_size_dirty = len(kwargs) > 0
     self._fields = {}
     # _unknown_fields is () when empty for efficiency, and will be turned into
     # a list if fields are added.
     self._unknown_fields = ()
     self._is_present_in_parent = False
     self._listener = message_listener_mod.NullMessageListener()
     self._listener_for_children = _Listener(self)
     for field_name, field_value in iteritems(kwargs):
         field = _GetFieldByName(message_descriptor, field_name)
         if field is None:
             raise TypeError(
                 "%s() got an unexpected keyword argument '%s'" %
                 (message_descriptor.name, field_name))
         if field.label == _FieldDescriptor.LABEL_REPEATED:
             copy = field._default_constructor(self)
             if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:  # Composite
                 for val in field_value:
                     copy.add().MergeFrom(val)
             else:  # Scalar
                 copy.extend(field_value)
             self._fields[field] = copy
         elif field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
             copy = field._default_constructor(self)
             copy.MergeFrom(field_value)
             self._fields[field] = copy
         else:
             setattr(self, field_name, field_value)
Exemplo n.º 3
0
    def IsInitialized(self, errors=None):
        """Checks if all required fields of a message are set.

    Args:
      errors:  A list which, if provided, will be populated with the field
               paths of all missing required fields.

    Returns:
      True iff the specified message has all required fields set.
    """

        # Performance is critical so we avoid HasField() and ListFields().

        for field in required_fields:
            if (field not in self._fields
                    or (field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE
                        and not self._fields[field]._is_present_in_parent)):
                if errors is not None:
                    errors.extend(self.FindInitializationErrors())
                return False

        for field, value in iteritems(self._fields):
            if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
                if field.label == _FieldDescriptor.LABEL_REPEATED:
                    for element in value:
                        if not element.IsInitialized():
                            if errors is not None:
                                errors.extend(self.FindInitializationErrors())
                            return False
                elif value._is_present_in_parent and not value.IsInitialized():
                    if errors is not None:
                        errors.extend(self.FindInitializationErrors())
                    return False

        return True
Exemplo n.º 4
0
  def MergeFrom(self, msg):
    if not isinstance(msg, cls):
      raise TypeError(
          "Parameter to MergeFrom() must be instance of same class: "
          "expected %s got %s." % (cls.__name__, type(msg).__name__))

    assert msg is not self
    self._Modified()

    fields = self._fields

    for field, value in iteritems(msg._fields):
      if field.label == LABEL_REPEATED:
        field_value = fields.get(field)
        if field_value is None:
          # Construct a new object to represent this field.
          field_value = field._default_constructor(self)
          fields[field] = field_value
        field_value.MergeFrom(value)
      elif field.cpp_type == CPPTYPE_MESSAGE:
        if value._is_present_in_parent:
          field_value = fields.get(field)
          if field_value is None:
            # Construct a new object to represent this field.
            field_value = field._default_constructor(self)
            fields[field] = field_value
          field_value.MergeFrom(value)
      else:
        self._fields[field] = value

    if msg._unknown_fields:
      if not self._unknown_fields:
        self._unknown_fields = []
      self._unknown_fields.extend(msg._unknown_fields)
Exemplo n.º 5
0
  def IsInitialized(self, errors=None):
    """Checks if all required fields of a message are set.

    Args:
      errors:  A list which, if provided, will be populated with the field
               paths of all missing required fields.

    Returns:
      True iff the specified message has all required fields set.
    """

    # Performance is critical so we avoid HasField() and ListFields().

    for field in required_fields:
      if (field not in self._fields or
          (field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE and
           not self._fields[field]._is_present_in_parent)):
        if errors is not None:
          errors.extend(self.FindInitializationErrors())
        return False

    for field, value in iteritems(self._fields):
      if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
        if field.label == _FieldDescriptor.LABEL_REPEATED:
          for element in value:
            if not element.IsInitialized():
              if errors is not None:
                errors.extend(self.FindInitializationErrors())
              return False
        elif value._is_present_in_parent and not value.IsInitialized():
          if errors is not None:
            errors.extend(self.FindInitializationErrors())
          return False

    return True
Exemplo n.º 6
0
 def init(self, **kwargs):
   self._cached_byte_size = 0
   self._cached_byte_size_dirty = len(kwargs) > 0
   self._fields = {}
   # _unknown_fields is () when empty for efficiency, and will be turned into
   # a list if fields are added.
   self._unknown_fields = ()
   self._is_present_in_parent = False
   self._listener = message_listener_mod.NullMessageListener()
   self._listener_for_children = _Listener(self)
   for field_name, field_value in iteritems(kwargs):
     field = _GetFieldByName(message_descriptor, field_name)
     if field is None:
       raise TypeError("%s() got an unexpected keyword argument '%s'" %
                       (message_descriptor.name, field_name))
     if field.label == _FieldDescriptor.LABEL_REPEATED:
       copy = field._default_constructor(self)
       if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:  # Composite
         for val in field_value:
           copy.add().MergeFrom(val)
       else:  # Scalar
         copy.extend(field_value)
       self._fields[field] = copy
     elif field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
       copy = field._default_constructor(self)
       copy.MergeFrom(field_value)
       self._fields[field] = copy
     else:
       setattr(self, field_name, field_value)
Exemplo n.º 7
0
 def ListFields(self):
     all_fields = [
         item for item in iteritems(self._fields) if _IsPresent(item)
     ]
     all_fields.sort(key=lambda item: item[0].number)
     return all_fields
Exemplo n.º 8
0
def _AddPropertiesForExtensions(descriptor, cls):
    """Adds properties for all fields in this protocol message type."""
    extension_dict = descriptor.extensions_by_name
    for extension_name, extension_field in iteritems(extension_dict):
        constant_name = extension_name.upper() + "_FIELD_NUMBER"
        setattr(cls, constant_name, extension_field.number)
Exemplo n.º 9
0
def _AddClassAttributesForNestedExtensions(descriptor, dictionary):
    extension_dict = descriptor.extensions_by_name
    for extension_name, extension_field in iteritems(extension_dict):
        assert extension_name not in dictionary
        dictionary[extension_name] = extension_field
Exemplo n.º 10
0
 def ListFields(self):
   all_fields = [item for item in iteritems(self._fields) if _IsPresent(item)]
   all_fields.sort(key = lambda item: item[0].number)
   return all_fields
Exemplo n.º 11
0
def _AddPropertiesForExtensions(descriptor, cls):
  """Adds properties for all fields in this protocol message type."""
  extension_dict = descriptor.extensions_by_name
  for extension_name, extension_field in iteritems(extension_dict):
    constant_name = extension_name.upper() + "_FIELD_NUMBER"
    setattr(cls, constant_name, extension_field.number)
Exemplo n.º 12
0
def _AddClassAttributesForNestedExtensions(descriptor, dictionary):
  extension_dict = descriptor.extensions_by_name
  for extension_name, extension_field in iteritems(extension_dict):
    assert extension_name not in dictionary
    dictionary[extension_name] = extension_field