diff --git a/frappe/app.py b/frappe/app.py index fbfc1a1e87..51b61b4b67 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -79,7 +79,8 @@ def application(request): if frappe.local.request.method in ("POST", "PUT") and frappe.db and rollback: frappe.db.rollback() - if frappe.local.form_dict.cmd or frappe.request.path.startswith("/api/"): + if (frappe.local.form_dict.cmd or frappe.request.path.startswith("/api/")) \ + and not response.data: if not frappe.local.response.get("type"): frappe.local.response["type"] = "json" diff --git a/frappe/auth.py b/frappe/auth.py index 3cb8c384fd..761d66fa00 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -10,6 +10,7 @@ import frappe.utils import frappe.utils.user from frappe import conf from frappe.sessions import Session +from frappe.modules.patch_handler import check_session_stopped class HTTPRequest: def __init__(self): @@ -39,9 +40,7 @@ class HTTPRequest: frappe.local.cookie_manager.init_cookies() # check status - if frappe.db.get_global("__session_status")=='stop': - frappe.msgprint(frappe.db.get_global("__session_status_message")) - raise frappe.SessionStopped('Session Stopped') + check_session_stopped() # load user self.setup_user() diff --git a/frappe/exceptions.py b/frappe/exceptions.py index 705e21a185..ecd9957531 100644 --- a/frappe/exceptions.py +++ b/frappe/exceptions.py @@ -1,3 +1,10 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt + +from __future__ import unicode_literals + +# BEWARE don't put anything in this file except exceptions + class ValidationError(Exception): http_status_code = 417 diff --git a/frappe/modules/patch_handler.py b/frappe/modules/patch_handler.py index 0ff2978246..851bf7b7b5 100644 --- a/frappe/modules/patch_handler.py +++ b/frappe/modules/patch_handler.py @@ -114,6 +114,11 @@ def block_user(block): frappe.db.set_global('__session_status', block and 'stop' or None) frappe.db.set_global('__session_status_message', block and msg or None) frappe.db.commit() + +def check_session_stopped(): + if frappe.db.get_global("__session_status")=='stop': + frappe.msgprint(frappe.db.get_global("__session_status_message")) + raise frappe.SessionStopped('Session Stopped') def setup(): frappe.db.sql("""CREATE TABLE IF NOT EXISTS `__PatchLog` ( diff --git a/frappe/utils/response.py b/frappe/utils/response.py index 5d44dd1b7d..2bbcb01192 100644 --- a/frappe/utils/response.py +++ b/frappe/utils/response.py @@ -24,25 +24,25 @@ def report_error(status_code, response): def build_response(response): response_type_map = { - 'csv': print_csv, - 'download': print_raw, - 'json': print_json, - 'page': print_page, + 'csv': as_csv, + 'download': as_raw, + 'json': as_json, + 'page': as_page, 'redirect': redirect } response_type_map[frappe.response.get('type')](response=response) -def print_page(): +def as_page(): """print web page""" from frappe.website.render import render render(frappe.response['page_name']) -def print_json(response): +def as_json(response): make_logs() cleanup_docs() response.headers["Content-Type"] = "text/json; charset: utf-8" - print_zip(json.dumps(frappe.local.response, default=json_handler, separators=(',',':')), response=response) + gzip(json.dumps(frappe.local.response, default=json_handler, separators=(',',':')), response=response) def redirect(response): response.data = """ @@ -59,14 +59,14 @@ def cleanup_docs(): if frappe.response.get('docs') and type(frappe.response['docs'])!=dict: frappe.response['docs'] = frappe.model.utils.compress(frappe.response['docs']) -def print_csv(response): +def as_csv(response): response.headers["Content-Type"] = \ "text/csv; charset: utf-8" response.headers["Content-Disposition"] = \ "attachment; filename=%s.csv" % frappe.response['doctype'].replace(' ', '_') response.data = frappe.response['result'] -def print_raw(response): +def as_raw(response): response.headers["Content-Type"] = \ mimetypes.guess_type(frappe.response['filename'])[0] or "application/unknown" response.headers["Content-Disposition"] = \ @@ -85,7 +85,7 @@ def make_logs(): if frappe.debug_log and frappe.conf.get("logging") or False: frappe.response['_debug_messages'] = json.dumps(frappe.local.debug_log) -def print_zip(data, response): +def gzip(data, response): data = data.encode('utf-8') orig_len = len(data) if accept_gzip() and orig_len>512: