def METHOD_NAME(self, name, mode="rb", blob_object=None):
    """
    open returns a Django File object containing the bytes of name suitable for reading.
    You can pass in an optional 'mode' argument, but is only there for Django Storage class
    compatibility. It would error out if given any other argument than "rb".
    You can also pass in an object in the blob_object argument. This must have a method called
    `download_to_file` that accepts as writeable file object as an argument, and writes the
    bytes to it. (this is mainly used for mocking in tests.)
    """
    # We don't have any logic for returning the file object in write
    # so just raise an error if we get any mode other than rb
    if mode != "rb":
        raise AssertionError(
            "Sorry, we can't handle any open mode other than rb."
            " Please use Storage.save() instead."
        )
    if not blob_object:
        # the old studio storage had a prefix if /contentworkshop_content/
        # before the path; remove that first before passing it in to GCS
        # TODO (aron): remove hack once we've migrated all File models to remove the prefix
        if name.startswith(OLD_STUDIO_STORAGE_PREFIX):
            name = name.split(OLD_STUDIO_STORAGE_PREFIX).pop()
        blob = self.bucket.get_blob(name)
    else:
        blob = blob_object
    if blob is None:
        raise FileNotFoundError("{} not found".format(name))
    fobj = tempfile.NamedTemporaryFile()
    blob.download_to_file(fobj)
    # flush it to disk
    fobj.flush()
    fobj.seek(0)
    django_file = File(fobj)
    django_file.just_downloaded = True
    return django_file