parameters: (message_descriptor, cls)
docstring: Adds an __init__ method to cls.
docstring_summary: Adds an __init__ method to cls.
docstring_tokens: Adds an __init__ method to cls .
function: def _AddInitMethod(message_descriptor, cls):
    """Adds an __init__ method to cls."""
  
    def _GetIntegerEnumValue(enum_type, value):
      """Convert a string or integer enum value to an integer.
  
      If the value is a string, it is converted to the enum value in
      enum_type with the same name.  If the value is not a string, it's
      returned as-is.  (No conversion or bounds-checking is done.)
      """
      if isinstance(value, six.string_types):
        try:
          return enum_type.values_by_name[value].number
        except KeyError:
          raise ValueError('Enum type %s: unknown label "%s"' % (
              enum_type.full_name, value))
      return value
  
    def init(self, **kwargs):
      self._cached_byte_size = 0
      self._cached_byte_size_dirty = len(kwargs) > 0
      self._fields = {}
      # Contains a mapping from oneof field descriptors to the descriptor
      # of the currently set field in that oneof field.
      self._oneofs = {}
  
      # _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 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:
          # field=None is the same as no field at all.
          continue
        if field.label == _FieldDescriptor.LABEL_REPEATED:
          copy = field._default_constructor(self)
          if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:  # Composite
            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:  # Scalar
            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)
  
    init.__module__ = None
    init.__doc__ = None
    cls.__init__ = init
function_tokens: def _AddInitMethod ( message_descriptor , cls ) : def _GetIntegerEnumValue ( enum_type , value ) : """Convert a string or integer enum value to an integer.
  
      If the value is a string, it is converted to the enum value in
      enum_type with the same name.  If the value is not a string, it's
      returned as-is.  (No conversion or bounds-checking is done.)
      """ if isinstance ( value , six . string_types ) : try : return enum_type . values_by_name [ value ] . number except KeyError : raise ValueError ( 'Enum type %s: unknown label "%s"' % ( enum_type . full_name , value ) ) return value def init ( self , * * kwargs ) : self . _cached_byte_size = 0 self . _cached_byte_size_dirty = len ( kwargs ) > 0 self . _fields = { } # Contains a mapping from oneof field descriptors to the descriptor # of the currently set field in that oneof field. self . _oneofs = { } # _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 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 : # field=None is the same as no field at all. continue if field . label == _FieldDescriptor . LABEL_REPEATED : copy = field . _default_constructor ( self ) if field . cpp_type == _FieldDescriptor . CPPTYPE_MESSAGE : # Composite 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 : # Scalar 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 ) init . __module__ = None init . __doc__ = None cls . __init__ = init