'Read a file from GridFS
Application developers should generally not need to
instantiate this class directly - instead see the methods
provided by :class:`~gridfs.GridFS`.
Either `file_id` or `file_document` must be specified,
`file_document` will be given priority if present. Raises
:class:`TypeError` if `root_collection` is not an instance of
:class:`~pymongo.collection.Collection`.
:Parameters:
- `root_collection`: root collection to read from
- `file_id` (optional): value of ``"_id"`` for the file to read
- `file_document` (optional): file document from
`root_collection.files`
.. versionchanged:: 3.0
Creating a GridOut does not immediately retrieve the file metadata
from the server. Metadata is fetched when first needed.'

def __init__(self, root_collection, file_id=None, file_document=None):

    if (not isinstance(root_collection, Collection)):
        raise TypeError('root_collection    must    be    an    instance    of    Collection')
    self.__chunks = root_collection.chunks
    self.__files = root_collection.files
    self.__file_id = file_id
    self.__buffer = EMPTY
    self.__position = 0
    self._file = file_document
