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
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
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
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
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