code: def put(self, data, **kwargs):
          
          grid_file = GridIn(self.__collection, **kwargs)
          try:
              grid_file.write(data)
          finally:
              grid_file.close()
  
          return grid_file._id
docs: Put data in GridFS as a new file.
  
          Equivalent to doing::
  
            try:
                f = new_file(**kwargs)
                f.write(data)
            finally:
                f.close()
  
          `data` can be either an instance of :class:`str` (:class:`bytes`
          in python 3) or a file-like object providing a :meth:`read` method.
          If an `encoding` keyword argument is passed, `data` can also be a
          :class:`unicode` (:class:`str` in python 3) instance, which will
          be encoded as `encoding` before being written. Any keyword arguments
          will be passed through to the created file - see
          :meth:`~gridfs.grid_file.GridIn` for possible arguments. Returns the
          ``"_id"`` of the created file.
  
          If the ``"_id"`` of the file is manually specified, it must
          not already exist in GridFS. Otherwise
          :class:`~gridfs.errors.FileExists` is raised.
  
          :Parameters:
            - `data`: data to be written as a file.
            - `**kwargs` (optional): keyword arguments for file creation
  
          .. versionchanged:: 3.0
             w=0 writes to GridFS are now prohibited.