code: def insert(self, parent, position, row=None):
          
  
          return self._do_insert(parent, position, row)
docs: insert(parent, position, row=None)
  
          :param parent:
              A valid :obj:`Gtk.TreeIter`, or :obj:`None`
          :type parent: :obj:`Gtk.TreeIter` or :obj:`None`
  
          :param position:
              position to insert the new row, or -1 for last
          :type position: :obj:`int`
  
          :param row: a list of values to apply to the newly inserted row or :obj:`None`
          :type row: [:obj:`object`] or :obj:`None`
  
          :returns: a :obj:`Gtk.TreeIter` pointing to the new row
          :rtype: :obj:`Gtk.TreeIter`
  
          Creates a new row at `position`.  If parent is not :obj:`None`, then
          the row will be made a child of `parent`.  Otherwise, the row will be
          created at the toplevel. If `position` is -1 or is larger than the
          number of rows at that level, then the new row will be inserted to the
          end of the list.
  
          The returned iterator will point to the newly inserted row. The row
          will be empty after this function is called if `row` is :obj:`None`.
          To fill in values, you need to call :obj:`Gtk.TreeStore.set`\\() or
          :obj:`Gtk.TreeStore.set_value`\\().
  
          If `row` isn't :obj:`None` it has to be a list of values which will be
          used to fill the row.