Пример #1
0
 def extra(self):
     """The metadata for a file revision doesn't contain a webView link, and a revisionId isn't
     appropriate.  GDocs don't have an md5, non-GDocs don't need a downloadExt.
     """
     if self.is_google_doc:
         return {'downloadExt': utils.get_download_extension(self.raw)}
     return {'md5': self.raw['md5Checksum']}
Пример #2
0
    def download(self, path, revision=None, range=None, **kwargs):
        if revision and not revision.endswith(settings.DRIVE_IGNORE_VERSION):
            # Must make additional request to look up download URL for revision
            response = yield from self.make_request(
                "GET",
                self.build_url("files", path.identifier, "revisions", revision, alt="json"),
                expects=(200,),
                throws=exceptions.MetadataError,
            )
            data = yield from response.json()
        else:
            data = yield from self.metadata(path, raw=True)

        download_resp = yield from self.make_request(
            "GET",
            data.get("downloadUrl") or drive_utils.get_export_link(data),
            range=range,
            expects=(200, 206),
            throws=exceptions.DownloadError,
        )

        if "fileSize" in data:
            return streams.ResponseStreamReader(download_resp, size=data["fileSize"])

        # google docs, not drive files, have no way to get the file size
        # must buffer the entire file into memory
        stream = streams.StringStream((yield from download_resp.read()))
        if download_resp.headers.get("Content-Type"):
            stream.content_type = download_resp.headers["Content-Type"]
        if drive_utils.is_docs_file(data):
            stream.name = path.name + drive_utils.get_download_extension(data)
        return stream
Пример #3
0
    async def download(self, path, revision=None, range=None, **kwargs):
        if revision and not revision.endswith(settings.DRIVE_IGNORE_VERSION):
            # Must make additional request to look up download URL for revision
            async with self.request(
                'GET',
                self.build_url('files', path.identifier, 'revisions', revision, alt='json'),
                expects=(200, ),
                throws=exceptions.MetadataError,
            ) as response:
                data = await response.json()
        else:
            data = await self.metadata(path, raw=True)

        download_resp = await self.make_request(
            'GET',
            data.get('downloadUrl') or drive_utils.get_export_link(data),
            range=range,
            expects=(200, 206),
            throws=exceptions.DownloadError,
        )

        if 'fileSize' in data:
            return streams.ResponseStreamReader(download_resp, size=data['fileSize'])

        # google docs, not drive files, have no way to get the file size
        # must buffer the entire file into memory
        stream = streams.StringStream(await download_resp.read())
        if download_resp.headers.get('Content-Type'):
            stream.content_type = download_resp.headers['Content-Type']
        if drive_utils.is_docs_file(data):
            stream.name = path.name + drive_utils.get_download_extension(data)
        return stream
Пример #4
0
    async def download(self, path, revision=None, range=None, **kwargs):
        if revision and not revision.endswith(settings.DRIVE_IGNORE_VERSION):
            # Must make additional request to look up download URL for revision
            async with self.request(
                'GET',
                self.build_url('files', path.identifier, 'revisions', revision, alt='json'),
                expects=(200, ),
                throws=exceptions.MetadataError,
            ) as response:
                data = await response.json()
        else:
            data = await self.metadata(path, raw=True)

        download_resp = await self.make_request(
            'GET',
            data.get('downloadUrl') or drive_utils.get_export_link(data),
            range=range,
            expects=(200, 206),
            throws=exceptions.DownloadError,
        )

        if 'fileSize' in data:
            return streams.ResponseStreamReader(download_resp, size=data['fileSize'])

        # google docs, not drive files, have no way to get the file size
        # must buffer the entire file into memory
        stream = streams.StringStream(await download_resp.read())
        if download_resp.headers.get('Content-Type'):
            stream.content_type = download_resp.headers['Content-Type']
        if drive_utils.is_docs_file(data):
            stream.name = path.name + drive_utils.get_download_extension(data)
        return stream
Пример #5
0
    def extra(self):
        ret = super().extra
        ret['webView'] = self.raw.get('alternateLink')

        if self.is_google_doc:
            ret['downloadExt'] = utils.get_download_extension(self.raw)
        else:
            if not hasattr(ret, 'hashes'):
                ret['hashes'] = {}
            ret['hashes']['md5'] = self.raw.get('md5Checksum')  # no md5 for non-exportable file

        return ret
Пример #6
0
 def extra(self):
     if self.is_google_doc:
         return {'downloadExt': utils.get_download_extension(self.raw)}
     return {'md5': self.raw['md5Checksum']}
Пример #7
0
 def export_name(self):
     title = self.raw['title']
     if self.is_google_doc:
         ext = utils.get_download_extension(self.raw)
         title += ext
     return title
Пример #8
0
 def extra(self):
     ret = super().extra
     if self.is_google_doc:
         ret['downloadExt'] = utils.get_download_extension(self.raw)
     ret['webView'] = self.raw.get('alternateLink')
     return ret
Пример #9
0
 def extra(self):
     ret = super().extra
     if utils.is_docs_file(self.raw):
         ret['downloadExt'] = utils.get_download_extension(self.raw['exportLinks'])
     return ret
Пример #10
0
 def extra(self):
     ret = super().extra
     if utils.is_docs_file(self.raw):
         ret['downloadExt'] = utils.get_download_extension(self.raw)
     ret['viewUrl'] = self.raw.get('alternateLink')
     return ret
Пример #11
0
 def extra(self):
     ret = super().extra
     if utils.is_docs_file(self.raw):
         ret['downloadExt'] = utils.get_download_extension(self.raw)
     ret['webView'] = self.raw.get('alternateLink')
     return ret
Пример #12
0
 def extra(self):
     if utils.is_docs_file(self.raw):
         return {'downloadExt': utils.get_download_extension(self.raw)}
     return {'md5': self.raw['md5Checksum']}
Пример #13
0
 def export_name(self):
     title = self.raw.get('originalFilename', self._path.name)
     if self.is_google_doc:
         ext = utils.get_download_extension(self.raw)
         title += ext
     return title
Пример #14
0
 def extra(self):
     if self.is_google_doc:
         return {'downloadExt': utils.get_download_extension(self.raw)}
     return {'md5': self.raw['md5Checksum']}
Пример #15
0
 def export_name(self):
     title = self.raw.get('originalFilename', self._path.name)
     if self.is_google_doc:
         ext = utils.get_download_extension(self.raw)
         title += ext
     return title
Пример #16
0
 def export_name(self):
     title = self._file_title
     if self.is_google_doc:
         ext = utils.get_download_extension(self.raw)
         title += ext
     return title
Пример #17
0
 def extra(self):
     ret = super().extra
     if utils.is_docs_file(self.raw):
         ret['downloadExt'] = utils.get_download_extension(self.raw['exportLinks'])
     return ret