def export_file(export_to, filename, csv_string=None): """Export file to csv file or gdrive file""" if export_to == "gdrive": gfile = fa.create_gdrive_file(csv_string, filename) headers = [('Content-Type', 'application/json'), ] return current_app.make_response((json.dumps(gfile), 200, headers)) if export_to == "csv": headers = [ ("Content-Type", "text/csv"), ("Content-Disposition", "attachment"), ] return current_app.make_response((csv_string, 200, headers)) raise wzg_exceptions.BadRequest(app_errors.BAD_PARAMS)
def export_file(export_to, filename, csv_string=None): """Export file to csv file or gdrive file""" if export_to == "gdrive": gfile = fa.create_gdrive_file(csv_string, filename) headers = [('Content-Type', 'application/json'), ] return current_app.make_response((json.dumps(gfile), 200, headers)) if export_to == "csv": headers = [ ("Content-Type", "text/csv"), ("Content-Disposition", "attachment; filename='{}'".format(filename)), ] return current_app.make_response((csv_string, 200, headers)) raise BadRequest("Bad params")
def handle_export_request(): """Export request handler""" # pylint: disable=too-many-locals try: with benchmark("handle export request data"): data = parse_export_request() objects = data.get("objects") export_to = data.get("export_to") current_time = data.get("current_time") query_helper = QueryHelper(objects) ids_by_type = query_helper.get_ids() with benchmark("Generate CSV array"): converter = Converter(ids_by_type=ids_by_type) csv_data = converter.to_array() with benchmark("Generate CSV string"): csv_string = generate_csv_string(csv_data) with benchmark("Make response."): object_names = "_".join(converter.get_object_names()) filename = "{}_{}.csv".format(object_names, current_time) if export_to == "gdrive": gfile = fa.create_gdrive_file(csv_string, filename) headers = [('Content-Type', 'application/json'), ] return current_app.make_response((json.dumps(gfile), 200, headers)) if export_to == "csv": headers = [ ("Content-Type", "text/csv"), ("Content-Disposition", "attachment; filename='{}'".format(filename)), ] return current_app.make_response((csv_string, 200, headers)) except BadQueryException as exception: raise BadRequest(exception.message) except Unauthorized as ex: raise Unauthorized("{} Try to reload /export page".format(ex.message)) except HttpAccessTokenRefreshError: del flask.session['credentials'] raise Unauthorized('Unable to get valid credentials.' ' Try to reload /export page') except HttpError as e: message = json.loads(e.content).get("error").get("message") if e.resp.code == 401: raise Unauthorized("{} Try to reload /export page".format(message)) raise InternalServerError(message) except Exception as e: # pylint: disable=broad-except logger.exception("Export failed: %s", e.message) raise InternalServerError("Export failed due to internal server error.")