Exemple #1
0
    def init(self, **kwargs):
        self._cached_byte_size = 0
        self._cached_byte_size_dirty = len(kwargs) > 0
        self._fields = {}

        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 kwargs.iteritems():
            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:
                    for val in field_value:
                        copy.add().MergeFrom(val)
                else:
                    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)
  def init(self, **kwargs):
    self._cached_byte_size = 0
    self._cached_byte_size_dirty = len(kwargs) > 0
    self._fields = {}


    self._oneofs = {}



    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 kwargs.items():
      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_value is None:

        continue
      if field.label == _FieldDescriptor.LABEL_REPEATED:
        copy = field._default_constructor(self)
        if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
          if _IsMapField(field):
            if _IsMessageMapField(field):
              for key in field_value:
                copy[key].MergeFrom(field_value[key])
            else:
              copy.update(field_value)
          else:
            for val in field_value:
              if isinstance(val, dict):
                copy.add(**val)
              else:
                copy.add().MergeFrom(val)
        else:
          if field.cpp_type == _FieldDescriptor.CPPTYPE_ENUM:
            field_value = [_GetIntegerEnumValue(field.enum_type, val)
                           for val in field_value]
          copy.extend(field_value)
        self._fields[field] = copy
      elif field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
        copy = field._default_constructor(self)
        new_val = field_value
        if isinstance(field_value, dict):
          new_val = field.message_type._concrete_class(**field_value)
        try:
          copy.MergeFrom(new_val)
        except TypeError:
          _ReraiseTypeErrorWithFieldName(message_descriptor.name, field_name)
        self._fields[field] = copy
      else:
        if field.cpp_type == _FieldDescriptor.CPPTYPE_ENUM:
          field_value = _GetIntegerEnumValue(field.enum_type, field_value)
        try:
          setattr(self, field_name, field_value)
        except TypeError:
          _ReraiseTypeErrorWithFieldName(message_descriptor.name, field_name)
Exemple #3
0
 def SetListener(self, listener):
     if listener is None:
         self._listener = message_listener_mod.NullMessageListener()
     else:
         self._listener = listener