Пример #1
0
def excel_response(spreadsheet, filename=u'export.xls'):
    """
    Prepares an excel spreadsheet for response in Flask
    :param spreadsheet: the spreadsheet
    :type spreadsheet:class:`xlwt.Workbook`
    :param filename: the name of the file when downloaded
    :type filename: unicode
    :return: the flask response
    :rtype:class:`flask.Response`
    """
    response = Response()
    response.status_code = 200
    output = StringIO.StringIO()
    spreadsheet.save(output)
    response.data = output.getvalue()
    mimetype_tuple = mimetypes.guess_type(filename)

    #HTTP headers for forcing file download
    response_headers = Headers({
        u'Pragma': u"public",  # required,
        u'Expires': u'0',
        u'Cache-Control': [u'must-revalidate, post-check=0, pre-check=0', u'private'],
        u'Content-Type': mimetype_tuple[0],
        u'Content-Disposition': u'attachment; filename=\"%s\";' % filename,
        u'Content-Transfer-Encoding': u'binary',
        u'Content-Length': len(response.data)
    })

    if not mimetype_tuple[1] is None:
        response_headers.update({u'Content-Encoding': mimetype_tuple[1]})

    response.headers = response_headers
    response.set_cookie(u'fileDownload', u'true', path=u'/')
    return response
Пример #2
0
    def test_reassemble(self, temp_dir, common_obj):
        web = web_obj(temp_dir, common_obj, "share", 3)
        web.settings.set("share", "autostop_sharing", False)
        url = "/download"
        with open(web.share_mode.download_filename, "rb") as f:
            contents = f.read()

        with web.app.test_client() as client:
            headers = Headers()
            headers.extend({"Range": "bytes=0-10"})
            resp = client.get(url, headers=headers)
            assert resp.status_code == 206
            content_range = resp.headers["Content-Range"]
            assert content_range == "bytes {}-{}/{}".format(
                0, 10, web.share_mode.download_filesize)
            bytes_out = resp.data

            headers.update({"Range": "bytes=11-100000"})
            resp = client.get(url, headers=headers)
            assert resp.status_code == 206
            content_range = resp.headers["Content-Range"]
            assert content_range == "bytes {}-{}/{}".format(
                11,
                web.share_mode.download_filesize - 1,
                web.share_mode.download_filesize,
            )
            bytes_out += resp.data

            assert bytes_out == contents
Пример #3
0
    def get_headers(self, environ=None):

        headers = Headers([("Content-Type", "application/json; charset=utf-8")
                           ])
        if 'Origin' in request.headers:
            origin = request.headers['Origin']
            headers.update({
                'Access-Control-Allow-Origin': origin,
                'Access-Control-Allow-Method': 'OPTIONS,HEAD,GET,POST',
                'Access-Control-Allow-Headers': '*',
                'Access-Control-Allow-Credentials': 'true',
                'Vary': 'Origin'
            })
        return headers
Пример #4
0
    def batch_dispatch(
        self, reqs_json: List[Dict[str, Any]]
    ) -> Tuple[List[Any], int, Union[Headers, Dict[str, str], Tuple[str], List[Tuple[str]]]]:
        if not reqs_json:
            raise InvalidRequestError(data={'message': 'Empty array'})

        resp_views = []
        headers = Headers()
        status_code = JSONRPC_DEFAULT_HTTP_STATUS_CODE
        with ThreadPoolExecutor(max_workers=len(reqs_json) or 1) as executor:
            for rv, _, hdrs in executor.map(self.handle_dispatch_except, reqs_json):
                headers.update([hdrs] if isinstance(hdrs, tuple) else hdrs)  # type: ignore
                if rv is None:
                    continue
                resp_views.append(rv)
        if not resp_views:
            status_code = 204
        return resp_views, status_code, headers
Пример #5
0
def excel_response(spreadsheet, filename=u"export.xls"):
    """
    Prepares an excel spreadsheet for response in Flask
    :param spreadsheet: the spreadsheet
    :type spreadsheet:class:`xlwt.Workbook`
    :param filename: the name of the file when downloaded
    :type filename: unicode
    :return: the flask response
    :rtype:class:`flask.Response`
    """
    response = Response()
    response.status_code = 200
    output = StringIO.StringIO()
    spreadsheet.save(output)
    response.data = output.getvalue()
    mimetype_tuple = mimetypes.guess_type(filename)

    # HTTP headers for forcing file download
    response_headers = Headers(
        {
            u"Pragma": u"public",  # required,
            u"Expires": u"0",
            u"Cache-Control": [u"must-revalidate, post-check=0, pre-check=0", u"private"],
            u"Content-Type": mimetype_tuple[0],
            u"Content-Disposition": u'attachment; filename="%s";' % filename,
            u"Content-Transfer-Encoding": u"binary",
            u"Content-Length": len(response.data),
        }
    )

    if not mimetype_tuple[1] is None:
        response_headers.update({u"Content-Encoding": mimetype_tuple[1]})

    response.headers = response_headers
    response.set_cookie(u"fileDownload", u"true", path=u"/")
    return response