[WIP][Enhancement] Provision to pull reports from slave systems (#5844)
* [Enhancement] Provision to pull reports from slave systems * [fix] check if master_db exists * Pull list view from slave system
This commit is contained in:
parent
aef1046b1f
commit
d46fd09b44
3 changed files with 34 additions and 1 deletions
|
|
@ -170,9 +170,20 @@ def connect(site=None, db_name=None):
|
|||
from frappe.database import Database
|
||||
if site:
|
||||
init(site)
|
||||
|
||||
local.db = Database(user=db_name or local.conf.db_name)
|
||||
set_user("Administrator")
|
||||
|
||||
def connect_read_only():
|
||||
from frappe.database import Database
|
||||
|
||||
local.read_only_db = Database(local.conf.slave_host, local.conf.slave_db_name,
|
||||
local.conf.slave_db_password)
|
||||
|
||||
# swap db connections
|
||||
local.master_db = local.db
|
||||
local.db = local.read_only_db
|
||||
|
||||
def get_site_config(sites_path=None, site_path=None):
|
||||
"""Returns `site_config.json` combined with `sites/common_site_config.json`.
|
||||
`site_config` is a set of site wide settings like database name, password, email etc."""
|
||||
|
|
@ -469,6 +480,21 @@ def whitelist(allow_guest=False, xss_safe=False):
|
|||
|
||||
return innerfn
|
||||
|
||||
def read_only():
|
||||
def innfn(fn):
|
||||
def wrapper_fn(*args, **kwargs):
|
||||
if conf.use_slave_for_read_only:
|
||||
connect_read_only()
|
||||
|
||||
retval = fn(*args, **get_newargs(fn, kwargs))
|
||||
|
||||
if local and hasattr(local, 'master_db'):
|
||||
local.db = local.master_db
|
||||
|
||||
return retval
|
||||
return wrapper_fn
|
||||
return innfn
|
||||
|
||||
def only_for(roles):
|
||||
"""Raise `frappe.PermissionError` if the user does not have any of the given **Roles**.
|
||||
|
||||
|
|
@ -926,6 +952,11 @@ def call(fn, *args, **kwargs):
|
|||
if isinstance(fn, string_types):
|
||||
fn = get_attr(fn)
|
||||
|
||||
newargs = get_newargs(fn, kwargs)
|
||||
|
||||
return fn(*args, **newargs)
|
||||
|
||||
def get_newargs(fn, kwargs):
|
||||
if hasattr(fn, 'fnargs'):
|
||||
fnargs = fn.fnargs
|
||||
else:
|
||||
|
|
@ -939,7 +970,7 @@ def call(fn, *args, **kwargs):
|
|||
if "flags" in newargs:
|
||||
del newargs["flags"]
|
||||
|
||||
return fn(*args, **newargs)
|
||||
return newargs
|
||||
|
||||
def make_property_setter(args, ignore_validate=False, validate_fields_for_doctype=True):
|
||||
"""Create a new **Property Setter** (for overriding DocType and DocField properties).
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ def get_script(report_name):
|
|||
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.read_only()
|
||||
def run(report_name, filters=None, user=None):
|
||||
|
||||
report = get_report_doc(report_name)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ from six import text_type, string_types, StringIO
|
|||
import pymysql
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.read_only()
|
||||
def get():
|
||||
args = get_form_params()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue