diff --git a/frappe/__init__.py b/frappe/__init__.py index 850f571a1c..bfe6a58718 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -60,7 +60,7 @@ def set_user_lang(user, user_language=None): from frappe.translate import get_lang_dict if not user_language: - user_language = conn.get_value("Profile", user, "language") + user_language = db.get_value("Profile", user, "language") if user_language: lang_dict = get_lang_dict() @@ -68,7 +68,7 @@ def set_user_lang(user, user_language=None): local.lang = lang_dict[user_language] # local-globals -conn = local("conn") +db = local("db") conf = local("conf") form = form_dict = local("form_dict") request = local("request") @@ -129,8 +129,8 @@ def get_site_config(): def destroy(): """closes connection and releases werkzeug local""" - if conn: - conn.close() + if db: + db.close() release_local(local) @@ -182,7 +182,7 @@ def msgprint(msg, small=0, raise_exception=0, as_table=False): def _raise_exception(): if raise_exception: if flags.rollback_on_exception: - conn.rollback() + db.rollback() import inspect if inspect.isclass(raise_exception) and issubclass(raise_exception, Exception): raise raise_exception, msg @@ -210,10 +210,10 @@ def create_folder(path): if not os.path.exists(path): os.makedirs(path) def connect(site=None, db_name=None): - from db import Database + from database import Database if site: init(site) - local.conn = Database(user=db_name or local.conf.db_name) + local.db = Database(user=db_name or local.conf.db_name) local.response = _dict() local.form_dict = _dict() local.session = _dict() @@ -296,11 +296,11 @@ def has_permission(doctype, ptype="read", refdoc=None): return frappe.permissions.has_permission(doctype, ptype, refdoc) def clear_perms(doctype): - conn.sql("""delete from tabDocPerm where parent=%s""", doctype) + db.sql("""delete from tabDocPerm where parent=%s""", doctype) def reset_perms(doctype): clear_perms(doctype) - reload_doc(conn.get_value("DocType", doctype, "module"), + reload_doc(db.get_value("DocType", doctype, "module"), "DocType", doctype, force=True) def generate_hash(txt=None): @@ -413,7 +413,7 @@ def get_all_apps(with_frappe=False, with_internal_apps=True): def get_installed_apps(): if flags.in_install_db: return [] - installed = json.loads(conn.get_global("installed_apps") or "[]") + installed = json.loads(db.get_global("installed_apps") or "[]") return installed def get_hooks(hook=None, app_name=None): @@ -507,14 +507,14 @@ def make_property_setter(args): def get_application_home_page(user='Guest'): """get home page for user""" - hpl = conn.sql("""select home_page + hpl = db.sql("""select home_page from `tabDefault Home Page` where parent='Control Panel' and role in ('%s') order by idx asc limit 1""" % "', '".join(get_roles(user))) if hpl: return hpl[0][0] else: - return conn.get_value("Control Panel", None, "home_page") + return db.get_value("Control Panel", None, "home_page") def import_doclist(path, ignore_links=False, ignore_insert=False, insert=False): from frappe.core.page.data_import_tool import data_import_tool @@ -617,7 +617,7 @@ def get_template(path): return get_jenv().get_template(path) def get_website_route(doctype, name): - return conn.get_value("Website Route", {"ref_doctype": doctype, "docname": name}) + return db.get_value("Website Route", {"ref_doctype": doctype, "docname": name}) def add_version(doclist): bean({ diff --git a/frappe/api.py b/frappe/api.py index 55a78d2488..e8a9358c18 100644 --- a/frappe/api.py +++ b/frappe/api.py @@ -54,7 +54,7 @@ def handle(): if not bean.has_permission("write"): frappe.throw("No Permission", frappe.PermissionError) bean.run_method(frappe.local.form_dict.run_method, **frappe.local.form_dict) - frappe.conn.commit() + frappe.db.commit() else: if name: @@ -66,12 +66,12 @@ def handle(): if frappe.local.request.method=="POST": frappe.local.response.update({ "doclist": frappe.client.insert(frappe.local.form_dict.doclist)}) - frappe.conn.commit() + frappe.db.commit() if frappe.local.request.method=="PUT": frappe.local.response.update({ "doclist":frappe.client.save(frappe.local.form_dict.doclist)}) - frappe.conn.commit() + frappe.db.commit() if frappe.local.request.method=="DELETE": frappe.client.delete(doctype, name) diff --git a/frappe/app.py b/frappe/app.py index 2bce7d4333..2039877aea 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -73,8 +73,8 @@ def application(request): frappe.local._response = handle_session_stopped() finally: - if frappe.conn: - frappe.conn.close() + if frappe.db: + frappe.db.close() return frappe.local._response diff --git a/frappe/auth.py b/frappe/auth.py index 8609e30206..c01ff86754 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -import frappe.db +import frappe.database import frappe.utils import frappe.profile from frappe import conf @@ -35,8 +35,8 @@ class HTTPRequest: frappe.local.login_manager = LoginManager() # check status - if frappe.conn.get_global("__session_status")=='stop': - frappe.msgprint(frappe.conn.get_global("__session_status_message")) + if frappe.db.get_global("__session_status")=='stop': + frappe.msgprint(frappe.db.get_global("__session_status_message")) raise frappe.SessionStopped('Session Stopped') # load profile @@ -81,7 +81,7 @@ class HTTPRequest: def connect(self, ac_name = None): """connect to db, from ac_name or db_name""" - frappe.local.conn = frappe.db.Database(user = self.get_db_name(), \ + frappe.local.db = frappe.db.Database(user = self.get_db_name(), \ password = getattr(conf,'db_password', '')) class LoginManager: @@ -106,7 +106,7 @@ class LoginManager: self.set_user_info() def set_user_info(self): - info = frappe.conn.get_value("Profile", self.user, + info = frappe.db.get_value("Profile", self.user, ["user_type", "first_name", "last_name", "user_image"], as_dict=1) if info.user_type=="Website User": frappe.local._response.set_cookie("system_user", "no") @@ -142,12 +142,12 @@ class LoginManager: """raise exception if user not enabled""" from frappe.utils import cint if user=='Administrator': return - if not cint(frappe.conn.get_value('Profile', user, 'enabled')): + if not cint(frappe.db.get_value('Profile', user, 'enabled')): self.fail('User disabled or missing') def check_password(self, user, pwd): """check password""" - user = frappe.conn.sql("""select `user` from __Auth where `user`=%s + user = frappe.db.sql("""select `user` from __Auth where `user`=%s and `password`=password(%s)""", (user, pwd)) if not user: self.fail('Incorrect password') @@ -165,7 +165,7 @@ class LoginManager: def validate_ip_address(self): """check if IP Address is valid""" - ip_list = frappe.conn.get_value('Profile', self.user, 'restrict_ip', ignore=True) + ip_list = frappe.db.get_value('Profile', self.user, 'restrict_ip', ignore=True) if not ip_list: return @@ -182,8 +182,8 @@ class LoginManager: def validate_hour(self): """check if user is logging in during restricted hours""" - login_before = int(frappe.conn.get_value('Profile', self.user, 'login_before', ignore=True) or 0) - login_after = int(frappe.conn.get_value('Profile', self.user, 'login_after', ignore=True) or 0) + login_before = int(frappe.db.get_value('Profile', self.user, 'login_before', ignore=True) or 0) + login_after = int(frappe.db.get_value('Profile', self.user, 'login_after', ignore=True) or 0) if not (login_before or login_after): return @@ -206,7 +206,7 @@ class LoginManager: if not user: user = frappe.session.user self.run_trigger('on_logout') if user in ['demo@erpnext.com', 'Administrator']: - frappe.conn.sql('delete from tabSessions where sid=%s', frappe.session.get('sid')) + frappe.db.sql('delete from tabSessions where sid=%s', frappe.session.get('sid')) frappe.cache().delete_value("session:" + frappe.session.get("sid")) else: from frappe.sessions import clear_sessions @@ -241,7 +241,7 @@ class CookieManager: if not cint(frappe.form_dict.get('remember_me')): return - remember_days = frappe.conn.get_value('Control Panel', None, + remember_days = frappe.db.get_value('Control Panel', None, 'remember_for_days') or 7 import datetime @@ -252,7 +252,7 @@ class CookieManager: def _update_password(user, password): - frappe.conn.sql("""insert into __Auth (user, `password`) + frappe.db.sql("""insert into __Auth (user, `password`) values (%s, password(%s)) on duplicate key update `password`=password(%s)""", (user, password, password)) diff --git a/frappe/boot.py b/frappe/boot.py index d2bdeedeff..2b28921a47 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -28,7 +28,7 @@ def get_bootinfo(): bootinfo['control_panel'] = frappe._dict(cp.copy()) bootinfo['sysdefaults'] = frappe.defaults.get_defaults() bootinfo['server_date'] = frappe.utils.nowdate() - bootinfo["send_print_in_body_and_attachment"] = frappe.conn.get_value("Email Settings", + bootinfo["send_print_in_body_and_attachment"] = frappe.db.get_value("Email Settings", None, "send_print_in_body_and_attachment") if frappe.session['user'] != 'Guest': @@ -43,10 +43,10 @@ def get_bootinfo(): except ImportError, e: pass - bootinfo.hidden_modules = frappe.conn.get_global("hidden_modules") - bootinfo.doctype_icons = dict(frappe.conn.sql("""select name, icon from + bootinfo.hidden_modules = frappe.db.get_global("hidden_modules") + bootinfo.doctype_icons = dict(frappe.db.sql("""select name, icon from tabDocType where ifnull(icon,'')!=''""")) - bootinfo.doctype_icons.update(dict(frappe.conn.sql("""select name, icon from + bootinfo.doctype_icons.update(dict(frappe.db.sql("""select name, icon from tabPage where ifnull(icon,'')!=''"""))) add_home_page(bootinfo, doclist) @@ -83,7 +83,7 @@ def load_conf_settings(bootinfo): if key in conf: bootinfo[key] = conf.get(key) def add_allowed_pages(bootinfo): - bootinfo.page_info = dict(frappe.conn.sql("""select distinct parent, modified from `tabPage Role` + bootinfo.page_info = dict(frappe.db.sql("""select distinct parent, modified from `tabPage Role` where role in ('%s')""" % "', '".join(frappe.get_roles()))) def load_translations(bootinfo): @@ -95,7 +95,7 @@ def load_translations(bootinfo): def get_fullnames(): """map of user fullnames""" - ret = frappe.conn.sql("""select name, + ret = frappe.db.sql("""select name, concat(ifnull(first_name, ''), if(ifnull(last_name, '')!='', ' ', ''), ifnull(last_name, '')), user_image, gender, email diff --git a/frappe/cli.py b/frappe/cli.py index 6e8846f186..e2f6dc6a2e 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -275,7 +275,7 @@ def install_fixtures(): def add_system_manager(email, first_name=None, last_name=None): frappe.connect() frappe.profile.add_system_manager(email, first_name, last_name) - frappe.conn.commit() + frappe.db.commit() frappe.destroy() # utilities @@ -355,7 +355,7 @@ def update_all_sites(remote=None, branch=None, verbose=True): def reload_doc(module, doctype, docname, force=False): frappe.connect() frappe.reload_doc(module, doctype, docname, force=force) - frappe.conn.commit() + frappe.db.commit() frappe.destroy() @cmd @@ -409,10 +409,10 @@ def move(dest_dir=None): def domain(host_url=None): frappe.connect() if host_url: - frappe.conn.set_value("Website Settings", None, "subdomain", host_url) - frappe.conn.commit() + frappe.db.set_value("Website Settings", None, "subdomain", host_url) + frappe.db.commit() else: - print frappe.conn.get_value("Website Settings", None, "subdomain") + print frappe.db.get_value("Website Settings", None, "subdomain") frappe.destroy() @cmd @@ -454,13 +454,13 @@ def sync_statics(): from frappe.website import statics frappe.connect() statics.sync_statics() - frappe.conn.commit() + frappe.db.commit() frappe.destroy() @cmd def reset_perms(): frappe.connect() - for d in frappe.conn.sql_list("""select name from `tabDocType` + for d in frappe.db.sql_list("""select name from `tabDocType` where ifnull(istable, 0)=0 and ifnull(custom, 0)=0"""): frappe.clear_cache(doctype=d) frappe.reset_perms(d) @@ -470,7 +470,7 @@ def reset_perms(): def execute(method): frappe.connect() ret = frappe.get_attr(method)() - frappe.conn.commit() + frappe.db.commit() frappe.destroy() if ret: print ret @@ -596,9 +596,9 @@ def checkout(branch): def set_admin_password(admin_password): import frappe frappe.connect() - frappe.conn.sql("""update __Auth set `password`=password(%s) + frappe.db.sql("""update __Auth set `password`=password(%s) where user='Administrator'""", (admin_password,)) - frappe.conn.commit() + frappe.db.commit() frappe.destroy() @cmd @@ -731,13 +731,13 @@ def get_site_status(verbose=False): 'active_website_users': get_active_website_users(), 'website_users': get_website_users(), 'system_managers': "\n".join(get_system_managers()), - 'default_company': frappe.conn.get_default("company"), + 'default_company': frappe.db.get_default("company"), 'disk_usage': frappe.utils.get_disk_usage(), 'working_directory': frappe.local.site_path } # country, timezone, industry - control_panel_details = frappe.conn.get_value("Control Panel", "Control Panel", + control_panel_details = frappe.db.get_value("Control Panel", "Control Panel", ["country", "time_zone", "industry"], as_dict=True) if control_panel_details: ret.update(control_panel_details) @@ -746,7 +746,7 @@ def get_site_status(verbose=False): for doctype in ("Company", "Customer", "Item", "Quotation", "Sales Invoice", "Journal Voucher", "Stock Ledger Entry"): key = doctype.lower().replace(" ", "_") + "_exists" - ret[key] = 1 if frappe.conn.count(doctype) else 0 + ret[key] = 1 if frappe.db.count(doctype) else 0 frappe.destroy() diff --git a/frappe/client.py b/frappe/client.py index 6f9fe3291f..d16c63cb01 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -11,7 +11,7 @@ import json, os @frappe.whitelist() def get(doctype, name=None, filters=None): if filters and not name: - name = frappe.conn.get_value(doctype, json.loads(filters)) + name = frappe.db.get_value(doctype, json.loads(filters)) if not name: raise Exception, "No document found for given filters" return [d.fields for d in frappe.bean(doctype, name).doclist] @@ -23,14 +23,14 @@ def get_value(doctype, fieldname, filters=None, as_dict=True, debug=False): if fieldname and fieldname.startswith("["): fieldname = json.loads(fieldname) - return frappe.conn.get_value(doctype, json.loads(filters), fieldname, as_dict=as_dict, debug=debug) + return frappe.db.get_value(doctype, json.loads(filters), fieldname, as_dict=as_dict, debug=debug) @frappe.whitelist() def set_value(doctype, name, fieldname, value): if fieldname in frappe.model.default_fields: frappe.throw(_("Cannot edit standard fields")) - doc = frappe.conn.get_value(doctype, name, ["parenttype", "parent"], as_dict=True) + doc = frappe.db.get_value(doctype, name, ["parenttype", "parent"], as_dict=True) if doc and doc.parent: bean = frappe.bean(doc.parenttype, doc.parent) child = bean.doclist.getone({"doctype": doctype, "name": name}) @@ -90,7 +90,7 @@ def delete(doctype, name): @frappe.whitelist() def set_default(key, value, parent=None): """set a user default value""" - frappe.conn.set_default(key, value, parent or frappe.session.user) + frappe.db.set_default(key, value, parent or frappe.session.user) frappe.clear_cache(user=frappe.session.user) @frappe.whitelist() diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index f1d0f42418..ce875e2606 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -9,7 +9,7 @@ class DocType: self.doc, self.doclist = d, dl def validate(self): - if frappe.conn.sql("""select count(*) from tabComment where comment_doctype=%s + if frappe.db.sql("""select count(*) from tabComment where comment_doctype=%s and comment_docname=%s""", (self.doc.doctype, self.doc.name))[0][0] >= 50: frappe.msgprint("Max Comments reached!", raise_exception=True) @@ -45,13 +45,13 @@ class DocType: raise def get_comments_from_parent(self): - _comments = frappe.conn.get_value(self.doc.comment_doctype, + _comments = frappe.db.get_value(self.doc.comment_doctype, self.doc.comment_docname, "_comments") or "[]" return json.loads(_comments) def update_comments_in_parent(self, _comments): # use sql, so that we do not mess with the timestamp - frappe.conn.sql("""update `tab%s` set `_comments`=%s where name=%s""" % (self.doc.comment_doctype, + frappe.db.sql("""update `tab%s` set `_comments`=%s where name=%s""" % (self.doc.comment_doctype, "%s", "%s"), (json.dumps(_comments), self.doc.comment_docname)) def on_trash(self): @@ -63,8 +63,8 @@ class DocType: self.update_comments_in_parent(_comments) def on_doctype_update(): - if not frappe.conn.sql("""show index from `tabComment` + if not frappe.db.sql("""show index from `tabComment` where Key_name="comment_doctype_docname_index" """): - frappe.conn.commit() - frappe.conn.sql("""alter table `tabComment` + frappe.db.commit() + frappe.db.sql("""alter table `tabComment` add index comment_doctype_docname_index(comment_doctype, comment_docname)""") \ No newline at end of file diff --git a/frappe/core/doctype/comment/test_comment.py b/frappe/core/doctype/comment/test_comment.py index a0f69cc651..238ffc6513 100644 --- a/frappe/core/doctype/comment/test_comment.py +++ b/frappe/core/doctype/comment/test_comment.py @@ -21,12 +21,12 @@ import frappe, unittest, json # self.cleanup() # # def cleanup(self): -# frappe.conn.sql("""delete from tabEvent where subject='__Comment Test Event'""") -# frappe.conn.sql("""delete from tabComment where comment='__Test Comment'""") -# frappe.conn.commit() -# if "_comments" in frappe.conn.get_table_columns("Event"): -# frappe.conn.commit() -# frappe.conn.sql("""alter table `tabEvent` drop column `_comments`""") +# frappe.db.sql("""delete from tabEvent where subject='__Comment Test Event'""") +# frappe.db.sql("""delete from tabComment where comment='__Test Comment'""") +# frappe.db.commit() +# if "_comments" in frappe.db.get_table_columns("Event"): +# frappe.db.commit() +# frappe.db.sql("""alter table `tabEvent` drop column `_comments`""") # # def test_add_comment(self): # self.comment = frappe.bean({ diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 9005f5250f..587c5a8901 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -65,7 +65,7 @@ def _make(doctype=None, name=None, content=None, subject=None, sent_or_received d.subject = subject d.content = content d.sent_or_received = sent_or_received - d.sender = sender or frappe.conn.get_value("Profile", frappe.session.user, "email") + d.sender = sender or frappe.db.get_value("Profile", frappe.session.user, "email") d.recipients = recipients # add as child @@ -94,7 +94,7 @@ def get_customer_supplier(args=None): if not args: args = frappe.local.form_dict if not args.get('contact'): raise Exception, "Please specify a contact to fetch Customer/Supplier" - result = frappe.conn.sql("""\ + result = frappe.db.sql("""\ select customer, supplier from `tabContact` where name = %s""", args.get('contact'), as_dict=1) @@ -118,7 +118,7 @@ def send_comm_email(d, name, sent_via=None, print_html=None, attachments='[]', s footer = set_portal_link(sent_via, d) - send_print_in_body = frappe.conn.get_value("Email Settings", None, "send_print_in_body_and_attachment") + send_print_in_body = frappe.db.get_value("Email Settings", None, "send_print_in_body_and_attachment") if not send_print_in_body: d.content += "

Please see attachment for document details.

" @@ -126,7 +126,7 @@ def send_comm_email(d, name, sent_via=None, print_html=None, attachments='[]', s msg=d.content, footer=footer, print_html=print_html if send_print_in_body else None) if send_me_a_copy: - mail.cc.append(frappe.conn.get_value("Profile", frappe.session.user, "email")) + mail.cc.append(frappe.db.get_value("Profile", frappe.session.user, "email")) if print_html: print_html = scrub_urls(print_html) diff --git a/frappe/core/doctype/custom_field/custom_field.py b/frappe/core/doctype/custom_field/custom_field.py index 324a1d96f8..e2520f0425 100644 --- a/frappe/core/doctype/custom_field/custom_field.py +++ b/frappe/core/doctype/custom_field/custom_field.py @@ -48,7 +48,7 @@ class DocType: def on_trash(self): # delete property setter entries - frappe.conn.sql("""\ + frappe.db.sql("""\ DELETE FROM `tabProperty Setter` WHERE doc_type = %s AND field_name = %s""", @@ -63,7 +63,7 @@ class DocType: if label_index==-1: return prev_field = field_list[label_index] - frappe.conn.sql("""\ + frappe.db.sql("""\ DELETE FROM `tabProperty Setter` WHERE doc_type = %s AND field_name = %s @@ -110,10 +110,10 @@ def get_fields_label(dt=None, form=1): def create_custom_field_if_values_exist(doctype, df): df = frappe._dict(df) - if df.fieldname in frappe.conn.get_table_columns(doctype) and \ - frappe.conn.sql("""select count(*) from `tab{doctype}` + if df.fieldname in frappe.db.get_table_columns(doctype) and \ + frappe.db.sql("""select count(*) from `tab{doctype}` where ifnull({fieldname},'')!=''""".format(doctype=doctype, fieldname=df.fieldname))[0][0] and \ - not frappe.conn.get_value("Custom Field", {"dt": doctype, "fieldname": df.fieldname}): + not frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": df.fieldname}): frappe.bean({ "doctype":"Custom Field", "dt": doctype, diff --git a/frappe/core/doctype/customize_form/customize_form.py b/frappe/core/doctype/customize_form/customize_form.py index e50ecdd342..5401135212 100644 --- a/frappe/core/doctype/customize_form/customize_form.py +++ b/frappe/core/doctype/customize_form/customize_form.py @@ -174,7 +174,7 @@ class DocType: if self.has_property_changed(ref_d, new_d, prop): # using set_value not bean because validations are called # in the end anyways - frappe.conn.set_value("Custom Field", ref_d.name, prop, new_d.get(prop)) + frappe.db.set_value("Custom Field", ref_d.name, prop, new_d.get(prop)) else: d = self.prepare_to_set(prop, new_d, ref_d, dt_dl) if d: diff_list.append(d) @@ -193,7 +193,7 @@ class DocType: """ Get fieldtype and default value for properties of a field """ - df_defaults = frappe.conn.sql(""" + df_defaults = frappe.db.sql(""" SELECT fieldname, fieldtype, `default`, label FROM `tabDocField` WHERE parent='DocField' or parent='DocType'""", as_dict=1) @@ -312,12 +312,12 @@ class DocType: for d in ps_doclist: # Delete existing property setter entry if not d.fields.get("field_name"): - frappe.conn.sql(""" + frappe.db.sql(""" DELETE FROM `tabProperty Setter` WHERE doc_type = %(doc_type)s AND property = %(property)s""", d.fields) else: - frappe.conn.sql(""" + frappe.db.sql(""" DELETE FROM `tabProperty Setter` WHERE doc_type = %(doc_type)s AND field_name = %(field_name)s @@ -334,7 +334,7 @@ class DocType: and resets it to standard """ if self.doc.doc_type: - frappe.conn.sql(""" + frappe.db.sql(""" DELETE FROM `tabProperty Setter` WHERE doc_type = %s""", self.doc.doc_type) diff --git a/frappe/core/doctype/defaultvalue/defaultvalue.py b/frappe/core/doctype/defaultvalue/defaultvalue.py index 9f5c5a5c8b..ed3b873f7d 100644 --- a/frappe/core/doctype/defaultvalue/defaultvalue.py +++ b/frappe/core/doctype/defaultvalue/defaultvalue.py @@ -9,14 +9,14 @@ class DocType: self.doc, self.doclist = d, dl def on_doctype_update(): - if not frappe.conn.sql("""show index from `tabDefaultValue` + if not frappe.db.sql("""show index from `tabDefaultValue` where Key_name="defaultvalue_parent_defkey_index" """): - frappe.conn.commit() - frappe.conn.sql("""alter table `tabDefaultValue` + frappe.db.commit() + frappe.db.sql("""alter table `tabDefaultValue` add index defaultvalue_parent_defkey_index(parent, defkey)""") - if not frappe.conn.sql("""show index from `tabDefaultValue` + if not frappe.db.sql("""show index from `tabDefaultValue` where Key_name="defaultvalue_parent_parenttype_index" """): - frappe.conn.commit() - frappe.conn.sql("""alter table `tabDefaultValue` + frappe.db.commit() + frappe.db.sql("""alter table `tabDefaultValue` add index defaultvalue_parent_parenttype_index(parent, parenttype)""") \ No newline at end of file diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index a9e847e720..2f41b6e923 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -32,10 +32,10 @@ class DocType: def change_modified_of_parent(self): if frappe.flags.in_import: return - parent_list = frappe.conn.sql("""SELECT parent + parent_list = frappe.db.sql("""SELECT parent from tabDocField where fieldtype="Table" and options="%s" """ % self.doc.name) for p in parent_list: - frappe.conn.sql('''UPDATE tabDocType SET modified="%s" + frappe.db.sql('''UPDATE tabDocType SET modified="%s" WHERE `name`="%s"''' % (now(), p[0])) def scrub_field_names(self): @@ -67,7 +67,7 @@ class DocType: if autoname and (not autoname.startswith('field:')) and (not autoname.startswith('eval:')) \ and (not autoname=='Prompt') and (not autoname.startswith('naming_series:')): prefix = autoname.split('.')[0] - used_in = frappe.conn.sql('select name from tabDocType where substring_index(autoname, ".", 1) = %s and name!=%s', (prefix, name)) + used_in = frappe.db.sql('select name from tabDocType where substring_index(autoname, ".", 1) = %s and name!=%s', (prefix, name)) if used_in: msgprint('Series already in use: The series "%s" is already used in "%s"' % (prefix, used_in[0][0]), raise_exception=1) @@ -93,16 +93,16 @@ class DocType: def check_link_replacement_error(self): for d in self.doclist.get({"doctype":"DocField", "fieldtype":"Select"}): - if (frappe.conn.get_value("DocField", d.name, "options") or "").startswith("link:") \ + if (frappe.db.get_value("DocField", d.name, "options") or "").startswith("link:") \ and not d.options.startswith("link:"): frappe.msgprint("link: type Select fields are getting replaced. Please check for %s" % d.label, raise_exception=True) def on_trash(self): - frappe.conn.sql("delete from `tabCustom Field` where dt = %s", self.doc.name) - frappe.conn.sql("delete from `tabCustom Script` where dt = %s", self.doc.name) - frappe.conn.sql("delete from `tabProperty Setter` where doc_type = %s", self.doc.name) - frappe.conn.sql("delete from `tabReport` where ref_doctype=%s", self.doc.name) + frappe.db.sql("delete from `tabCustom Field` where dt = %s", self.doc.name) + frappe.db.sql("delete from `tabCustom Script` where dt = %s", self.doc.name) + frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", self.doc.name) + frappe.db.sql("delete from `tabReport` where ref_doctype=%s", self.doc.name) def before_rename(self, old, new, merge=False): if merge: @@ -110,9 +110,9 @@ class DocType: def after_rename(self, old, new, merge=False): if self.doc.issingle: - frappe.conn.sql("""update tabSingles set doctype=%s where doctype=%s""", (new, old)) + frappe.db.sql("""update tabSingles set doctype=%s where doctype=%s""", (new, old)) else: - frappe.conn.sql("rename table `tab%s` to `tab%s`" % (old, new)) + frappe.db.sql("rename table `tab%s` to `tab%s`" % (old, new)) def export_doc(self): from frappe.modules.export_file import export_to_files @@ -139,7 +139,7 @@ class DocType: if is_submittable is set, add amended_from docfields """ if self.doc.is_submittable: - if not frappe.conn.sql("""select name from tabDocField + if not frappe.db.sql("""select name from tabDocField where fieldname = 'amended_from' and parent = %s""", self.doc.name): new = self.doc.addchild('fields', 'DocField', self.doclist) new.label = 'Amended From' @@ -153,7 +153,7 @@ class DocType: new.idx = self.get_max_idx() + 1 def get_max_idx(self): - max_idx = frappe.conn.sql("""select max(idx) from `tabDocField` where parent = %s""", + max_idx = frappe.db.sql("""select max(idx) from `tabDocField` where parent = %s""", self.doc.name) return max_idx and max_idx[0][0] or 0 @@ -187,7 +187,7 @@ def validate_fields(fields): raise_exception=1) if d.options=="[Select]": return - if d.options != d.parent and not frappe.conn.exists("DocType", d.options): + if d.options != d.parent and not frappe.db.exists("DocType", d.options): frappe.msgprint("""#%(idx)s %(label)s: Options %(options)s must be a valid "DocType" for Link and Table type fields""" % d.fields, raise_exception=1) @@ -231,7 +231,7 @@ def validate_permissions(permissions, for_remove=False): doctype = permissions and permissions[0].parent issingle = issubmittable = isimportable = False if doctype and not doctype.startswith("New DocType"): - values = frappe.conn.get_value("DocType", doctype, + values = frappe.db.get_value("DocType", doctype, ["issingle", "is_submittable", "allow_import"], as_dict=True) issingle = cint(values.issingle) issubmittable = cint(values.is_submittable) @@ -329,7 +329,7 @@ def validate_permissions(permissions, for_remove=False): def make_module_and_roles(doclist, perm_doctype="DocPerm"): try: - if not frappe.conn.exists("Module Def", doclist[0].module): + if not frappe.db.exists("Module Def", doclist[0].module): m = frappe.bean({"doctype": "Module Def", "module_name": doclist[0].module}) m.insert() @@ -337,7 +337,7 @@ def make_module_and_roles(doclist, perm_doctype="DocPerm"): roles = [p.role for p in doclist.get({"doctype": perm_doctype})] + default_roles for role in list(set(roles)): - if not frappe.conn.exists("Role", role): + if not frappe.db.exists("Role", role): r = frappe.bean({"doctype": "Role", "role_name": role}) r.doc.role_name = role r.insert() diff --git a/frappe/core/doctype/event/event.py b/frappe/core/doctype/event/event.py index 1ba6d21326..bc4e13f827 100644 --- a/frappe/core/doctype/event/event.py +++ b/frappe/core/doctype/event/event.py @@ -49,7 +49,7 @@ def has_permission(doc): def send_event_digest(): today = nowdate() - for user in frappe.conn.sql("""select name, email, language + for user in frappe.db.sql("""select name, email, language from tabProfile where ifnull(enabled,0)=1 and user_type='System User' and name not in ('Guest', 'Administrator')""", as_dict=1): events = get_events(today, today, user.name, for_reminder=True) @@ -75,7 +75,7 @@ def get_events(start, end, user=None, for_reminder=False): if not user: user = frappe.session.user roles = frappe.get_roles(user) - events = frappe.conn.sql("""select name, subject, description, + events = frappe.db.sql("""select name, subject, description, starts_on, ends_on, owner, all_day, event_type, repeat_this_event, repeat_on, monday, tuesday, wednesday, thursday, friday, saturday, sunday from tabEvent where (( diff --git a/frappe/core/doctype/event/test_event.py b/frappe/core/doctype/event/test_event.py index d3f3cc852d..f99efae18a 100644 --- a/frappe/core/doctype/event/test_event.py +++ b/frappe/core/doctype/event/test_event.py @@ -43,17 +43,17 @@ class TestEvent(unittest.TestCase): def test_allowed_public(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.conn.get_value("Event", {"subject":"_Test Event 1"})) + doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 1"})) self.assertTrue(frappe.has_permission("Event", refdoc=doc)) def test_not_allowed_private(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.conn.get_value("Event", {"subject":"_Test Event 2"})) + doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 2"})) self.assertFalse(frappe.has_permission("Event", refdoc=doc)) def test_allowed_private_if_in_event_user(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.conn.get_value("Event", {"subject":"_Test Event 3"})) + doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 3"})) self.assertTrue(frappe.has_permission("Event", refdoc=doc)) def test_event_list(self): diff --git a/frappe/core/doctype/file_data/file_data.py b/frappe/core/doctype/file_data/file_data.py index 08c0ead77b..11968afa03 100644 --- a/frappe/core/doctype/file_data/file_data.py +++ b/frappe/core/doctype/file_data/file_data.py @@ -20,7 +20,7 @@ class DocType(): def on_update(self): # check duplicate assignement - n_records = frappe.conn.sql("""select name from `tabFile Data` + n_records = frappe.db.sql("""select name from `tabFile Data` where file_name=%s and name!=%s and attached_to_doctype=%s @@ -29,7 +29,7 @@ class DocType(): if len(n_records) > 0: self.doc.duplicate_entry = n_records[0][0] frappe.msgprint(frappe._("Same file has already been attached to the record")) - frappe.conn.rollback() + frappe.db.rollback() raise frappe.DuplicateEntryError def on_trash(self): @@ -44,7 +44,7 @@ class DocType(): pass # if file not attached to any other record, delete it - if self.doc.file_name and not frappe.conn.count("File Data", + if self.doc.file_name and not frappe.db.count("File Data", {"file_name": self.doc.file_name, "name": ["!=", self.doc.name]}): if self.doc.file_name.startswith("files/"): path = frappe.utils.get_site_path("public", self.doc.file_name) diff --git a/frappe/core/doctype/letter_head/letter_head.py b/frappe/core/doctype/letter_head/letter_head.py index 1d0dd603ae..9e1c0a6f32 100755 --- a/frappe/core/doctype/letter_head/letter_head.py +++ b/frappe/core/doctype/letter_head/letter_head.py @@ -19,12 +19,12 @@ class DocType: def set_as_default(self): from frappe.utils import set_default if not self.doc.is_default: - if not frappe.conn.sql("""select count(*) from `tabLetter Head` where ifnull(is_default,0)=1"""): + if not frappe.db.sql("""select count(*) from `tabLetter Head` where ifnull(is_default,0)=1"""): self.doc.is_default = 1 if self.doc.is_default: - frappe.conn.sql("update `tabLetter Head` set is_default=0 where name != %s", + frappe.db.sql("update `tabLetter Head` set is_default=0 where name != %s", self.doc.name) set_default('letter_head', self.doc.name) # update control panel - so it loads new letter directly - frappe.conn.set_value('Control Panel', None, 'letter_head', self.doc.content) \ No newline at end of file + frappe.db.set_value('Control Panel', None, 'letter_head', self.doc.content) \ No newline at end of file diff --git a/frappe/core/doctype/notification_count/notification_count.py b/frappe/core/doctype/notification_count/notification_count.py index f6b0a599e4..21d81c4247 100644 --- a/frappe/core/doctype/notification_count/notification_count.py +++ b/frappe/core/doctype/notification_count/notification_count.py @@ -17,7 +17,7 @@ def get_notifications(): open_count_doctype = {} open_count_module = {} - notification_count = dict(frappe.conn.sql("""select for_doctype, open_count + notification_count = dict(frappe.db.sql("""select for_doctype, open_count from `tabNotification Count` where owner=%s""", (frappe.session.user,))) for d in config.for_doctype: @@ -51,7 +51,7 @@ def get_notifications(): def delete_notification_count_for(doctype): if frappe.flags.in_import: return - frappe.conn.sql("""delete from `tabNotification Count` where for_doctype = %s""", (doctype,)) + frappe.db.sql("""delete from `tabNotification Count` where for_doctype = %s""", (doctype,)) def delete_event_notification_count(): delete_notification_count_for("Event") @@ -78,7 +78,7 @@ def get_notification_info_for_boot(): can_read = frappe.user.get_can_read() conditions = {} module_doctypes = {} - doctype_info = dict(frappe.conn.sql("""select name, module from tabDocType""")) + doctype_info = dict(frappe.db.sql("""select name, module from tabDocType""")) for d in list(set(can_read + config.for_doctype.keys())): if d in config.for_doctype: @@ -104,9 +104,9 @@ def get_notification_config(): return config def on_doctype_update(): - if not frappe.conn.sql("""show index from `tabNotification Count` + if not frappe.db.sql("""show index from `tabNotification Count` where Key_name="notification_count_owner_index" """): - frappe.conn.commit() - frappe.conn.sql("""alter table `tabNotification Count` + frappe.db.commit() + frappe.db.sql("""alter table `tabNotification Count` add index notification_count_owner_index(owner)""") diff --git a/frappe/core/doctype/page/page.py b/frappe/core/doctype/page/page.py index 8c2a233c1d..3bb1cc587e 100644 --- a/frappe/core/doctype/page/page.py +++ b/frappe/core/doctype/page/page.py @@ -18,8 +18,8 @@ class DocType: if (self.doc.name and self.doc.name.startswith('New Page')) or not self.doc.name: self.doc.name = self.doc.page_name.lower().replace('"','').replace("'",'').\ replace(' ', '-')[:20] - if frappe.conn.exists('Page',self.doc.name): - cnt = frappe.conn.sql("""select name from tabPage + if frappe.db.exists('Page',self.doc.name): + cnt = frappe.db.sql("""select name from tabPage where name like "%s-%%" order by name desc limit 1""" % self.doc.name) if cnt: cnt = cint(cnt[0][0].split('-')[-1]) + 1 diff --git a/frappe/core/doctype/print_format/print_format.py b/frappe/core/doctype/print_format/print_format.py index 2efdeda172..637adb3d11 100644 --- a/frappe/core/doctype/print_format/print_format.py +++ b/frappe/core/doctype/print_format/print_format.py @@ -17,7 +17,7 @@ class DocType: frappe.msgprint("Standard Print Format cannot be updated.", raise_exception=1) # old_doc_type is required for clearing item cache - self.old_doc_type = frappe.conn.get_value('Print Format', + self.old_doc_type = frappe.db.get_value('Print Format', self.doc.name, 'doc_type') def on_update(self): @@ -90,13 +90,13 @@ def get_print_format_name(doctype, format_name): return format_name # server, find template - path = os.path.join(get_doc_path(frappe.conn.get_value("DocType", doctype, "module"), + path = os.path.join(get_doc_path(frappe.db.get_value("DocType", doctype, "module"), "Print Format", format_name), format_name + ".html") if os.path.exists(path): with open(path, "r") as pffile: return pffile.read() else: - html = frappe.conn.get_value("Print Format", format_name, "html") + html = frappe.db.get_value("Print Format", format_name, "html") if html: return html else: @@ -104,7 +104,7 @@ def get_print_format_name(doctype, format_name): def get_print_style(style=None): if not style: - style = frappe.conn.get_default("print_style") or "Standard" + style = frappe.db.get_default("print_style") or "Standard" path = os.path.join(get_doc_path("Core", "DocType", "Print Format"), "styles", style.lower() + ".css") if not os.path.exists(path): diff --git a/frappe/core/doctype/profile/profile.py b/frappe/core/doctype/profile/profile.py index bf480bbf0c..daba515c09 100644 --- a/frappe/core/doctype/profile/profile.py +++ b/frappe/core/doctype/profile/profile.py @@ -18,7 +18,7 @@ class DocType: self.doc.email = self.doc.email.strip() self.doc.name = self.doc.email - if frappe.conn.exists("Profile", self.doc.name): + if frappe.db.exists("Profile", self.doc.name): throw(_("Name Exists")) def validate(self): @@ -67,7 +67,7 @@ class DocType: if 'max_users' in conf and self.doc.enabled and \ self.doc.name not in ["Administrator", "Guest"] and \ cstr(self.doc.user_type).strip() in ("", "System User"): - active_users = frappe.conn.sql("""select count(*) from tabProfile + active_users = frappe.db.sql("""select count(*) from tabProfile where ifnull(enabled, 0)=1 and docstatus<2 and ifnull(user_type, "System User") = "System User" and name not in ('Administrator', 'Guest', %s)""", (self.doc.name,))[0][0] @@ -104,7 +104,7 @@ class DocType: def on_update(self): # owner is always name - frappe.conn.set(self.doc, 'owner', self.doc.name) + frappe.db.set(self.doc, 'owner', self.doc.name) frappe.clear_cache(user=self.doc.name) def update_gravatar(self): @@ -120,11 +120,11 @@ class DocType: from frappe.utils import random_string, get_url key = random_string(32) - frappe.conn.set_value("Profile", self.doc.name, "reset_password_key", key) + frappe.db.set_value("Profile", self.doc.name, "reset_password_key", key) self.password_reset_mail(get_url("/update-password?key=" + key)) def get_other_system_managers(self): - return frappe.conn.sql("""select distinct parent from tabUserRole user_role + return frappe.db.sql("""select distinct parent from tabUserRole user_role where role='System Manager' and docstatus<2 and parent not in ('Administrator', %s) and exists (select * from `tabProfile` profile @@ -155,7 +155,7 @@ class DocType: from frappe.utils import get_url mail_titles = frappe.get_hooks().get("login_mail_title", []) - title = frappe.conn.get_default('company') or (mail_titles and mail_titles[0]) or "" + title = frappe.db.get_default('company') or (mail_titles and mail_titles[0]) or "" full_name = get_user_fullname(frappe.session['user']) if full_name == "Guest": @@ -196,20 +196,20 @@ class DocType: frappe.local.login_manager.logout(user=self.doc.name) # delete their password - frappe.conn.sql("""delete from __Auth where user=%s""", (self.doc.name,)) + frappe.db.sql("""delete from __Auth where user=%s""", (self.doc.name,)) # delete todos - frappe.conn.sql("""delete from `tabToDo` where owner=%s""", (self.doc.name,)) - frappe.conn.sql("""update tabToDo set assigned_by=null where assigned_by=%s""", + frappe.db.sql("""delete from `tabToDo` where owner=%s""", (self.doc.name,)) + frappe.db.sql("""update tabToDo set assigned_by=null where assigned_by=%s""", (self.doc.name,)) # delete events - frappe.conn.sql("""delete from `tabEvent` where owner=%s + frappe.db.sql("""delete from `tabEvent` where owner=%s and event_type='Private'""", (self.doc.name,)) - frappe.conn.sql("""delete from `tabEvent User` where person=%s""", (self.doc.name,)) + frappe.db.sql("""delete from `tabEvent User` where person=%s""", (self.doc.name,)) # delete messages - frappe.conn.sql("""delete from `tabComment` where comment_doctype='Message' + frappe.db.sql("""delete from `tabComment` where comment_doctype='Message' and (comment_docname=%s or owner=%s)""", (self.doc.name, self.doc.name)) def before_rename(self, olddn, newdn, merge=False): @@ -237,27 +237,27 @@ class DocType: })) def after_rename(self, olddn, newdn, merge=False): - tables = frappe.conn.sql("show tables") + tables = frappe.db.sql("show tables") for tab in tables: - desc = frappe.conn.sql("desc `%s`" % tab[0], as_dict=1) + desc = frappe.db.sql("desc `%s`" % tab[0], as_dict=1) has_fields = [] for d in desc: if d.get('Field') in ['owner', 'modified_by']: has_fields.append(d.get('Field')) for field in has_fields: - frappe.conn.sql("""\ + frappe.db.sql("""\ update `%s` set `%s`=%s where `%s`=%s""" % \ (tab[0], field, '%s', field, '%s'), (newdn, olddn)) # set email - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabProfile` set email=%s where name=%s""", (newdn, newdn)) # update __Auth table if not merge: - frappe.conn.sql("""update __Auth set user=%s where user=%s""", (newdn, olddn)) + frappe.db.sql("""update __Auth set user=%s where user=%s""", (newdn, olddn)) def add_roles(self, *roles): for role in roles: @@ -281,7 +281,7 @@ def get_languages(): @frappe.whitelist() def get_all_roles(arg=None): """return all roles""" - return [r[0] for r in frappe.conn.sql("""select name from tabRole + return [r[0] for r in frappe.db.sql("""select name from tabRole where name not in ('Administrator', 'Guest', 'All') order by name""")] @frappe.whitelist() @@ -292,7 +292,7 @@ def get_user_roles(arg=None): @frappe.whitelist() def get_perm_info(arg=None): """get permission info""" - return frappe.conn.sql("""select parent, permlevel, `read`, `write`, submit, + return frappe.db.sql("""select parent, permlevel, `read`, `write`, submit, cancel, amend from tabDocPerm where role=%s and docstatus<2 order by parent, permlevel""", (frappe.form_dict['role'],), as_dict=1) @@ -301,18 +301,18 @@ def get_perm_info(arg=None): def update_password(new_password, key=None, old_password=None): # verify old password if key: - user = frappe.conn.get_value("Profile", {"reset_password_key":key}) + user = frappe.db.get_value("Profile", {"reset_password_key":key}) if not user: return _("Cannot Update: Incorrect / Expired Link.") elif old_password: user = frappe.session.user - if not frappe.conn.sql("""select user from __Auth where password=password(%s) + if not frappe.db.sql("""select user from __Auth where password=password(%s) and user=%s""", (old_password, user)): return _("Cannot Update: Incorrect Password") _update_password(user, new_password) - frappe.conn.set_value("Profile", user, "reset_password_key", "") + frappe.db.set_value("Profile", user, "reset_password_key", "") frappe.local.login_manager.logout() @@ -320,14 +320,14 @@ def update_password(new_password, key=None, old_password=None): @frappe.whitelist(allow_guest=True) def sign_up(email, full_name): - profile = frappe.conn.get("Profile", {"email": email}) + profile = frappe.db.get("Profile", {"email": email}) if profile: if profile.disabled: return _("Registered but disabled.") else: return _("Already Registered") else: - if frappe.conn.sql("""select count(*) from tabProfile where + if frappe.db.sql("""select count(*) from tabProfile where TIMEDIFF(%s, modified) > '1:00:00' """, now())[0][0] > 200: raise Exception, "Too Many New Profiles" from frappe.utils import random_string @@ -349,7 +349,7 @@ def reset_password(user): if user in ["demo@erpnext.com", "Administrator"]: return "Not allowed" - if frappe.conn.sql("""select name from tabProfile where name=%s""", (user,)): + if frappe.db.sql("""select name from tabProfile where name=%s""", (user,)): # Hack! frappe.session["user"] = "Administrator" profile = frappe.bean("Profile", user) @@ -371,7 +371,7 @@ def facebook_login(data): # garbage raise frappe.ValidationError - if not frappe.conn.exists("Profile", user): + if not frappe.db.exists("Profile", user): if data.get("birthday"): b = data.get("birthday").split("/") data["birthday"] = b[2] + "-" + b[0] + "-" + b[1] @@ -407,7 +407,7 @@ def get_fb_userid(fb_access_token): def profile_query(doctype, txt, searchfield, start, page_len, filters): from frappe.widgets.reportview import get_match_cond - return frappe.conn.sql("""select name, concat_ws(' ', first_name, middle_name, last_name) + return frappe.db.sql("""select name, concat_ws(' ', first_name, middle_name, last_name) from `tabProfile` where ifnull(enabled, 0)=1 and docstatus < 2 @@ -426,25 +426,25 @@ def profile_query(doctype, txt, searchfield, start, page_len, filters): def get_total_users(): """Returns total no. of system users""" - return frappe.conn.sql("""select count(*) from `tabProfile` + return frappe.db.sql("""select count(*) from `tabProfile` where enabled = 1 and user_type != 'Website User' and name not in ('Administrator', 'Guest')""")[0][0] def get_active_users(): """Returns No. of system users who logged in, in the last 3 days""" - return frappe.conn.sql("""select count(*) from `tabProfile` + return frappe.db.sql("""select count(*) from `tabProfile` where enabled = 1 and user_type != 'Website User' and name not in ('Administrator', 'Guest') and hour(timediff(now(), last_login)) < 72""")[0][0] def get_website_users(): """Returns total no. of website users""" - return frappe.conn.sql("""select count(*) from `tabProfile` + return frappe.db.sql("""select count(*) from `tabProfile` where enabled = 1 and user_type = 'Website User'""")[0][0] def get_active_website_users(): """Returns No. of website users who logged in, in the last 3 days""" - return frappe.conn.sql("""select count(*) from `tabProfile` + return frappe.db.sql("""select count(*) from `tabProfile` where enabled = 1 and user_type = 'Website User' and hour(timediff(now(), last_login)) < 72""")[0][0] diff --git a/frappe/core/doctype/profile/test_profile.py b/frappe/core/doctype/profile/test_profile.py index 94703ff4e7..c3bbc69602 100644 --- a/frappe/core/doctype/profile/test_profile.py +++ b/frappe/core/doctype/profile/test_profile.py @@ -8,7 +8,7 @@ from frappe.model.delete_doc import delete_doc, LinkExistsError class TestProfile(unittest.TestCase): def test_delete(self): self.assertRaises(LinkExistsError, delete_doc, "Role", "_Test Role 2") - frappe.conn.sql("""delete from tabUserRole where role='_Test Role 2'""") + frappe.db.sql("""delete from tabUserRole where role='_Test Role 2'""") delete_doc("Role","_Test Role 2") profile = frappe.bean(copy=test_records[1]) @@ -19,33 +19,33 @@ class TestProfile(unittest.TestCase): delete_doc("Profile", "_test@example.com") - self.assertTrue(not frappe.conn.sql("""select * from `tabToDo` where owner=%s""", + self.assertTrue(not frappe.db.sql("""select * from `tabToDo` where owner=%s""", ("_test@example.com",))) from frappe.core.doctype.role.test_role import test_records as role_records frappe.bean(copy=role_records[1]).insert() def test_get_value(self): - self.assertEquals(frappe.conn.get_value("Profile", "test@example.com"), "test@example.com") - self.assertEquals(frappe.conn.get_value("Profile", {"email":"test@example.com"}), "test@example.com") - self.assertEquals(frappe.conn.get_value("Profile", {"email":"test@example.com"}, "email"), "test@example.com") - self.assertEquals(frappe.conn.get_value("Profile", {"email":"test@example.com"}, ["first_name", "email"]), + self.assertEquals(frappe.db.get_value("Profile", "test@example.com"), "test@example.com") + self.assertEquals(frappe.db.get_value("Profile", {"email":"test@example.com"}), "test@example.com") + self.assertEquals(frappe.db.get_value("Profile", {"email":"test@example.com"}, "email"), "test@example.com") + self.assertEquals(frappe.db.get_value("Profile", {"email":"test@example.com"}, ["first_name", "email"]), ("_Test", "test@example.com")) - self.assertEquals(frappe.conn.get_value("Profile", + self.assertEquals(frappe.db.get_value("Profile", {"email":"test@example.com", "first_name": "_Test"}, ["first_name", "email"]), ("_Test", "test@example.com")) - test_profile = frappe.conn.sql("select * from tabProfile where name='test@example.com'", + test_profile = frappe.db.sql("select * from tabProfile where name='test@example.com'", as_dict=True)[0] - self.assertEquals(frappe.conn.get_value("Profile", {"email":"test@example.com"}, "*", as_dict=True), + self.assertEquals(frappe.db.get_value("Profile", {"email":"test@example.com"}, "*", as_dict=True), test_profile) - self.assertEquals(frappe.conn.get_value("Profile", "xxxtest@example.com"), None) + self.assertEquals(frappe.db.get_value("Profile", "xxxtest@example.com"), None) - frappe.conn.set_value("Control Panel", "Control Panel", "_test", "_test_val") - self.assertEquals(frappe.conn.get_value("Control Panel", None, "_test"), "_test_val") - self.assertEquals(frappe.conn.get_value("Control Panel", "Control Panel", "_test"), "_test_val") + frappe.db.set_value("Control Panel", "Control Panel", "_test", "_test_val") + self.assertEquals(frappe.db.get_value("Control Panel", None, "_test"), "_test_val") + self.assertEquals(frappe.db.get_value("Control Panel", "Control Panel", "_test"), "_test_val") def test_doclist(self): p_meta = frappe.get_doctype("Profile") diff --git a/frappe/core/doctype/property_setter/property_setter.py b/frappe/core/doctype/property_setter/property_setter.py index 32ce179f7c..9e19f63ec5 100644 --- a/frappe/core/doctype/property_setter/property_setter.py +++ b/frappe/core/doctype/property_setter/property_setter.py @@ -16,7 +16,7 @@ class DocType: def validate(self): """delete other property setters on this, if this is new""" if self.doc.fields['__islocal']: - frappe.conn.sql("""delete from `tabProperty Setter` where + frappe.db.sql("""delete from `tabProperty Setter` where doctype_or_field = %(doctype_or_field)s and doc_type = %(doc_type)s and ifnull(field_name,'') = ifnull(%(field_name)s, '') @@ -26,7 +26,7 @@ class DocType: frappe.clear_cache(doctype = self.doc.doc_type) def get_property_list(self, dt): - return frappe.conn.sql("""select fieldname, label, fieldtype + return frappe.db.sql("""select fieldname, label, fieldtype from tabDocField where parent=%s and fieldtype not in ('Section Break', 'Column Break', 'HTML', 'Read Only', 'Table') @@ -35,19 +35,19 @@ class DocType: def get_setup_data(self): return { - 'doctypes': [d[0] for d in frappe.conn.sql("select name from tabDocType")], + 'doctypes': [d[0] for d in frappe.db.sql("select name from tabDocType")], 'dt_properties': self.get_property_list('DocType'), 'df_properties': self.get_property_list('DocField') } def get_field_ids(self): - return frappe.conn.sql("select name, fieldtype, label, fieldname from tabDocField where parent=%s", self.doc.doc_type, as_dict = 1) + return frappe.db.sql("select name, fieldtype, label, fieldname from tabDocField where parent=%s", self.doc.doc_type, as_dict = 1) def get_defaults(self): if not self.doc.field_name: - return frappe.conn.sql("select * from `tabDocType` where name=%s", self.doc.doc_type, as_dict = 1)[0] + return frappe.db.sql("select * from `tabDocType` where name=%s", self.doc.doc_type, as_dict = 1)[0] else: - return frappe.conn.sql("select * from `tabDocField` where fieldname=%s and parent=%s", + return frappe.db.sql("select * from `tabDocField` where fieldname=%s and parent=%s", (self.doc.field_name, self.doc.doc_type), as_dict = 1)[0] def on_update(self): diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 80f5d61345..0580796170 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -32,4 +32,4 @@ class DocType: from frappe.modules.export_file import export_to_files if self.doc.is_standard == 'Yes' and (conf.get('developer_mode') or 0) == 1: export_to_files(record_list=[['Report', self.doc.name]], - record_module=frappe.conn.get_value("DocType", self.doc.ref_doctype, "module")) + record_module=frappe.db.get_value("DocType", self.doc.ref_doctype, "module")) diff --git a/frappe/core/doctype/todo/todo.py b/frappe/core/doctype/todo/todo.py index bd9d52fcab..2203546c0a 100644 --- a/frappe/core/doctype/todo/todo.py +++ b/frappe/core/doctype/todo/todo.py @@ -12,7 +12,7 @@ class DocType: if self.doc.is_new(): self.add_comment(frappe._("Assignment Added")) else: - cur_status = frappe.conn.get_value("ToDo", self.doc.name, "status") + cur_status = frappe.db.get_value("ToDo", self.doc.name, "status") if cur_status != self.doc.status: self.add_comment(frappe._("Assignment Status Changed")) diff --git a/frappe/core/doctype/userrole/userrole.py b/frappe/core/doctype/userrole/userrole.py index a5fde5c1bf..20f5e77cce 100644 --- a/frappe/core/doctype/userrole/userrole.py +++ b/frappe/core/doctype/userrole/userrole.py @@ -10,7 +10,7 @@ class DocType: self.doc, self.doclist = d, dl def validate(self): - if cint(self.doc.fields.get("__islocal")) and frappe.conn.exists("UserRole", { + if cint(self.doc.fields.get("__islocal")) and frappe.db.exists("UserRole", { "parent": self.doc.parent, "role": self.doc.role}): frappe.msgprint("Role Already Exists", raise_exception=True) \ No newline at end of file diff --git a/frappe/core/doctype/version/version.py b/frappe/core/doctype/version/version.py index 3860de2351..edb6e2e185 100644 --- a/frappe/core/doctype/version/version.py +++ b/frappe/core/doctype/version/version.py @@ -24,7 +24,7 @@ def restore(version): for d in doclist[1:]: d["parent"] = version.docname - doclist[0]["modified"] = frappe.conn.get_value(version.ref_doctype, version.docname, "modified") + doclist[0]["modified"] = frappe.db.get_value(version.ref_doctype, version.docname, "modified") # overwrite frappe.bean(doclist).save() \ No newline at end of file diff --git a/frappe/core/doctype/workflow/workflow.py b/frappe/core/doctype/workflow/workflow.py index e2bc515032..9550d667d8 100644 --- a/frappe/core/doctype/workflow/workflow.py +++ b/frappe/core/doctype/workflow/workflow.py @@ -44,7 +44,7 @@ class DocType: states.sort(lambda x, y: x.idx - y.idx) for d in self.doclist.get({"doctype": "Workflow Document State"}): if not d.doc_status in docstatus_map: - frappe.conn.sql("""update `tab%s` set `%s` = %s where \ + frappe.db.sql("""update `tab%s` set `%s` = %s where \ ifnull(`%s`, '')='' and docstatus=%s""" % (self.doc.document_type, self.doc.workflow_state_field, '%s', self.doc.workflow_state_field, "%s"), (d.state, d.doc_status)) docstatus_map[d.doc_status] = d.state @@ -52,6 +52,6 @@ class DocType: def set_active(self): if int(self.doc.is_active or 0): # clear all other - frappe.conn.sql("""update tabWorkflow set is_active=0 + frappe.db.sql("""update tabWorkflow set is_active=0 where document_type=%s""", self.doc.document_type) diff --git a/frappe/core/notifications.py b/frappe/core/notifications.py index 2c01009a63..9a8c236555 100644 --- a/frappe/core/notifications.py +++ b/frappe/core/notifications.py @@ -20,7 +20,7 @@ def get_notification_config(): def get_things_todo(): """Returns a count of incomplete todos""" - incomplete_todos = frappe.conn.sql("""\ + incomplete_todos = frappe.db.sql("""\ SELECT COUNT(*) FROM `tabToDo` WHERE status="Open" AND (owner = %s or assigned_by=%s)""", (frappe.session.user, frappe.session.user)) @@ -35,7 +35,7 @@ def get_todays_events(): def get_unread_messages(): "returns unread (docstatus-0 messages for a user)" - return frappe.conn.sql("""\ + return frappe.db.sql("""\ SELECT count(*) FROM `tabComment` WHERE comment_doctype IN ('My Company', 'Message') diff --git a/frappe/core/page/data_import_tool/data_import_tool.py b/frappe/core/page/data_import_tool/data_import_tool.py index 6483f44db5..f6f00fb1d1 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.py +++ b/frappe/core/page/data_import_tool/data_import_tool.py @@ -23,7 +23,7 @@ data_keys = frappe._dict({ @frappe.whitelist() def get_doctypes(): if "System Manager" in frappe.get_roles(): - return [r[0] for r in frappe.conn.sql("""select name from `tabDocType` + return [r[0] for r in frappe.db.sql("""select name from `tabDocType` where allow_import = 1""")] else: return frappe.user._get("can_import") @@ -77,7 +77,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data doctype_dl = frappe.model.doctype.get(dt) tablecolumns = filter(None, - [doctype_dl.get_field(f[0]) for f in frappe.conn.sql('desc `tab%s`' % dt)]) + [doctype_dl.get_field(f[0]) for f in frappe.db.sql('desc `tab%s`' % dt)]) tablecolumns.sort(lambda a, b: a.idx - b.idx) @@ -184,7 +184,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data if all_doctypes: # add child tables for child_doctype in child_doctypes: - for ci, child in enumerate(frappe.conn.sql("""select * from `tab%s` + for ci, child in enumerate(frappe.db.sql("""select * from `tab%s` where parent=%s order by idx""" % (child_doctype, "%s"), doc.name, as_dict=1)): add_data_row(row_group, child_doctype, child, ci) @@ -351,7 +351,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, column_idx_to_fieldname = {} column_idx_to_fieldtype = {} - if submit_after_import and not cint(frappe.conn.get_value("DocType", + if submit_after_import and not cint(frappe.db.get_value("DocType", doctype, "is_submittable")): submit_after_import = False @@ -370,7 +370,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, check_data_length() make_column_map() - frappe.conn.begin() + frappe.db.begin() if not overwrite: overwrite = params.get('overwrite') doctype_dl = frappe.model.doctype.get(doctype) @@ -398,7 +398,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, # ignoring parent check as it will be automatically added check_record(d, None, doctype_dl) - if overwrite and frappe.conn.exists(doctype, doclist[0]["name"]): + if overwrite and frappe.db.exists(doctype, doclist[0]["name"]): bean = frappe.bean(doctype, doclist[0]["name"]) bean.ignore_links = ignore_links bean.doclist.update(doclist) @@ -441,9 +441,9 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, ret, error = validate_parent(parent_list, parenttype, ret, error) if error: - frappe.conn.rollback() + frappe.db.rollback() else: - frappe.conn.commit() + frappe.db.commit() frappe.flags.mute_emails = False @@ -484,7 +484,7 @@ def get_parent_field(doctype, parenttype): def delete_child_rows(rows, doctype): """delete child rows for all parents""" for p in list(set([r[1] for r in rows])): - frappe.conn.sql("""delete from `tab%s` where parent=%s""" % (doctype, '%s'), p) + frappe.db.sql("""delete from `tab%s` where parent=%s""" % (doctype, '%s'), p) import csv def import_file_by_path(path, ignore_links=False, overwrite=False): @@ -551,7 +551,7 @@ def import_doclist(path, overwrite=False, ignore_links=False, ignore_insert=Fals _import_doclist(doc) else: _import_doclist(data) - frappe.conn.commit() + frappe.db.commit() if f.endswith(".csv"): import_file_by_path(f, ignore_links=True, overwrite=overwrite) - frappe.conn.commit() \ No newline at end of file + frappe.db.commit() diff --git a/frappe/core/page/messages/messages.py b/frappe/core/page/messages/messages.py index f31f6050f6..ffb0d4c96e 100644 --- a/frappe/core/page/messages/messages.py +++ b/frappe/core/page/messages/messages.py @@ -14,19 +14,19 @@ def get_list(arg=None): frappe.form_dict['user'] = frappe.session['user'] # set all messages as read - frappe.conn.begin() - frappe.conn.sql("""UPDATE `tabComment` + frappe.db.begin() + frappe.db.sql("""UPDATE `tabComment` set docstatus = 1 where comment_doctype in ('My Company', 'Message') and comment_docname = %s """, frappe.user.name) delete_notification_count_for("Messages") - frappe.conn.commit() + frappe.db.commit() if frappe.form_dict['contact'] == frappe.session['user']: # return messages - return frappe.conn.sql("""select * from `tabComment` + return frappe.db.sql("""select * from `tabComment` where (owner=%(contact)s or comment_docname=%(user)s or (owner=comment_docname and ifnull(parenttype, "")!="Assignment")) @@ -34,7 +34,7 @@ def get_list(arg=None): order by creation desc limit %(limit_start)s, %(limit_page_length)s""", frappe.local.form_dict, as_dict=1) else: - return frappe.conn.sql("""select * from `tabComment` + return frappe.db.sql("""select * from `tabComment` where (owner=%(contact)s and comment_docname=%(user)s) or (owner=%(user)s and comment_docname=%(contact)s) or (owner=%(contact)s and comment_docname=%(contact)s) @@ -45,7 +45,7 @@ def get_list(arg=None): @frappe.whitelist() def get_active_users(arg=None): - return frappe.conn.sql("""select name, + return frappe.db.sql("""select name, (select count(*) from tabSessions where user=tabProfile.name and timediff(now(), lastupdate) < time("01:00:00")) as has_session from tabProfile @@ -83,15 +83,15 @@ def post(arg=None): @frappe.whitelist() def delete(arg=None): - frappe.conn.sql("""delete from `tabComment` where name=%s""", + frappe.db.sql("""delete from `tabComment` where name=%s""", frappe.form_dict['name']); def notify(arg=None): from frappe.utils import cstr, get_fullname, get_url frappe.sendmail(\ - recipients=[frappe.conn.get_value("Profile", arg["contact"], "email") or arg["contact"]], - sender= frappe.conn.get_value("Profile", frappe.session.user, "email"), + recipients=[frappe.db.get_value("Profile", arg["contact"], "email") or arg["contact"]], + sender= frappe.db.get_value("Profile", frappe.session.user, "email"), subject="New Message from " + get_fullname(frappe.user.name), message=frappe.get_template("templates/emails/new_message.html").render({ "from": get_fullname(frappe.user.name), diff --git a/frappe/core/page/modules_setup/modules_setup.py b/frappe/core/page/modules_setup/modules_setup.py index 1a7c7914ea..dd2aebd9f3 100644 --- a/frappe/core/page/modules_setup/modules_setup.py +++ b/frappe/core/page/modules_setup/modules_setup.py @@ -7,6 +7,6 @@ import frappe @frappe.whitelist() def update(ml): """update modules""" - frappe.conn.set_global('hidden_modules', ml) + frappe.db.set_global('hidden_modules', ml) frappe.msgprint('Updated') frappe.clear_cache() \ No newline at end of file diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py index 0a418bbf92..7ad5b1effe 100644 --- a/frappe/core/page/permission_manager/permission_manager.py +++ b/frappe/core/page/permission_manager/permission_manager.py @@ -10,18 +10,18 @@ from frappe.modules.import_file import get_file_path, read_doclist_from_file def get_roles_and_doctypes(): frappe.only_for("System Manager") return { - "doctypes": [d[0] for d in frappe.conn.sql("""select name from `tabDocType` dt where + "doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where ifnull(istable,0)=0 and name not in ('DocType', 'Control Panel') and exists(select * from `tabDocField` where parent=dt.name)""")], - "roles": [d[0] for d in frappe.conn.sql("""select name from tabRole where name not in + "roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name not in ('Guest', 'Administrator')""")] } @frappe.whitelist() def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") - return frappe.conn.sql("""select * from tabDocPerm + return frappe.db.sql("""select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (\ doctype and (" parent='%s'" % doctype) or "", role and ((doctype and " and " or "") + " role='%s'" % role) or "", @@ -30,7 +30,7 @@ def get_permissions(doctype=None, role=None): @frappe.whitelist() def remove(doctype, name): frappe.only_for("System Manager") - frappe.conn.sql("""delete from tabDocPerm where name=%s""", name) + frappe.db.sql("""delete from tabDocPerm where name=%s""", name) validate_and_reset(doctype, for_remove=True) @frappe.whitelist() @@ -52,7 +52,7 @@ def add(parent, role, permlevel): @frappe.whitelist() def update(name, doctype, ptype, value=0): frappe.only_for("System Manager") - frappe.conn.sql("""update tabDocPerm set `%s`=%s where name=%s"""\ + frappe.db.sql("""update tabDocPerm set `%s`=%s where name=%s"""\ % (ptype, '%s', '%s'), (value, name)) validate_and_reset(doctype) @@ -69,7 +69,7 @@ def reset(doctype): def clear_doctype_cache(doctype): frappe.clear_cache(doctype=doctype) - for user in frappe.conn.sql_list("""select distinct tabUserRole.parent from tabUserRole, tabDocPerm + for user in frappe.db.sql_list("""select distinct tabUserRole.parent from tabUserRole, tabDocPerm where tabDocPerm.parent = %s and tabDocPerm.role = tabUserRole.role""", doctype): frappe.clear_cache(user=user) @@ -77,7 +77,7 @@ def clear_doctype_cache(doctype): @frappe.whitelist() def get_users_with_role(role): frappe.only_for("System Manager") - return [p[0] for p in frappe.conn.sql("""select distinct tabProfile.name + return [p[0] for p in frappe.db.sql("""select distinct tabProfile.name from tabUserRole, tabProfile where tabUserRole.role=%s and tabProfile.name != "Administrator" @@ -86,6 +86,6 @@ def get_users_with_role(role): @frappe.whitelist() def get_standard_permissions(doctype): - module = frappe.conn.get_value("DocType", doctype, "module") + module = frappe.db.get_value("DocType", doctype, "module") path = get_file_path(module, "DocType", doctype) return [d for d in read_doclist_from_file(path) if d.get("doctype")=="DocPerm"] diff --git a/frappe/core/page/user_properties/user_properties.py b/frappe/core/page/user_properties/user_properties.py index f403cafdb3..9b744030d3 100644 --- a/frappe/core/page/user_properties/user_properties.py +++ b/frappe/core/page/user_properties/user_properties.py @@ -9,7 +9,7 @@ import frappe.permissions @frappe.whitelist() def get_users_and_links(): return { - "users": frappe.conn.sql_list("""select name from tabProfile where + "users": frappe.db.sql_list("""select name from tabProfile where ifnull(enabled,0)=1 and name not in ("Administrator", "Guest")"""), "link_fields": get_restrictable_doctypes() @@ -22,7 +22,7 @@ def get_properties(parent=None, defkey=None, defvalue=None): conditions, values = _build_conditions(locals()) - properties = frappe.conn.sql("""select name, parent, defkey, defvalue + properties = frappe.db.sql("""select name, parent, defkey, defvalue from tabDefaultValue where parent not in ('Control Panel', '__global') and substr(defkey,1,1)!='_' @@ -68,7 +68,7 @@ def add(user, defkey, defvalue): user=user, doctype=defkey, name=defvalue)) # check if already exists - d = frappe.conn.sql("""select name from tabDefaultValue + d = frappe.db.sql("""select name from tabDefaultValue where parent=%s and parenttype='Restriction' and defkey=%s and defvalue=%s""", (user, defkey, defvalue)) if not d: @@ -84,6 +84,6 @@ def get_restrictable_doctypes(): and `tabDocPerm`.name in ({roles}))""".format(roles=", ".join(["%s"]*len(user_roles))) values = user_roles - return frappe.conn.sql_list("""select name from tabDocType + return frappe.db.sql_list("""select name from tabDocType where ifnull(issingle,0)=0 and ifnull(istable,0)=0 {condition}""".format(condition=condition), values) diff --git a/frappe/db.py b/frappe/database.py similarity index 96% rename from frappe/db.py rename to frappe/database.py index 04aa7595b8..e63feb995a 100644 --- a/frappe/db.py +++ b/frappe/database.py @@ -14,7 +14,7 @@ class Database: """ Open a database connection with the given parmeters, if use_default is True, use the login details from `conf.py`. This is called by the request handler and is accessible using - the `conn` global variable. the `sql` method is also global to run queries + the `db` global variable. the `sql` method is also global to run queries """ def __init__(self, host=None, user=None, password=None, ac_name=None, use_default = 0): self.host = host or frappe.conf.db_host or 'localhost' @@ -164,7 +164,7 @@ class Database: self.transaction_writes += 1 if not frappe.flags.in_test and self.transaction_writes > 10000: if self.auto_commit_on_many_writes: - frappe.conn.commit() + frappe.db.commit() else: frappe.msgprint('A very long query was encountered. If you are trying to import data, please do so using smaller files') raise Exception, 'Bad Query!!! Too many writes' @@ -402,7 +402,7 @@ class Database: def touch(self, doctype, docname): from frappe.utils import now modified = now() - frappe.conn.sql("""update `tab{doctype}` set `modified`=%s + frappe.db.sql("""update `tab{doctype}` set `modified`=%s where name=%s""".format(doctype=doctype), (modified, docname)) return modified @@ -483,10 +483,10 @@ class Database: def count(self, dt, filters=None, debug=False): if filters: conditions, filters = self.build_conditions(filters) - return frappe.conn.sql("""select count(*) + return frappe.db.sql("""select count(*) from `tab%s` where %s""" % (dt, conditions), filters, debug=debug)[0][0] else: - return frappe.conn.sql("""select count(*) + return frappe.db.sql("""select count(*) from `tab%s`""" % (dt,))[0][0] @@ -495,7 +495,7 @@ class Database: from frappe.utils import now_datetime from dateutil.relativedelta import relativedelta - return frappe.conn.sql("""select count(name) from `tab{doctype}` + return frappe.db.sql("""select count(name) from `tab{doctype}` where creation >= %s""".format(doctype=doctype), now_datetime() - relativedelta(minutes=minutes))[0][0] @@ -505,9 +505,9 @@ class Database: def add_index(self, doctype, fields, index_name=None): if not index_name: index_name = "_".join(fields) + "_index" - if not frappe.conn.sql("""show index from `tab%s` where Key_name="%s" """ % (doctype, index_name)): - frappe.conn.commit() - frappe.conn.sql("""alter table `tab%s` + if not frappe.db.sql("""show index from `tab%s` where Key_name="%s" """ % (doctype, index_name)): + frappe.db.commit() + frappe.db.sql("""alter table `tab%s` add index %s(%s)""" % (doctype, index_name, ", ".join(fields))) def close(self): diff --git a/frappe/defaults.py b/frappe/defaults.py index 421a9744bb..13030baf81 100644 --- a/frappe/defaults.py +++ b/frappe/defaults.py @@ -33,7 +33,7 @@ def get_restrictions(user=None): def build_restrictions(user): out = {} - for key, value in frappe.conn.sql("""select defkey, defvalue + for key, value in frappe.db.sql("""select defkey, defvalue from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)): out.setdefault(key, []) out[key].append(value) @@ -69,10 +69,10 @@ def get_global_default(key): # Common def set_default(key, value, parent, parenttype="Control Panel"): - if frappe.conn.sql("""select defkey from `tabDefaultValue` where + if frappe.db.sql("""select defkey from `tabDefaultValue` where defkey=%s and parent=%s """, (key, parent)): # update - frappe.conn.sql("""update `tabDefaultValue` set defvalue=%s, parenttype=%s + frappe.db.sql("""update `tabDefaultValue` set defvalue=%s, parenttype=%s where parent=%s and defkey=%s""", (value, parenttype, parent, key)) _clear_cache(parent) else: @@ -125,14 +125,14 @@ def clear_default(key=None, value=None, parent=None, name=None, parenttype=None) if not conditions: raise Exception, "[clear_default] No key specified." - frappe.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values) + frappe.db.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values) _clear_cache(parent) def get_defaults_for(parent="Control Panel"): """get all defaults""" defaults = frappe.cache().get_value("__defaults:" + parent) if not defaults: - res = frappe.conn.sql("""select defkey, defvalue from `tabDefaultValue` + res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where parent = %s order by creation""", (parent,), as_dict=1) defaults = frappe._dict({}) @@ -162,6 +162,6 @@ def clear_cache(user=None): if user: to_clear = [user] elif frappe.flags.in_install_app!="frappe": - to_clear = frappe.conn.sql_list("select name from tabProfile") + to_clear = frappe.db.sql_list("select name from tabProfile") for p in to_clear + common_keys: frappe.cache().delete_value("__defaults:" + p) \ No newline at end of file diff --git a/frappe/handler.py b/frappe/handler.py index 686429e175..d694299fb8 100755 --- a/frappe/handler.py +++ b/frappe/handler.py @@ -25,7 +25,7 @@ def logout(): @frappe.whitelist(allow_guest=True) def web_logout(): frappe.local.login_manager.logout() - frappe.conn.commit() + frappe.db.commit() frappe.repsond_as_web_page("Logged Out", """

You have been logged out.

Back to Home

""") @@ -48,7 +48,7 @@ def uploadfile(): except frappe.DuplicateEntryError, e: # ignore pass ret = None - frappe.conn.rollback() + frappe.db.rollback() else: if frappe.form_dict.get('method'): ret = frappe.get_attr(frappe.form_dict.method)() @@ -77,13 +77,13 @@ def handle(): except Exception, e: report_error(status_codes.get(e.__class__, 500)) else: - if frappe.local.request.method in ("POST", "PUT") and frappe.conn: - frappe.conn.commit() + if frappe.local.request.method in ("POST", "PUT") and frappe.db: + frappe.db.commit() build_response() - if frappe.conn: - frappe.conn.close() + if frappe.db: + frappe.db.close() if frappe._memc: frappe._memc.disconnect_all() diff --git a/frappe/installer.py b/frappe/installer.py index 394eee3c5f..d412144a1d 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -8,7 +8,7 @@ from __future__ import unicode_literals import os, sys, json import frappe -import frappe.db +import frappe.database import getpass from frappe.model.db_schema import DbManager @@ -21,11 +21,11 @@ def install_db(root_login="root", root_password=None, db_name=None, source_sql=N make_conf(db_name, site_config=site_config) if reinstall: frappe.connect(db_name=db_name) - dbman = DbManager(frappe.local.conn) + dbman = DbManager(frappe.local.db) dbman.create_database(db_name) else: - frappe.local.conn = make_connection(root_login, root_password) + frappe.local.db = make_connection(root_login, root_password) frappe.local.session = frappe._dict({'user':'Administrator'}) create_database_and_user(force, verbose) @@ -39,7 +39,7 @@ def install_db(root_login="root", root_password=None, db_name=None, source_sql=N def create_database_and_user(force, verbose): db_name = frappe.local.conf.db_name - dbman = DbManager(frappe.local.conn) + dbman = DbManager(frappe.local.db) if force or (db_name not in dbman.get_database_list()): dbman.delete_user(db_name) dbman.drop_database(db_name) @@ -57,10 +57,10 @@ def create_database_and_user(force, verbose): if verbose: print "Granted privileges to user %s and database %s" % (db_name, db_name) # close root connection - frappe.conn.close() + frappe.db.close() def create_auth_table(): - frappe.conn.sql_ddl("""create table if not exists __Auth ( + frappe.db.sql_ddl("""create table if not exists __Auth ( `user` VARCHAR(180) NOT NULL PRIMARY KEY, `password` VARCHAR(180) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8""") @@ -70,7 +70,7 @@ def import_db_from_sql(source_sql, verbose): db_name = frappe.conf.db_name if not source_sql: source_sql = os.path.join(os.path.dirname(frappe.__file__), 'data', 'Framework.sql') - DbManager(frappe.local.conn).restore_database(db_name, source_sql, db_name, frappe.conf.db_password) + DbManager(frappe.local.db).restore_database(db_name, source_sql, db_name, frappe.conf.db_password) if verbose: print "Imported from database %s" % source_sql def make_connection(root_login, root_password): @@ -116,8 +116,8 @@ def add_to_installed_apps(app_name, rebuild_sitemap=True): installed_apps = frappe.get_installed_apps() if not app_name in installed_apps: installed_apps.append(app_name) - frappe.conn.set_global("installed_apps", json.dumps(installed_apps)) - frappe.conn.commit() + frappe.db.set_global("installed_apps", json.dumps(installed_apps)) + frappe.db.commit() if rebuild_sitemap: from frappe.website.doctype.website_template.website_template import rebuild_website_template @@ -133,7 +133,7 @@ def set_all_patches_as_completed(app): "doctype": "Patch Log", "patch": patch }).insert() - frappe.conn.commit() + frappe.db.commit() def make_conf(db_name=None, db_password=None, site_config=None): site = frappe.local.site diff --git a/frappe/model/__init__.py b/frappe/model/__init__.py index a481ee9b04..2c12cf3878 100644 --- a/frappe/model/__init__.py +++ b/frappe/model/__init__.py @@ -46,7 +46,7 @@ def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfie def db_exists(dt, dn): import frappe - return frappe.conn.exists(dt, dn) + return frappe.db.exists(dt, dn) def delete_fields(args_dict, delete=0): """ @@ -62,7 +62,7 @@ def delete_fields(args_dict, delete=0): fields = args_dict[dt] if not fields: continue - frappe.conn.sql("""\ + frappe.db.sql("""\ DELETE FROM `tabDocField` WHERE parent=%s AND fieldname IN (%s) """ % ('%s', ", ".join(['"' + f + '"' for f in fields])), dt) @@ -70,20 +70,20 @@ def delete_fields(args_dict, delete=0): # Delete the data / column only if delete is specified if not delete: continue - is_single = frappe.conn.sql("select issingle from tabDocType where name = '%s'" % dt) + is_single = frappe.db.sql("select issingle from tabDocType where name = '%s'" % dt) is_single = is_single and frappe.utils.cint(is_single[0][0]) or 0 if is_single: - frappe.conn.sql("""\ + frappe.db.sql("""\ DELETE FROM `tabSingles` WHERE doctype=%s AND field IN (%s) """ % ('%s', ", ".join(['"' + f + '"' for f in fields])), dt) else: - existing_fields = frappe.conn.sql("desc `tab%s`" % dt) + existing_fields = frappe.db.sql("desc `tab%s`" % dt) existing_fields = existing_fields and [e[0] for e in existing_fields] or [] query = "ALTER TABLE `tab%s` " % dt + \ ", ".join(["DROP COLUMN `%s`" % f for f in fields if f in existing_fields]) - frappe.conn.commit() - frappe.conn.sql(query) + frappe.db.commit() + frappe.db.sql(query) def rename_field(doctype, old_fieldname, new_fieldname): """This functions assumes that doctype is already synced""" @@ -96,28 +96,28 @@ def rename_field(doctype, old_fieldname, new_fieldname): if new_field.fieldtype == "Table": # change parentfield of table mentioned in options - frappe.conn.sql("""update `tab%s` set parentfield=%s + frappe.db.sql("""update `tab%s` set parentfield=%s where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"), (new_fieldname, old_fieldname)) elif new_field.fieldtype not in no_value_fields: if doctype_list[0].issingle: - frappe.conn.sql("""update `tabSingles` set field=%s + frappe.db.sql("""update `tabSingles` set field=%s where doctype=%s and field=%s""", (new_fieldname, doctype, old_fieldname)) else: # copy field value - frappe.conn.sql("""update `tab%s` set `%s`=`%s`""" % \ + frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \ (doctype, new_fieldname, old_fieldname)) # update in property setter - frappe.conn.sql("""update `tabProperty Setter` set field_name = %s + frappe.db.sql("""update `tabProperty Setter` set field_name = %s where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname)) update_users_report_view_settings(doctype, old_fieldname) def update_users_report_view_settings(doctype, ref_fieldname): import json - user_report_cols = frappe.conn.sql("""select defkey, defvalue from `tabDefaultValue` where + user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where defkey like '_list_settings:%'""") for key, value in user_report_cols: new_columns = [] @@ -127,5 +127,5 @@ def update_users_report_view_settings(doctype, ref_fieldname): new_columns.append([field, field_doctype]) columns_modified=True if columns_modified: - frappe.conn.sql("""update `tabDefaultValue` set defvalue=%s + frappe.db.sql("""update `tabDefaultValue` set defvalue=%s where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key)) \ No newline at end of file diff --git a/frappe/model/bean.py b/frappe/model/bean.py index ee21b91959..e37866b528 100644 --- a/frappe/model/bean.py +++ b/frappe/model/bean.py @@ -37,7 +37,7 @@ class Bean: dn = dt if dt and dn: if isinstance(dn, dict): - dn = frappe.conn.get_value(dt, dn, "name") + dn = frappe.db.get_value(dt, dn, "name") if dn is None: raise frappe.DoesNotExistError @@ -120,13 +120,13 @@ class Bean: conflict = False if not cint(self.doc.fields.get('__islocal')): if is_single(self.doc.doctype): - modified = frappe.conn.get_value(self.doc.doctype, self.doc.name, "modified") + modified = frappe.db.get_value(self.doc.doctype, self.doc.name, "modified") if isinstance(modified, list): modified = modified[0] if cstr(modified) and cstr(modified) != cstr(self.doc.modified): conflict = True else: - tmp = frappe.conn.sql("""select modified, docstatus from `tab%s` + tmp = frappe.db.sql("""select modified, docstatus from `tab%s` where name="%s" for update""" % (self.doc.doctype, self.doc.name), as_dict=True) @@ -265,7 +265,7 @@ class Bean: return self.save() def insert_or_update(self): - if self.doc.name and frappe.conn.exists(self.doc.doctype, self.doc.name): + if self.doc.name and frappe.db.exists(self.doc.doctype, self.doc.name): return self.save() else: return self.insert() @@ -371,7 +371,7 @@ class Bean: frappe.msgprint('%s "%s" already exists' % (self.doc.doctype, self.doc.name)) # prompt if cancelled - if frappe.conn.get_value(self.doc.doctype, self.doc.name, 'docstatus')==2: + if frappe.db.get_value(self.doc.doctype, self.doc.name, 'docstatus')==2: frappe.msgprint('[%s "%s" has been cancelled]' % (self.doc.doctype, self.doc.name)) frappe.errprint(frappe.utils.get_traceback()) raise @@ -396,11 +396,11 @@ class Bean: if dt[0] not in self.ignore_children_type: cnames = child_map.get(dt[0]) or [] if cnames: - frappe.conn.sql("""delete from `tab%s` where parent=%s and parenttype=%s and + frappe.db.sql("""delete from `tab%s` where parent=%s and parenttype=%s and name not in (%s)""" % (dt[0], '%s', '%s', ','.join(['%s'] * len(cnames))), tuple([self.doc.name, self.doc.doctype] + cnames)) else: - frappe.conn.sql("""delete from `tab%s` where parent=%s and parenttype=%s""" \ + frappe.db.sql("""delete from `tab%s` where parent=%s and parenttype=%s""" \ % (dt[0], '%s', '%s'), (self.doc.name, self.doc.doctype)) def delete(self): diff --git a/frappe/model/controller.py b/frappe/model/controller.py index 7c07f39960..a023809fc8 100644 --- a/frappe/model/controller.py +++ b/frappe/model/controller.py @@ -95,7 +95,7 @@ class DocListController(object): if not hasattr(self, "_precision"): self._precision = frappe._dict({ - "default": cint(frappe.conn.get_default("float_precision")) or 3, + "default": cint(frappe.db.get_default("float_precision")) or 3, "options": {} }) diff --git a/frappe/model/create_new.py b/frappe/model/create_new.py index ec8cbc7656..70c80971be 100644 --- a/frappe/model/create_new.py +++ b/frappe/model/create_new.py @@ -48,8 +48,8 @@ def get_new_doc(doctype, parent_doc = None, parentfield = None): if parent_doc: ref_docname = parent_doc.fields[ref_fieldname] else: - ref_docname = frappe.conn.get_default(ref_fieldname) - doc.fields[d.fieldname] = frappe.conn.get_value(d.default[1:], + ref_docname = frappe.db.get_default(ref_fieldname) + doc.fields[d.fieldname] = frappe.db.get_value(d.default[1:], ref_docname, d.fieldname) else: diff --git a/frappe/model/db_schema.py b/frappe/model/db_schema.py index da933ed8fb..e1183f9270 100644 --- a/frappe/model/db_schema.py +++ b/frappe/model/db_schema.py @@ -76,7 +76,7 @@ class DbTable: if t: add_text += ',\n'.join(self.get_index_definitions()) + ',\n' # create table - frappe.conn.sql("""create table `%s` ( + frappe.db.sql("""create table `%s` ( name varchar(120) not null primary key, creation datetime, modified datetime, @@ -95,10 +95,10 @@ class DbTable: """ get columns from docfields and custom fields """ - fl = frappe.conn.sql("SELECT * FROM tabDocField WHERE parent = '%s'" % self.doctype, as_dict = 1) + fl = frappe.db.sql("SELECT * FROM tabDocField WHERE parent = '%s'" % self.doctype, as_dict = 1) try: - custom_fl = frappe.conn.sql("""\ + custom_fl = frappe.db.sql("""\ SELECT * FROM `tabCustom Field` WHERE dt = %s AND docstatus < 2""", (self.doctype,), as_dict=1) if custom_fl: fl += custom_fl @@ -112,7 +112,7 @@ class DbTable: f.get('search_index'), f.get('options')) def get_columns_from_db(self): - self.show_columns = frappe.conn.sql("desc `%s`" % self.name) + self.show_columns = frappe.db.sql("desc `%s`" % self.name) for c in self.show_columns: self.current_columns[c[0]] = {'name': c[0], 'type':c[1], 'index':c[3], 'default':c[4]} @@ -138,7 +138,7 @@ class DbTable: # GET foreign keys def get_foreign_keys(self): fk_list = [] - txt = frappe.conn.sql("show create table `%s`" % self.name)[0][1] + txt = frappe.db.sql("show create table `%s`" % self.name)[0][1] for line in txt.split('\n'): if line.strip().startswith('CONSTRAINT') and line.find('FOREIGN')!=-1: try: @@ -162,12 +162,12 @@ class DbTable: # drop for col in self.drop_foreign_key: - frappe.conn.sql("set foreign_key_checks=0") - frappe.conn.sql("alter table `%s` drop foreign key `%s`" % (self.name, fk_dict[col.fieldname])) - frappe.conn.sql("set foreign_key_checks=1") + frappe.db.sql("set foreign_key_checks=0") + frappe.db.sql("alter table `%s` drop foreign key `%s`" % (self.name, fk_dict[col.fieldname])) + frappe.db.sql("set foreign_key_checks=1") def sync(self): - if not self.name in DbManager(frappe.conn).get_tables_list(frappe.conn.cur_db_name): + if not self.name in DbManager(frappe.db).get_tables_list(frappe.db.cur_db_name): self.create() else: self.alter() @@ -178,24 +178,24 @@ class DbTable: col.check(self.current_columns.get(col.fieldname, None)) for col in self.add_column: - frappe.conn.sql("alter table `%s` add column `%s` %s" % (self.name, col.fieldname, col.get_definition())) + frappe.db.sql("alter table `%s` add column `%s` %s" % (self.name, col.fieldname, col.get_definition())) for col in self.change_type: - frappe.conn.sql("alter table `%s` change `%s` `%s` %s" % (self.name, col.fieldname, col.fieldname, col.get_definition())) + frappe.db.sql("alter table `%s` change `%s` `%s` %s" % (self.name, col.fieldname, col.fieldname, col.get_definition())) for col in self.add_index: # if index key not exists - if not frappe.conn.sql("show index from `%s` where key_name = '%s'" % (self.name, col.fieldname)): - frappe.conn.sql("alter table `%s` add index `%s`(`%s`)" % (self.name, col.fieldname, col.fieldname)) + if not frappe.db.sql("show index from `%s` where key_name = '%s'" % (self.name, col.fieldname)): + frappe.db.sql("alter table `%s` add index `%s`(`%s`)" % (self.name, col.fieldname, col.fieldname)) for col in self.drop_index: if col.fieldname != 'name': # primary key # if index key exists - if frappe.conn.sql("show index from `%s` where key_name = '%s'" % (self.name, col.fieldname)): - frappe.conn.sql("alter table `%s` drop index `%s`" % (self.name, col.fieldname)) + if frappe.db.sql("show index from `%s` where key_name = '%s'" % (self.name, col.fieldname)): + frappe.db.sql("alter table `%s` drop index `%s`" % (self.name, col.fieldname)) for col in self.set_default: - frappe.conn.sql("alter table `%s` alter column `%s` set default %s" % (self.name, col.fieldname, '%s'), (col.default,)) + frappe.db.sql("alter table `%s` alter column `%s` set default %s" % (self.name, col.fieldname, '%s'), (col.default,)) class DbColumn: def __init__(self, table, fieldname, fieldtype, length, default, set_index, options): @@ -265,48 +265,48 @@ class DbManager: 1. Setter and getter for different mysql variables. 2. Setter and getter for mysql variables at global level?? """ - def __init__(self,conn): + def __init__(self,db): """ Pass root_conn here for access to all databases. """ - if conn: - self.conn = conn + if db: + self.db = db def get_variables(self,regex): """ Get variables that match the passed pattern regex """ - return list(self.conn.sql("SHOW VARIABLES LIKE '%s'"%regex)) + return list(self.db.sql("SHOW VARIABLES LIKE '%s'"%regex)) def get_table_schema(self,table): """ Just returns the output of Desc tables. """ - return list(self.conn.sql("DESC `%s`"%table)) + return list(self.db.sql("DESC `%s`"%table)) def get_tables_list(self,target=None): """get list of tables""" if target: - self.conn.use(target) + self.db.use(target) - return [t[0] for t in self.conn.sql("SHOW TABLES")] + return [t[0] for t in self.db.sql("SHOW TABLES")] def create_user(self,user,password): #Create user if it doesn't exist. try: if password: - self.conn.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s';" % (user[:16], password)) + self.db.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s';" % (user[:16], password)) else: - self.conn.sql("CREATE USER '%s'@'localhost';"%user[:16]) + self.db.sql("CREATE USER '%s'@'localhost';"%user[:16]) except Exception, e: raise def delete_user(self,target): # delete user if exists try: - self.conn.sql("DROP USER '%s'@'localhost';" % target) + self.db.sql("DROP USER '%s'@'localhost';" % target) except Exception, e: if e.args[0]==1396: pass @@ -317,39 +317,39 @@ class DbManager: if target in self.get_database_list(): self.drop_database(target) - self.conn.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % target) + self.db.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % target) def drop_database(self,target): try: - self.conn.sql("DROP DATABASE IF EXISTS `%s`;"%target) + self.db.sql("DROP DATABASE IF EXISTS `%s`;"%target) except Exception,e: raise def grant_all_privileges(self,target,user): try: - self.conn.sql("GRANT ALL PRIVILEGES ON `%s`.* TO '%s'@'localhost';" % (target, user)) + self.db.sql("GRANT ALL PRIVILEGES ON `%s`.* TO '%s'@'localhost';" % (target, user)) except Exception,e: raise def grant_select_privilges(self,db,table,user): try: if table: - self.conn.sql("GRANT SELECT ON %s.%s to '%s'@'localhost';" % (db,table,user)) + self.db.sql("GRANT SELECT ON %s.%s to '%s'@'localhost';" % (db,table,user)) else: - self.conn.sql("GRANT SELECT ON %s.* to '%s'@'localhost';" % (db,user)) + self.db.sql("GRANT SELECT ON %s.* to '%s'@'localhost';" % (db,user)) except Exception,e: raise def flush_privileges(self): try: - self.conn.sql("FLUSH PRIVILEGES") + self.db.sql("FLUSH PRIVILEGES") except Exception,e: raise def get_database_list(self): """get list of databases""" - return [d[0] for d in self.conn.sql("SHOW DATABASES")] + return [d[0] for d in self.db.sql("SHOW DATABASES")] def restore_database(self,target,source,user,password): from frappe.utils import make_esc @@ -366,14 +366,14 @@ class DbManager: if not table_name in self.get_tables_list(): return try: - self.conn.sql("DROP TABLE IF EXISTS %s "%(table_name)) + self.db.sql("DROP TABLE IF EXISTS %s "%(table_name)) except Exception,e: raise def set_transaction_isolation_level(self,scope='SESSION',level='READ COMMITTED'): #Sets the transaction isolation level. scope = global/session try: - self.conn.sql("SET %s TRANSACTION ISOLATION LEVEL %s"%(scope,level)) + self.db.sql("SET %s TRANSACTION ISOLATION LEVEL %s"%(scope,level)) except Exception,e: raise @@ -393,20 +393,20 @@ def updatedb(dt): * updates columns * updates indices """ - res = frappe.conn.sql("select ifnull(issingle, 0) from tabDocType where name=%s", (dt,)) + res = frappe.db.sql("select ifnull(issingle, 0) from tabDocType where name=%s", (dt,)) if not res: raise Exception, 'Wrong doctype "%s" in updatedb' % dt if not res[0][0]: - frappe.conn.commit() + frappe.db.commit() tab = DbTable(dt, 'tab') tab.sync() - frappe.conn.begin() + frappe.db.begin() def remove_all_foreign_keys(): - frappe.conn.sql("set foreign_key_checks = 0") - frappe.conn.commit() - for t in frappe.conn.sql("select name from tabDocType where ifnull(issingle,0)=0"): + frappe.db.sql("set foreign_key_checks = 0") + frappe.db.commit() + for t in frappe.db.sql("select name from tabDocType where ifnull(issingle,0)=0"): dbtab = frappe.model.db_schema.DbTable(t[0]) try: fklist = dbtab.get_foreign_keys() @@ -417,7 +417,7 @@ def remove_all_foreign_keys(): raise for f in fklist: - frappe.conn.sql("alter table `tab%s` drop foreign key `%s`" % (t[0], f[1])) + frappe.db.sql("alter table `tab%s` drop foreign key `%s`" % (t[0], f[1])) def get_definition(fieldtype): d = type_map.get(fieldtype.lower()) @@ -432,7 +432,7 @@ def get_definition(fieldtype): def add_column(doctype, column_name, fieldtype): - frappe.conn.commit() - frappe.conn.sql("alter table `tab%s` add column %s %s" % (doctype, + frappe.db.commit() + frappe.db.sql("alter table `tab%s` add column %s %s" % (doctype, column_name, get_definition(fieldtype))) diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index 58cea77379..db056a64ed 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -24,7 +24,7 @@ def delete_doc(doctype=None, name=None, doclist = None, force=0, ignore_doctypes frappe.msgprint('Nothing to delete!', raise_exception =1) # already deleted..? - if not frappe.conn.exists(doctype, name): + if not frappe.db.exists(doctype, name): return if not for_reload: @@ -37,10 +37,10 @@ def delete_doc(doctype=None, name=None, doclist = None, force=0, ignore_doctypes try: tablefields = frappe.model.meta.get_table_fields(doctype) - frappe.conn.sql("delete from `tab%s` where name=%s" % (doctype, "%s"), (name,)) + frappe.db.sql("delete from `tab%s` where name=%s" % (doctype, "%s"), (name,)) for t in tablefields: if t[0] not in ignore_doctypes: - frappe.conn.sql("delete from `tab%s` where parent = %s" % (t[0], '%s'), (name,)) + frappe.db.sql("delete from `tab%s` where parent = %s" % (t[0], '%s'), (name,)) except Exception, e: if e.args[0]==1451: frappe.msgprint("Cannot delete %s '%s' as it is referenced in another record. You must delete the referred record first" % (doctype, name)) @@ -61,7 +61,7 @@ def check_permission_and_not_submitted(doctype, name, ignore_permissions=False): frappe.msgprint(_("User not allowed to delete."), raise_exception=True) # check if submitted - if frappe.conn.get_value(doctype, name, "docstatus") == 1: + if frappe.db.get_value(doctype, name, "docstatus") == 1: frappe.msgprint(_("Submitted Record cannot be deleted")+": "+name+"("+doctype+")", raise_exception=True) @@ -86,7 +86,7 @@ def check_if_doc_is_linked(dt, dn, method="Delete"): for link_dt, link_field, issingle in link_fields: if not issingle: - item = frappe.conn.get_value(link_dt, {link_field:dn}, + item = frappe.db.get_value(link_dt, {link_field:dn}, ["name", "parent", "parenttype", "docstatus"], as_dict=True) if item and item.parent != dn and (method=="Delete" or diff --git a/frappe/model/doc.py b/frappe/model/doc.py index 9f09725f38..ff8174ad28 100755 --- a/frappe/model/doc.py +++ b/frappe/model/doc.py @@ -59,7 +59,7 @@ class Document: fielddata = doctype doctype = None if doctype and isinstance(name, dict): - name = frappe.conn.get_value(doctype, name, "name") or None + name = frappe.db.get_value(doctype, name, "name") or None if fielddata: self.fields = frappe._dict(fielddata) @@ -131,7 +131,7 @@ class Document: self._loadsingle() else: try: - dataset = frappe.conn.sql('select * from `tab%s` where name="%s"' % (self.doctype, self.name.replace('"', '\"'))) + dataset = frappe.db.sql('select * from `tab%s` where name="%s"' % (self.doctype, self.name.replace('"', '\"'))) except frappe.SQLError, e: if e.args[0]==1146: dataset = None @@ -140,7 +140,7 @@ class Document: if not dataset: raise frappe.DoesNotExistError, '[WNF] %s %s does not exist' % (self.doctype, self.name) - self._load_values(dataset[0], frappe.conn.get_description()) + self._load_values(dataset[0], frappe.db.get_description()) def is_new(self): return self.fields.get("__islocal") @@ -150,13 +150,13 @@ class Document: del self.fields['__islocal'] for i in range(len(description)): v = data[i] - self.fields[description[i][0]] = frappe.conn.convert_to_simple_type(v) + self.fields[description[i][0]] = frappe.db.convert_to_simple_type(v) def _merge_values(self, data, description): for i in range(len(description)): v = data[i] if v: # only if value, over-write - self.fields[description[i][0]] = frappe.conn.convert_to_simple_type(v) + self.fields[description[i][0]] = frappe.db.convert_to_simple_type(v) def _loadsingle(self): self.name = self.doctype @@ -223,7 +223,7 @@ class Document: if r: return r else: - if not frappe.conn.exists(self.doctype, self.name): + if not frappe.db.exists(self.doctype, self.name): frappe.msgprint(frappe._("Cannot update a non-exiting record, try inserting.") + ": " + self.doctype + " / " + self.name, raise_exception=1) @@ -238,7 +238,7 @@ class Document: def _get_amended_name(self): am_id = 1 am_prefix = self.amended_from - if frappe.conn.sql('select amended_from from `tab%s` where name = "%s"' % (self.doctype, self.amended_from))[0][0] or '': + if frappe.db.sql('select amended_from from `tab%s` where name = "%s"' % (self.doctype, self.amended_from))[0][0] or '': am_id = cint(self.amended_from.split('-')[-1]) + 1 am_prefix = '-'.join(self.amended_from.split('-')[:-1]) # except the last hyphen @@ -307,7 +307,7 @@ class Document: def set(self, key, value): self.modified = now() self.modified_by = frappe.session["user"] - frappe.conn.set_value(self.doctype, self.name, key, value, self.modified, self.modified_by) + frappe.db.set_value(self.doctype, self.name, key, value, self.modified, self.modified_by) self.fields[key] = value def _insert(self, make_autoname=True, keep_timestamps=False): @@ -328,7 +328,7 @@ class Document: else: self.modified = now() - frappe.conn.sql("insert into `tab%(doctype)s`" % self.fields \ + frappe.db.sql("insert into `tab%(doctype)s`" % self.fields \ + """ (name, owner, creation, modified, modified_by) values (%(name)s, %(owner)s, %(creation)s, %(modified)s, %(modified_by)s)""", self.fields) @@ -337,7 +337,7 @@ class Document: self.modified = now() update_str, values = [], [] - frappe.conn.sql("delete from tabSingles where doctype='%s'" % self.doctype) + frappe.db.sql("delete from tabSingles where doctype='%s'" % self.doctype) for f in self.fields.keys(): if not (f in ('modified', 'doctype', 'name', 'perm', 'localname', 'creation'))\ and (not f.startswith('__')): # fields not saved @@ -355,7 +355,7 @@ class Document: values.append(self.doctype) values.append(f) values.append(self.fields[f]) - frappe.conn.sql("insert into tabSingles(doctype, field, value) values %s" % (', '.join(update_str)), values) + frappe.db.sql("insert into tabSingles(doctype, field, value) values %s" % (', '.join(update_str)), values) def validate_links(self, link_list): err_list = [] @@ -391,7 +391,7 @@ class Document: dt = dt[5:] if '\n' in dt: dt = dt.split('\n')[0] - tmp = frappe.conn.sql("""SELECT name FROM `tab%s` + tmp = frappe.db.sql("""SELECT name FROM `tab%s` WHERE name = %s""" % (dt, '%s'), (dn,)) return tmp and tmp[0][0] or ''# match case @@ -423,7 +423,7 @@ class Document: update_str.append("`%s`=%s" % (f, '%s')) if values: values.append(self.name) - r = frappe.conn.sql("update `tab%s` set %s where name=%s" % \ + r = frappe.db.sql("update `tab%s` set %s where name=%s" % \ (self.doctype, ', '.join(update_str), "%s"), values) def get_valid_fields(self): @@ -443,13 +443,13 @@ class Document: "fieldtype": ["not in", frappe.model.no_value_fields]}) else: valid_fields_map[self.doctype] = \ - frappe.conn.get_table_columns(self.doctype) + frappe.db.get_table_columns(self.doctype) return valid_fields_map.get(self.doctype) def get_meta(self): if not self._meta: - self._meta = frappe.conn.get_value("DocType", self.doctype, ["autoname", "issingle", + self._meta = frappe.db.get_value("DocType", self.doctype, ["autoname", "issingle", "istable", "name_case"], as_dict=True) or frappe._dict() return self._meta @@ -457,7 +457,7 @@ class Document: def update_parentinfo(self): """update parent type and parent field, if not explicitly specified""" - tmp = frappe.conn.sql("""select parent, fieldname from tabDocField + tmp = frappe.db.sql("""select parent, fieldname from tabDocField where fieldtype='Table' and options=%s""", (self.doctype,)) if len(tmp)==0: @@ -474,7 +474,7 @@ class Document: def set_idx(self): """set idx""" - self.idx = (frappe.conn.sql("""select max(idx) from `tab%s` + self.idx = (frappe.db.sql("""select max(idx) from `tab%s` where parent=%s and parentfield=%s""" % (self.doctype, '%s', '%s'), (self.parent, self.parentfield))[0][0] or 0) + 1 @@ -500,7 +500,7 @@ class Document: doclist = filter(lambda d: d.name not in delete_list, doclist) # delete from db - frappe.conn.sql("""\ + frappe.db.sql("""\ delete from `tab%s` where parent=%s and parenttype=%s""" % (table_list[0].doctype, '%s', '%s'), @@ -604,15 +604,15 @@ def make_autoname(key, doctype=''): def getseries(key, digits, doctype=''): # series created ? - current = frappe.conn.sql("select `current` from `tabSeries` where name=%s for update", (key,)) + current = frappe.db.sql("select `current` from `tabSeries` where name=%s for update", (key,)) if current and current[0][0] is not None: current = current[0][0] # yes, update it - frappe.conn.sql("update tabSeries set current = current+1 where name=%s", (key,)) + frappe.db.sql("update tabSeries set current = current+1 where name=%s", (key,)) current = cint(current) + 1 else: # no, create it - frappe.conn.sql("insert into tabSeries (name, current) values (%s, 1)", (key,)) + frappe.db.sql("insert into tabSeries (name, current) values (%s, 1)", (key,)) current = 1 return ('%0'+str(digits)+'d') % current @@ -630,9 +630,9 @@ def getchildren(name, childtype, field='', parenttype='', from_doctype=0): condition += ' and parenttype=%s ' values.append(parenttype) - dataset = frappe.conn.sql("""select * from `tab%s` where parent=%s %s order by idx""" \ + dataset = frappe.db.sql("""select * from `tab%s` where parent=%s %s order by idx""" \ % (childtype, "%s", condition), tuple([name]+values)) - desc = frappe.conn.get_description() + desc = frappe.db.get_description() l = DocList() @@ -650,7 +650,7 @@ def check_page_perm(doc): if doc.publish: return - if not frappe.conn.sql("select name from `tabPage Role` where parent=%s and role='Guest'", (doc.name,)): + if not frappe.db.sql("select name from `tabPage Role` where parent=%s and role='Guest'", (doc.name,)): frappe.response['403'] = 1 raise frappe.PermissionError, '[WNF] No read permission for %s %s' % ('Page', doc.name) @@ -686,7 +686,7 @@ def get(dt, dn='', with_children = 1, from_controller = 0): def getsingle(doctype): """get single doc as dict""" - dataset = frappe.conn.sql("select field, value from tabSingles where doctype=%s", (doctype,)) + dataset = frappe.db.sql("select field, value from tabSingles where doctype=%s", (doctype,)) return dict(dataset) def copy_common_fields(from_doc, to_doc): @@ -702,7 +702,7 @@ def copy_common_fields(from_doc, to_doc): def validate_name(doctype, name, case=None, merge=False): if not merge: - if frappe.conn.sql('select name from `tab%s` where name=%s' % (doctype,'%s'), (name,)): + if frappe.db.sql('select name from `tab%s` where name=%s' % (doctype,'%s'), (name,)): raise NameError, 'Name %s already exists' % name # no name diff --git a/frappe/model/docfield.py b/frappe/model/docfield.py index 421a0ad8ab..3d836d28ff 100644 --- a/frappe/model/docfield.py +++ b/frappe/model/docfield.py @@ -8,14 +8,14 @@ import frappe def rename(doctype, fieldname, newname): """rename docfield""" - df = frappe.conn.sql("""select * from tabDocField where parent=%s and fieldname=%s""", + df = frappe.db.sql("""select * from tabDocField where parent=%s and fieldname=%s""", (doctype, fieldname), as_dict=1) if not df: return df = df[0] - if frappe.conn.get_value('DocType', doctype, 'issingle'): + if frappe.db.get_value('DocType', doctype, 'issingle'): update_single(df, newname) else: update_table(df, newname) @@ -23,28 +23,28 @@ def rename(doctype, fieldname, newname): def update_single(f, new): """update in tabSingles""" - frappe.conn.begin() - frappe.conn.sql("""update tabSingles set field=%s where doctype=%s and field=%s""", + frappe.db.begin() + frappe.db.sql("""update tabSingles set field=%s where doctype=%s and field=%s""", (new, f['parent'], f['fieldname'])) - frappe.conn.commit() + frappe.db.commit() def update_table(f, new): """update table""" query = get_change_column_query(f, new) if query: - frappe.conn.sql(query) + frappe.db.sql(query) def update_parent_field(f, new): """update 'parentfield' in tables""" if f['fieldtype']=='Table': - frappe.conn.begin() - frappe.conn.sql("""update `tab%s` set parentfield=%s where parentfield=%s""" \ + frappe.db.begin() + frappe.db.sql("""update `tab%s` set parentfield=%s where parentfield=%s""" \ % (f['options'], '%s', '%s'), (new, f['fieldname'])) - frappe.conn.commit() + frappe.db.commit() def get_change_column_query(f, new): """generate change fieldname query""" - desc = frappe.conn.sql("desc `tab%s`" % f['parent']) + desc = frappe.db.sql("desc `tab%s`" % f['parent']) for d in desc: if d[0]== f['fieldname']: return 'alter table `tab%s` change `%s` `%s` %s' % \ diff --git a/frappe/model/doctype.py b/frappe/model/doctype.py index 6c41569c2e..b3fa981e97 100644 --- a/frappe/model/doctype.py +++ b/frappe/model/doctype.py @@ -64,7 +64,7 @@ def get(doctype, processed=False, cached=True): return DocTypeDocList(doclist) def load_docfield_types(): - frappe.local.doctype_docfield_types = dict(frappe.conn.sql("""select fieldname, fieldtype from tabDocField + frappe.local.doctype_docfield_types = dict(frappe.db.sql("""select fieldname, fieldtype from tabDocField where parent='DocField'""")) def add_workflows(doclist): @@ -74,7 +74,7 @@ def add_workflows(doclist): # get active workflow workflow_name = get_workflow_name(doctype) - if workflow_name and frappe.conn.exists("Workflow", workflow_name): + if workflow_name and frappe.db.exists("Workflow", workflow_name): doclist += frappe.get_doclist("Workflow", workflow_name) # add workflow states (for icons and style) @@ -131,7 +131,7 @@ def sort_fields(doclist): doclist.get({"doctype":["!=", "DocField"]}).extend(newlist) def apply_property_setters(doctype, doclist): - for ps in frappe.conn.sql("""select * from `tabProperty Setter` where + for ps in frappe.db.sql("""select * from `tabProperty Setter` where doc_type=%s""", (doctype,), as_dict=1): if ps['doctype_or_field']=='DocType': if ps.get('property_type', None) in ('Int', 'Check'): @@ -148,7 +148,7 @@ def apply_property_setters(doctype, doclist): def add_custom_fields(doctype, doclist): try: - res = frappe.conn.sql("""SELECT * FROM `tabCustom Field` + res = frappe.db.sql("""SELECT * FROM `tabCustom Field` WHERE dt = %s AND docstatus < 2""", (doctype,), as_dict=1) except Exception, e: if e.args[0]==1146: @@ -174,10 +174,10 @@ def add_custom_fields(doctype, doclist): def add_linked_with(doclist): """add list of doctypes this doctype is 'linked' with""" doctype = doclist[0].name - links = frappe.conn.sql("""select parent, fieldname from tabDocField + links = frappe.db.sql("""select parent, fieldname from tabDocField where (fieldtype="Link" and options=%s) or (fieldtype="Select" and options=%s)""", (doctype, "link:"+ doctype)) - links += frappe.conn.sql("""select dt as parent, fieldname from `tabCustom Field` + links += frappe.db.sql("""select dt as parent, fieldname from `tabCustom Field` where (fieldtype="Link" and options=%s) or (fieldtype="Select" and options=%s)""", (doctype, "link:"+ doctype)) @@ -191,7 +191,7 @@ def add_linked_with(doclist): for dt in links: ret[dt] = { "fieldname": links[dt] } - for grand_parent, options in frappe.conn.sql("""select parent, options from tabDocField + for grand_parent, options in frappe.db.sql("""select parent, options from tabDocField where fieldtype="Table" and options in (select name from tabDocType where istable=1 and name in (%s))""" % ", ".join(["%s"] * len(links)) ,tuple(links)): @@ -250,7 +250,7 @@ def clear_cache(doctype=None): clear_single(doctype) # clear all parent doctypes - for dt in frappe.conn.sql("""select parent from tabDocField + for dt in frappe.db.sql("""select parent from tabDocField where fieldtype="Table" and options=%s""", (doctype,)): clear_single(dt[0]) @@ -260,7 +260,7 @@ def clear_cache(doctype=None): else: # clear all - for dt in frappe.conn.sql("""select name from tabDocType"""): + for dt in frappe.db.sql("""select name from tabDocType"""): clear_single(dt[0]) def add_code(doctype, doclist): @@ -293,7 +293,7 @@ def add_embedded_js(doc): js = doc.fields.get('__js') or '' # custom script - custom = frappe.conn.get_value("Custom Script", {"dt": doc.name, + custom = frappe.db.get_value("Custom Script", {"dt": doc.name, "script_type": "Client"}, "script") or "" js = (js + '\n' + custom).encode("utf-8") @@ -307,11 +307,11 @@ def expand_selects(doclist): and (d.options or '').startswith('link:'), doclist): doctype = d.options.split("\n")[0][5:] d.link_doctype = doctype - d.options = '\n'.join([''] + [o.name for o in frappe.conn.sql("""select + d.options = '\n'.join([''] + [o.name for o in frappe.db.sql("""select name from `tab%s` where docstatus<2 order by name asc""" % doctype, as_dict=1)]) def add_print_formats(doclist): - print_formats = frappe.conn.sql("""select * FROM `tabPrint Format` + print_formats = frappe.db.sql("""select * FROM `tabPrint Format` WHERE doc_type=%s AND docstatus<2""", (doclist[0].name,), as_dict=1) for pf in print_formats: doclist.append(frappe.model.doc.Document('Print Format', fielddata=pf)) @@ -333,7 +333,7 @@ def get_link_fields(doctype): "options": "^link:"})) def add_validators(doctype, doclist): - for validator in frappe.conn.sql("""select name from `tabDocType Validator` where + for validator in frappe.db.sql("""select name from `tabDocType Validator` where for_doctype=%s""", (doctype,), as_dict=1): doclist.extend(frappe.get_doclist('DocType Validator', validator.name)) diff --git a/frappe/model/meta.py b/frappe/model/meta.py index f8d63aac8c..b74126353e 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -9,18 +9,18 @@ from frappe.utils import cstr, cint def is_single(doctype): try: - return frappe.conn.get_value("DocType", doctype, "issingle") + return frappe.db.get_value("DocType", doctype, "issingle") except IndexError, e: raise Exception, 'Cannot determine whether %s is single' % doctype def get_parent_dt(dt): - parent_dt = frappe.conn.sql("""select parent from tabDocField + parent_dt = frappe.db.sql("""select parent from tabDocField where fieldtype="Table" and options="%s" and (parent not like "old_parent:%%") limit 1""" % dt) return parent_dt and parent_dt[0][0] or '' def set_fieldname(field_id, fieldname): - frappe.conn.set_value('DocField', field_id, 'fieldname', fieldname) + frappe.db.set_value('DocField', field_id, 'fieldname', fieldname) def get_link_fields(doctype): """ @@ -40,11 +40,11 @@ def get_link_fields(doctype): ] def get_table_fields(doctype): - child_tables = [[d[0], d[1]] for d in frappe.conn.sql("select options, fieldname from tabDocField \ + child_tables = [[d[0], d[1]] for d in frappe.db.sql("select options, fieldname from tabDocField \ where parent='%s' and fieldtype='Table'" % doctype, as_list=1)] try: - custom_child_tables = [[d[0], d[1]] for d in frappe.conn.sql("select options, fieldname from `tabCustom Field` \ + custom_child_tables = [[d[0], d[1]] for d in frappe.db.sql("select options, fieldname from `tabCustom Field` \ where dt='%s' and fieldtype='Table'" % doctype, as_list=1)] except Exception, e: if e.args[0]!=1146: @@ -67,7 +67,7 @@ def get_field_currency(df, doc): if ":" in cstr(df.options): split_opts = df.options.split(":") if len(split_opts)==3: - currency = frappe.conn.get_value(split_opts[0], doc.fields.get(split_opts[1]), + currency = frappe.db.get_value(split_opts[0], doc.fields.get(split_opts[1]), split_opts[2]) else: currency = doc.fields.get(df.options) @@ -82,14 +82,14 @@ def get_field_precision(df, doc): if df.fieldtype == "Currency": currency = get_field_currency(df, doc) if currency: - number_format = frappe.conn.get_value("Currency", currency, "number_format") + number_format = frappe.db.get_value("Currency", currency, "number_format") if not number_format: - number_format = frappe.conn.get_default("number_format") or "#,###.##" + number_format = frappe.db.get_default("number_format") or "#,###.##" decimal_str, comma_str, precision = get_number_format_info(number_format) if df.fieldtype == "Float": - precision = cint(frappe.conn.get_default("float_precision")) or 3 + precision = cint(frappe.db.get_default("float_precision")) or 3 return precision \ No newline at end of file diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 0c7cf829e2..ca782e9bbd 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -13,7 +13,7 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F Renames a doc(dt, old) to doc(dt, new) and updates all linked fields of type "Link" or "Select" with "link:" """ - if not frappe.conn.exists(doctype, old): + if not frappe.db.exists(doctype, old): return force = cint(force) @@ -48,7 +48,7 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F rename_versions(doctype, old, new) # update restrictions - frappe.conn.sql("""update tabDefaultValue set defvalue=%s where parenttype='Restriction' + frappe.db.sql("""update tabDefaultValue set defvalue=%s where parenttype='Restriction' and defkey=%s and defvalue=%s""", (new, doctype, old)) frappe.clear_cache() @@ -56,25 +56,25 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F def update_attachments(doctype, old, new): try: - frappe.conn.sql("""update `tabFile Data` set attached_to_name=%s + frappe.db.sql("""update `tabFile Data` set attached_to_name=%s where attached_to_name=%s and attached_to_doctype=%s""", (new, old, doctype)) except Exception, e: if e.args[0]!=1054: # in patch? raise def rename_versions(doctype, old, new): - frappe.conn.sql("""update tabVersion set docname=%s where ref_doctype=%s and docname=%s""", + frappe.db.sql("""update tabVersion set docname=%s where ref_doctype=%s and docname=%s""", (new, doctype, old)) def rename_parent_and_child(doctype, old, new, doclist): # rename the doc - frappe.conn.sql("update `tab%s` set name=%s where name=%s" \ + frappe.db.sql("update `tab%s` set name=%s where name=%s" \ % (doctype, '%s', '%s'), (new, old)) update_child_docs(old, new, doclist) def validate_rename(doctype, new, doclist, merge, force, ignore_permissions): - exists = frappe.conn.exists(doctype, new) + exists = frappe.db.exists(doctype, new) if merge and not exists: frappe.msgprint("%s: %s does not exist, select a new target to merge." % (doctype, new), raise_exception=1) @@ -106,7 +106,7 @@ def rename_doctype(doctype, old, new, force=False): update_parenttype_values(old, new) # rename comments - frappe.conn.sql("""update tabComment set comment_doctype=%s where comment_doctype=%s""", + frappe.db.sql("""update tabComment set comment_doctype=%s where comment_doctype=%s""", (new, old)) def update_child_docs(old, new, doclist): @@ -115,7 +115,7 @@ def update_child_docs(old, new, doclist): if d.doctype=='DocField' and d.fieldtype=='Table') for child in child_doctypes: - frappe.conn.sql("update `tab%s` set parent=%s where parent=%s" \ + frappe.db.sql("update `tab%s` set parent=%s where parent=%s" \ % (child, '%s', '%s'), (new, old)) def update_link_field_values(link_fields, old, new, doctype): @@ -128,22 +128,22 @@ def update_link_field_values(link_fields, old, new, doctype): continue update_list.append([field['parent'], field['fieldname']]) if field['issingle']: - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabSingles` set value=%s where doctype=%s and field=%s and value=%s""", (new, field['parent'], field['fieldname'], old)) else: if doctype!='DocType' and field['parent']!=new: - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tab%s` set `%s`=%s where `%s`=%s""" \ % (field['parent'], field['fieldname'], '%s', field['fieldname'], '%s'), - (new, old), debug=1) + (new, old)) def get_link_fields(doctype): # get link fields from tabDocField - link_fields = frappe.conn.sql("""\ + link_fields = frappe.db.sql("""\ select parent, fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = df.parent) as issingle @@ -155,7 +155,7 @@ def get_link_fields(doctype): % ('%s', doctype), (doctype,), as_dict=1) # get link fields from tabCustom Field - custom_link_fields = frappe.conn.sql("""\ + custom_link_fields = frappe.db.sql("""\ select dt as parent, fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = df.dt) as issingle @@ -170,7 +170,7 @@ def get_link_fields(doctype): link_fields += custom_link_fields # remove fields whose options have been changed using property setter - property_setter_link_fields = frappe.conn.sql("""\ + property_setter_link_fields = frappe.db.sql("""\ select ps.doc_type as parent, ps.field_name as fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = ps.doc_type) as issingle @@ -186,15 +186,15 @@ def get_link_fields(doctype): return link_fields def update_parent_of_fieldtype_table(old, new): - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabDocField` set options=%s where fieldtype='Table' and options=%s""", (new, old)) - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabCustom Field` set options=%s where fieldtype='Table' and options=%s""", (new, old)) - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabProperty Setter` set value=%s where property='options' and value=%s""", (new, old)) @@ -204,7 +204,7 @@ def get_select_fields(old, new): new line separated list """ # get link fields from tabDocField - select_fields = frappe.conn.sql("""\ + select_fields = frappe.db.sql("""\ select parent, fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = df.parent) as issingle @@ -217,7 +217,7 @@ def get_select_fields(old, new): % ('%s', old), (new,), as_dict=1) # get link fields from tabCustom Field - custom_select_fields = frappe.conn.sql("""\ + custom_select_fields = frappe.db.sql("""\ select dt as parent, fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = df.dt) as issingle @@ -233,7 +233,7 @@ def get_select_fields(old, new): select_fields += custom_select_fields # remove fields whose options have been changed using property setter - property_setter_select_fields = frappe.conn.sql("""\ + property_setter_select_fields = frappe.db.sql("""\ select ps.doc_type as parent, ps.field_name as fieldname, (select ifnull(issingle, 0) from tabDocType dt where dt.name = ps.doc_type) as issingle @@ -251,7 +251,7 @@ def get_select_fields(old, new): return select_fields def update_select_field_values(old, new): - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabDocField` set options=replace(options, %s, %s) where parent != %s and parent not like "old%%%%" and @@ -259,7 +259,7 @@ def update_select_field_values(old, new): (options like "%%%%\\n%s%%%%" or options like "%%%%%s\\n%%%%")""" % \ ('%s', '%s', '%s', old, old), (old, new, new)) - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabCustom Field` set options=replace(options, %s, %s) where dt != %s and dt not like "old%%%%" and @@ -267,7 +267,7 @@ def update_select_field_values(old, new): (options like "%%%%\\n%s%%%%" or options like "%%%%%s\\n%%%%")""" % \ ('%s', '%s', '%s', old, old), (old, new, new)) - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tabProperty Setter` set value=replace(value, %s, %s) where doc_type != %s and field_name is not null and @@ -276,18 +276,18 @@ def update_select_field_values(old, new): ('%s', '%s', '%s', old, old), (old, new, new)) def update_parenttype_values(old, new): - child_doctypes = frappe.conn.sql("""\ + child_doctypes = frappe.db.sql("""\ select options, fieldname from `tabDocField` where parent=%s and fieldtype='Table'""", (new,), as_dict=1) - custom_child_doctypes = frappe.conn.sql("""\ + custom_child_doctypes = frappe.db.sql("""\ select options, fieldname from `tabCustom Field` where dt=%s and fieldtype='Table'""", (new,), as_dict=1) child_doctypes += custom_child_doctypes fields = [d['fieldname'] for d in child_doctypes] - property_setter_child_doctypes = frappe.conn.sql("""\ + property_setter_child_doctypes = frappe.db.sql("""\ select value as options from `tabProperty Setter` where doc_type=%s and property='options' and field_name in ("%s")""" % ('%s', '", "'.join(fields)), @@ -297,7 +297,7 @@ def update_parenttype_values(old, new): child_doctypes = (d['options'] for d in child_doctypes) for doctype in child_doctypes: - frappe.conn.sql("""\ + frappe.db.sql("""\ update `tab%s` set parenttype=%s where parenttype=%s""" % (doctype, '%s', '%s'), (new, old)) \ No newline at end of file diff --git a/frappe/model/sync.py b/frappe/model/sync.py index 525ddc724e..747b3d3b4a 100644 --- a/frappe/model/sync.py +++ b/frappe/model/sync.py @@ -51,6 +51,6 @@ def walk_and_sync(start_path, force=0, sync_everything = False, verbose=False): if import_file_by_path(os.path.join(path, f), force=force) and verbose: print module_name + ' | ' + doctype + ' | ' + name - frappe.conn.commit() + frappe.db.commit() return modules diff --git a/frappe/model/utils.py b/frappe/model/utils.py index 5b5e00df0c..88d6039157 100644 --- a/frappe/model/utils.py +++ b/frappe/model/utils.py @@ -113,8 +113,8 @@ def copy_doclist(doclist, no_copy = []): def set_default(doc, key): if not doc.is_default: - frappe.conn.set(doc, "is_default", 1) + frappe.db.set(doc, "is_default", 1) - frappe.conn.sql("""update `tab%s` set `is_default`=0 + frappe.db.sql("""update `tab%s` set `is_default`=0 where `%s`=%s and name!=%s""" % (doc.doctype, key, "%s", "%s"), (doc.fields.get(key), doc.name)) diff --git a/frappe/model/workflow.py b/frappe/model/workflow.py index 64966a35c1..b9d25c86e3 100644 --- a/frappe/model/workflow.py +++ b/frappe/model/workflow.py @@ -9,12 +9,12 @@ def get_workflow_name(doctype): frappe.local.workflow_names = {} if doctype not in frappe.local.workflow_names: - workflow_name = frappe.conn.get_value("Workflow", {"document_type": doctype, + workflow_name = frappe.db.get_value("Workflow", {"document_type": doctype, "is_active": "1"}, "name") # no active? get default workflow if not workflow_name: - workflow_name = frappe.conn.get_value("Workflow", {"document_type": doctype}, + workflow_name = frappe.db.get_value("Workflow", {"document_type": doctype}, "name") frappe.local.workflow_names[doctype] = workflow_name @@ -23,9 +23,9 @@ def get_workflow_name(doctype): def get_default_state(doctype): workflow_name = get_workflow_name(doctype) - return frappe.conn.get_value("Workflow Document State", {"parent": workflow_name, + return frappe.db.get_value("Workflow Document State", {"parent": workflow_name, "idx":1}, "state") def get_state_fieldname(doctype): workflow_name = get_workflow_name(doctype) - return frappe.conn.get_value("Workflow", workflow_name, "workflow_state_field") + return frappe.db.get_value("Workflow", workflow_name, "workflow_state_field") diff --git a/frappe/modules/__init__.py b/frappe/modules/__init__.py index aef4d3da34..b310b448fe 100644 --- a/frappe/modules/__init__.py +++ b/frappe/modules/__init__.py @@ -39,8 +39,8 @@ def export_doc(doctype, name, module=None): from frappe.modules.export_file import write_document_file import frappe.model.doc - if not module: module = frappe.conn.get_value(doctype, name, 'module') + if not module: module = frappe.db.get_value(doctype, name, 'module') write_document_file(frappe.model.doc.get(doctype, name), module) def get_doctype_module(doctype): - return frappe.conn.get_value('DocType', doctype, 'module') or "core" + return frappe.db.get_value('DocType', doctype, 'module') or "core" diff --git a/frappe/modules/export_file.py b/frappe/modules/export_file.py index ddaed6fc87..df2fc771a9 100644 --- a/frappe/modules/export_file.py +++ b/frappe/modules/export_file.py @@ -66,7 +66,7 @@ def get_module_name(doclist): elif doclist[0]['doctype']=='Control Panel': module = 'Core' elif doclist[0]['doctype']=="Workflow": - module = frappe.conn.get_value("DocType", doclist[0]["document_type"], "module") + module = frappe.db.get_value("DocType", doclist[0]["document_type"], "module") else: module = doclist[0]['module'] diff --git a/frappe/modules/import_file.py b/frappe/modules/import_file.py index 2e43c752ba..05c02ada0a 100644 --- a/frappe/modules/import_file.py +++ b/frappe/modules/import_file.py @@ -38,7 +38,7 @@ def import_file_by_path(path, force=False): if not force: # check if timestamps match - if doc['modified']==str(frappe.conn.get_value(doc['doctype'], doc['name'], 'modified')): + if doc['modified']==str(frappe.db.get_value(doc['doctype'], doc['name'], 'modified')): return False original_modified = doc["modified"] @@ -46,7 +46,7 @@ def import_file_by_path(path, force=False): import_doclist(doclist) # since there is a new timestamp on the file, update timestamp in - frappe.conn.sql("update `tab%s` set modified=%s where name=%s" % \ + frappe.db.sql("update `tab%s` set modified=%s where name=%s" % \ (doc['doctype'], '%s', '%s'), (original_modified, doc['name'])) @@ -80,7 +80,7 @@ def import_doclist(doclist): ignore = list(doctypes.intersection(set(ignore_doctypes))) if doctype in ignore_values: - if frappe.conn.exists(doctype, name): + if frappe.db.exists(doctype, name): old_doc = frappe.doc(doctype, name) # delete old @@ -112,7 +112,7 @@ def remove_ignored_docs_if_they_already_exist(doclist, ignore, name): if ignore: has_records = [] for d in ignore: - if frappe.conn.get_value(d, {"parent":name}): + if frappe.db.get_value(d, {"parent":name}): has_records.append(d) if has_records: diff --git a/frappe/modules/patch_handler.py b/frappe/modules/patch_handler.py index 404eb6e7be..c3e0629601 100644 --- a/frappe/modules/patch_handler.py +++ b/frappe/modules/patch_handler.py @@ -18,7 +18,7 @@ class PatchError(Exception): pass def run_all(): """run all pending patches""" - executed = [p[0] for p in frappe.conn.sql("""select patch from `tabPatch Log`""")] + executed = [p[0] for p in frappe.db.sql("""select patch from `tabPatch Log`""")] for patch in get_all_patches(): if patch and (patch not in executed): @@ -55,9 +55,9 @@ def execute_patch(patchmodule, method=None, methodargs=None): """execute the patch""" success = False block_user(True) - frappe.conn.begin() + frappe.db.begin() try: - log('Executing %s in %s' % (patchmodule or str(methodargs), frappe.conn.cur_db_name)) + log('Executing %s in %s' % (patchmodule or str(methodargs), frappe.db.cur_db_name)) if patchmodule: if patchmodule.startswith("execute:"): exec patchmodule.split("execute:")[1] in globals() @@ -67,10 +67,10 @@ def execute_patch(patchmodule, method=None, methodargs=None): elif method: method(**methodargs) - frappe.conn.commit() + frappe.db.commit() success = True except Exception, e: - frappe.conn.rollback() + frappe.db.rollback() tb = frappe.get_traceback() log(tb) import os @@ -91,32 +91,32 @@ def add_to_patch_log(tb): def update_patch_log(patchmodule): """update patch_file in patch log""" - if frappe.conn.table_exists("__PatchLog"): - frappe.conn.sql("""INSERT INTO `__PatchLog` VALUES (%s, now())""", \ + if frappe.db.table_exists("__PatchLog"): + frappe.db.sql("""INSERT INTO `__PatchLog` VALUES (%s, now())""", \ patchmodule) else: frappe.doc({"doctype": "Patch Log", "patch": patchmodule}).insert() def executed(patchmodule): """return True if is executed""" - if frappe.conn.table_exists("__PatchLog"): - done = frappe.conn.sql("""select patch from __PatchLog where patch=%s""", patchmodule) + if frappe.db.table_exists("__PatchLog"): + done = frappe.db.sql("""select patch from __PatchLog where patch=%s""", patchmodule) else: - done = frappe.conn.get_value("Patch Log", {"patch": patchmodule}) + done = frappe.db.get_value("Patch Log", {"patch": patchmodule}) if done: - print "Patch %s executed in %s" % (patchmodule, frappe.conn.cur_db_name) + print "Patch %s executed in %s" % (patchmodule, frappe.db.cur_db_name) return done def block_user(block): """stop/start execution till patch is run""" - frappe.conn.begin() + frappe.db.begin() msg = "Patches are being executed in the system. Please try again in a few moments." - frappe.conn.set_global('__session_status', block and 'stop' or None) - frappe.conn.set_global('__session_status_message', block and msg or None) - frappe.conn.commit() + 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 setup(): - frappe.conn.sql("""CREATE TABLE IF NOT EXISTS `__PatchLog` ( + frappe.db.sql("""CREATE TABLE IF NOT EXISTS `__PatchLog` ( patch TEXT, applied_on DATETIME) engine=InnoDB""") def log(msg): diff --git a/frappe/modules/utils.py b/frappe/modules/utils.py index 2ba60b1b9d..7c72ae42be 100644 --- a/frappe/modules/utils.py +++ b/frappe/modules/utils.py @@ -29,7 +29,7 @@ def switch_module(dt, dn, to, frm=None, export=None): Change the module of the given doctype, if export is true, then also export txt and copy code files from src """ - frappe.conn.sql("update `tab"+dt+"` set module=%s where name=%s", (to, dn)) + frappe.db.sql("update `tab"+dt+"` set module=%s where name=%s", (to, dn)) if export: export_doc(dt, dn) diff --git a/frappe/patches/4_0/add_delete_permission.py b/frappe/patches/4_0/add_delete_permission.py index 7da3439ce9..7811217d97 100644 --- a/frappe/patches/4_0/add_delete_permission.py +++ b/frappe/patches/4_0/add_delete_permission.py @@ -4,9 +4,9 @@ def execute(): frappe.reload_doc("core", "doctype", "docperm") # delete same as cancel (map old permissions) - frappe.conn.sql("""update tabDocPerm set `delete`=ifnull(`cancel`,0)""") + frappe.db.sql("""update tabDocPerm set `delete`=ifnull(`cancel`,0)""") # can't cancel if can't submit - frappe.conn.sql("""update tabDocPerm set `cancel`=0 where ifnull(`submit`,0)=0""") + frappe.db.sql("""update tabDocPerm set `cancel`=0 where ifnull(`submit`,0)=0""") frappe.clear_cache() \ No newline at end of file diff --git a/frappe/patches/4_0/move_match_to_restricted.py b/frappe/patches/4_0/move_match_to_restricted.py index 51b785fae2..e21b12c034 100644 --- a/frappe/patches/4_0/move_match_to_restricted.py +++ b/frappe/patches/4_0/move_match_to_restricted.py @@ -6,4 +6,4 @@ import frappe def execute(): frappe.reload_doc("core", "doctype", "docperm") - frappe.conn.sql("""update `tabDocPerm` set restricted=1 where `match`='owner'""") \ No newline at end of file + frappe.db.sql("""update `tabDocPerm` set restricted=1 where `match`='owner'""") \ No newline at end of file diff --git a/frappe/patches/4_0/remove_index_sitemap.py b/frappe/patches/4_0/remove_index_sitemap.py index e1ea7831da..7f5124813c 100644 --- a/frappe/patches/4_0/remove_index_sitemap.py +++ b/frappe/patches/4_0/remove_index_sitemap.py @@ -1,6 +1,6 @@ import frappe def execute(): - if frappe.conn.exists("Website Route", "index"): + if frappe.db.exists("Website Route", "index"): frappe.delete_doc("Website Route", "index", ignore_permissions=True) \ No newline at end of file diff --git a/frappe/patches/4_0/rename_sitemap_to_route.py b/frappe/patches/4_0/rename_sitemap_to_route.py index 13c1258c64..d99a2fd732 100644 --- a/frappe/patches/4_0/rename_sitemap_to_route.py +++ b/frappe/patches/4_0/rename_sitemap_to_route.py @@ -3,7 +3,7 @@ import frappe from frappe.model import rename_field def execute(): - tables = frappe.conn.sql_list("show tables") + tables = frappe.db.sql_list("show tables") if "tabWebsite Route" not in tables: frappe.rename_doc("DocType", "Website Sitemap", "Website Route", force=True) diff --git a/frappe/patches/4_0/set_todo_checked_as_closed.py b/frappe/patches/4_0/set_todo_checked_as_closed.py index ac2dbdcc7b..cc4b87a0bc 100644 --- a/frappe/patches/4_0/set_todo_checked_as_closed.py +++ b/frappe/patches/4_0/set_todo_checked_as_closed.py @@ -3,6 +3,6 @@ import frappe def execute(): frappe.reload_doc("core", "doctype", "todo") try: - frappe.conn.sql("""update tabToDo set status = if(ifnull(checked,0)=0, 'Open', 'Closed')""") + frappe.db.sql("""update tabToDo set status = if(ifnull(checked,0)=0, 'Open', 'Closed')""") except: pass diff --git a/frappe/patches/4_0/set_website_route_idx.py b/frappe/patches/4_0/set_website_route_idx.py index 3dcf990e78..e001174bde 100644 --- a/frappe/patches/4_0/set_website_route_idx.py +++ b/frappe/patches/4_0/set_website_route_idx.py @@ -11,12 +11,12 @@ def execute(): pages, generators = get_pages_and_generators(app) for g in generators: doctype = frappe.get_attr(get_template_controller(app, g["path"], g["fname"]) + ".doctype") - module = frappe.conn.get_value("DocType", doctype, "module") + module = frappe.db.get_value("DocType", doctype, "module") frappe.reload_doc(module, "doctype", doctype) - frappe.conn.sql("""update `tabWebsite Route` set idx=null""") + frappe.db.sql("""update `tabWebsite Route` set idx=null""") for doctype in ["Blog Category", "Blog Post", "Web Page", "Website Group"]: - frappe.conn.sql("""update `tab{}` set idx=null""".format(doctype)) + frappe.db.sql("""update `tab{}` set idx=null""".format(doctype)) from frappe.website.doctype.website_template.website_template import rebuild_website_template rebuild_website_template() \ No newline at end of file diff --git a/frappe/patches/4_0/webnotes_to_frappe.py b/frappe/patches/4_0/webnotes_to_frappe.py index 740116a4f2..8cb477b7de 100644 --- a/frappe/patches/4_0/webnotes_to_frappe.py +++ b/frappe/patches/4_0/webnotes_to_frappe.py @@ -5,5 +5,5 @@ def execute(): if "webnotes" in installed: installed.remove("webnotes") installed = ["frappe"] + installed - frappe.conn.set_global("installed_apps", json.dumps(installed)) + frappe.db.set_global("installed_apps", json.dumps(installed)) frappe.clear_cache() \ No newline at end of file diff --git a/frappe/patches/4_0/website_sitemap_hierarchy.py b/frappe/patches/4_0/website_sitemap_hierarchy.py index e6ee416b66..eae4c03ee4 100644 --- a/frappe/patches/4_0/website_sitemap_hierarchy.py +++ b/frappe/patches/4_0/website_sitemap_hierarchy.py @@ -12,11 +12,11 @@ def execute(): frappe.reload_doc("website", "doctype", "post") frappe.reload_doc("website", "doctype", "user_vote") - frappe.conn.sql("""update `tabWebsite Route` ws set ref_doctype=(select wsc.ref_doctype + frappe.db.sql("""update `tabWebsite Route` ws set ref_doctype=(select wsc.ref_doctype from `tabWebsite Template` wsc where wsc.name=ws.website_template) where ifnull(page_or_generator, '')!='Page'""") - home_page = frappe.conn.get_value("Website Settings", "Website Settings", "home_page") - home_page = frappe.conn.get_value("Website Route", {"docname": home_page}) or home_page - frappe.conn.set_value("Website Settings", "Website Settings", "home_page", + home_page = frappe.db.get_value("Website Settings", "Website Settings", "home_page") + home_page = frappe.db.get_value("Website Route", {"docname": home_page}) or home_page + frappe.db.set_value("Website Settings", "Website Settings", "home_page", home_page) diff --git a/frappe/permissions.py b/frappe/permissions.py index 5d872b419c..19513aa79f 100644 --- a/frappe/permissions.py +++ b/frappe/permissions.py @@ -16,7 +16,7 @@ def check_admin_or_system_manager(): def has_permission(doctype, ptype="read", refdoc=None, verbose=True): """check if user has permission""" - if frappe.conn.get_value("DocType", doctype, "istable")==1: + if frappe.db.get_value("DocType", doctype, "istable")==1: return True meta = frappe.get_doctype(doctype) diff --git a/frappe/profile.py b/frappe/profile.py index 7a2c97027b..f31e656e0d 100644 --- a/frappe/profile.py +++ b/frappe/profile.py @@ -41,14 +41,14 @@ class Profile: """build map of special doctype properties""" self.doctype_map = {} - for r in frappe.conn.sql("""select name, in_create, issingle, istable, + for r in frappe.db.sql("""select name, in_create, issingle, istable, read_only, module from tabDocType""", as_dict=1): self.doctype_map[r['name']] = r def build_perm_map(self): """build map of permissions at level 0""" self.perm_map = {} - for r in frappe.conn.sql("""select parent, `read`, `write`, `create`, `delete`, `submit`, + for r in frappe.db.sql("""select parent, `read`, `write`, `create`, `delete`, `submit`, `cancel`,`report`, `import`, `export`, `print`, `email`, `restrict` from tabDocPerm where docstatus=0 and ifnull(permlevel,0)=0 @@ -150,7 +150,7 @@ class Profile: return self.can_read def load_profile(self): - d = frappe.conn.sql("""select email, first_name, last_name, + d = frappe.db.sql("""select email, first_name, last_name, email_signature, background_image, user_type, language from tabProfile where name = %s""", (self.name,), as_dict=1)[0] @@ -173,13 +173,13 @@ class Profile: return d def get_user_fullname(user): - fullname = frappe.conn.sql("SELECT CONCAT_WS(' ', first_name, last_name) FROM `tabProfile` WHERE name=%s", (user,)) + fullname = frappe.db.sql("SELECT CONCAT_WS(' ', first_name, last_name) FROM `tabProfile` WHERE name=%s", (user,)) return fullname and fullname[0][0] or '' def get_system_managers(only_name=False): """returns all system manager's profile details""" import email.utils - system_managers = frappe.conn.sql("""select distinct name, + system_managers = frappe.db.sql("""select distinct name, concat_ws(" ", if(first_name="", null, first_name), if(last_name="", null, last_name)) as fullname from tabProfile p where docstatus < 2 and enabled = 1 @@ -209,7 +209,7 @@ def add_system_manager(email, first_name=None, last_name=None): profile.insert() # add roles - roles = frappe.conn.sql_list("""select name from `tabRole` + roles = frappe.db.sql_list("""select name from `tabRole` where name not in ("Administrator", "Guest", "All")""") profile.get_controller().add_roles(*roles) @@ -221,7 +221,7 @@ def get_roles(username=None, with_standard=True): if username=='Guest': return ['Guest'] - roles = [r[0] for r in frappe.conn.sql("""select role from tabUserRole + roles = [r[0] for r in frappe.db.sql("""select role from tabUserRole where parent=%s and role!='All'""", (username,))] + ['All'] # filter standard if required diff --git a/frappe/sessions.py b/frappe/sessions.py index f47be63530..bc7f485103 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -19,7 +19,7 @@ import frappe.translate @frappe.whitelist() def clear(user=None): frappe.local.session_obj.update(force=True) - frappe.local.conn.commit() + frappe.local.db.commit() clear_cache(frappe.session.user) frappe.response['message'] = "Cache Cleared" @@ -36,19 +36,19 @@ def clear_cache(user=None): # clear notifications if frappe.flags.in_install_app!="frappe": - frappe.conn.sql("""delete from `tabNotification Count` where owner=%s""", (user,)) + frappe.db.sql("""delete from `tabNotification Count` where owner=%s""", (user,)) if frappe.session: if user==frappe.session.user and frappe.session.sid: cache.delete_value("session:" + frappe.session.sid) else: - for sid in frappe.conn.sql_list("""select sid from tabSessions + for sid in frappe.db.sql_list("""select sid from tabSessions where user=%s""", (user,)): cache.delete_value("session:" + sid) frappe.defaults.clear_cache(user) else: - for sess in frappe.conn.sql("""select user, sid from tabSessions""", as_dict=1): + for sess in frappe.db.sql("""select user, sid from tabSessions""", as_dict=1): cache.delete_value("lang:" + sess.user) cache.delete_value("session:" + sess.sid) cache.delete_value("bootinfo:" + sess.user) @@ -57,12 +57,12 @@ def clear_cache(user=None): def clear_sessions(user=None, keep_current=False): if not user: user = frappe.session.user - for sid in frappe.conn.sql("""select sid from tabSessions where user=%s""", (user,)): + for sid in frappe.db.sql("""select sid from tabSessions where user=%s""", (user,)): if keep_current and frappe.session.sid==sid[0]: pass else: frappe.cache().delete_value("session:" + sid[0]) - frappe.conn.sql("""delete from tabSessions where sid=%s""", (sid[0],)) + frappe.db.sql("""delete from tabSessions where sid=%s""", (sid[0],)) def get(): """get session boot info""" @@ -125,16 +125,16 @@ class Session: # insert session if self.user!="Guest": - frappe.conn.begin() + frappe.db.begin() self.insert_session_record() # update profile - frappe.conn.sql("""UPDATE tabProfile SET last_login = '%s', last_ip = '%s' + frappe.db.sql("""UPDATE tabProfile SET last_login = '%s', last_ip = '%s' where name='%s'""" % (frappe.utils.now(), frappe.get_request_header('REMOTE_ADDR'), self.data['user'])) - frappe.conn.commit() + frappe.db.commit() def insert_session_record(self): - frappe.conn.sql("""insert into tabSessions + frappe.db.sql("""insert into tabSessions (sessiondata, user, lastupdate, sid, status) values (%s , %s, NOW(), %s, 'Active')""", (str(self.data['data']), self.data['user'], self.data['sid'])) @@ -189,7 +189,7 @@ class Session: return data and data.data def get_session_data_from_db(self): - rec = frappe.conn.sql("""select user, sessiondata + rec = frappe.db.sql("""select user, sessiondata from tabSessions where sid=%s and TIMEDIFF(NOW(), lastupdate) < TIME(%s)""", (self.sid, self.get_expiry_period())) @@ -209,7 +209,7 @@ class Session: def delete_session(self): frappe.cache().delete_value("session:" + self.sid) - r = frappe.conn.sql("""delete from tabSessions where sid=%s""", (self.sid,)) + r = frappe.db.sql("""delete from tabSessions where sid=%s""", (self.sid,)) def start_as_guest(self): """all guests share the same 'Guest' session""" @@ -233,7 +233,7 @@ class Session: if force or (frappe.session['user'] != 'Guest' and \ ((time_diff==None) or (time_diff > 1800))): # database persistence is secondary, don't update it too often - frappe.conn.sql("""update tabSessions set sessiondata=%s, + frappe.db.sql("""update tabSessions set sessiondata=%s, lastupdate=NOW() where sid=%s""" , (str(self.data['data']), self.data['sid'])) diff --git a/frappe/templates/generators/blog_post.py b/frappe/templates/generators/blog_post.py index 7e137c666e..5726481a9d 100644 --- a/frappe/templates/generators/blog_post.py +++ b/frappe/templates/generators/blog_post.py @@ -29,9 +29,9 @@ def get_context(context): blog_post.description = blog_post.blog_intro or blog_post.content[:140] blog_post.meta_description = blog_post.description - blog_post.categories = frappe.conn.sql_list("select name from `tabBlog Category` order by name") + blog_post.categories = frappe.db.sql_list("select name from `tabBlog Category` order by name") - blog_post.comment_list = frappe.conn.sql("""\ + blog_post.comment_list = frappe.db.sql("""\ select comment, comment_by_fullname, creation from `tabComment` where comment_doctype="Blog Post" and comment_docname=%s order by creation""", (blog_post.name,), as_dict=1) or [] @@ -62,7 +62,7 @@ def get_blog_list(start=0, by=None, category=None): order by published_on desc, name asc limit %(start)s, 20""" % {"start": start, "condition": condition} - result = frappe.conn.sql(query, as_dict=1) + result = frappe.db.sql(query, as_dict=1) # strip html tags from content for res in result: diff --git a/frappe/templates/generators/web_page.py b/frappe/templates/generators/web_page.py index 2847f17da9..8dbc2a77ce 100644 --- a/frappe/templates/generators/web_page.py +++ b/frappe/templates/generators/web_page.py @@ -23,7 +23,7 @@ def get_context(context): web_page.doc.links = get_navigation_links(web_page) if web_page.doc.enable_comments: - web_page.doc.comment_list = frappe.conn.sql("""select + web_page.doc.comment_list = frappe.db.sql("""select comment, comment_by_fullname, creation from `tabComment` where comment_doctype="Web Page" and comment_docname=%s order by creation""", web_page.doc.name, as_dict=1) or [] @@ -41,7 +41,7 @@ def get_breadcrumbs(web_page): breadcrumbs = [] def add_parent_of(web_page): - parent = frappe.conn.sql("""select name, page_name, title from `tabWeb Page` + parent = frappe.db.sql("""select name, page_name, title from `tabWeb Page` where exists (select parent from `tabTable of Contents` where `tabTable of Contents`.parent=`tabWeb Page`.name and web_page=%s)""", web_page, as_dict=True) @@ -58,7 +58,7 @@ def get_toc_list(web_page): toc_list = web_page.doclist.get({"parentfield": "toc"}) if not toc_list: return [] - out = frappe.conn.sql("""select name, page_name, title + out = frappe.db.sql("""select name, page_name, title from `tabWeb Page` where name in (%s)""" % \ (", ".join(["%s"]*len(toc_list))), tuple([d.web_page for d in toc_list]), diff --git a/frappe/templates/generators/website_group.py b/frappe/templates/generators/website_group.py index b04560f6a2..496fdede31 100644 --- a/frappe/templates/generators/website_group.py +++ b/frappe/templates/generators/website_group.py @@ -74,7 +74,7 @@ def build_view_context(context): context.profile = frappe.doc("Profile", context.post.assigned_to) elif context.view.name == "settings": - context.profiles = frappe.conn.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin` + context.profiles = frappe.db.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin` from `tabProfile` p, `tabWebsite Route Permission` wsp where wsp.website_route=%s and wsp.profile=p.name""", context.pathname, as_dict=True) @@ -119,12 +119,12 @@ def has_access(access, view): def clear_cache(path=None, website_group=None): from frappe.templates.website_group.post import clear_post_cache if path: - website_groups = [frappe.conn.get_value("Website Route", path, "docname")] + website_groups = [frappe.db.get_value("Website Route", path, "docname")] elif website_group: website_groups = [website_group] else: clear_post_cache() - website_groups = frappe.conn.sql_list("""select name from `tabWebsite Group`""") + website_groups = frappe.db.sql_list("""select name from `tabWebsite Group`""") cache = frappe.cache() all_views = get_views() @@ -133,14 +133,14 @@ def clear_cache(path=None, website_group=None): cache.delete_value("website_group_context:{}:{}".format(group, view)) def clear_event_cache(): - for group in frappe.conn.sql_list("""select name from `tabWebsite Group` where group_type='Event'"""): + for group in frappe.db.sql_list("""select name from `tabWebsite Group` where group_type='Event'"""): clear_unit_views(website_group=group) def clear_cache_on_bean_event(bean, method, *args, **kwargs): clear_cache(path=bean.doc.website_route, website_group=bean.doc.website_group) def get_pathname(group): - return frappe.conn.get_value("Website Route", {"ref_doctype": "Website Group", + return frappe.db.get_value("Website Route", {"ref_doctype": "Website Group", "docname": group}) views = { diff --git a/frappe/templates/includes/comments.py b/frappe/templates/includes/comments.py index 7f13e25b1e..4f1b3d5697 100644 --- a/frappe/templates/includes/comments.py +++ b/frappe/templates/includes/comments.py @@ -38,11 +38,11 @@ def add_comment(args=None): clear_cache(page_name) # notify commentors - commentors = [d[0] for d in frappe.conn.sql("""select comment_by from tabComment where + commentors = [d[0] for d in frappe.db.sql("""select comment_by from tabComment where comment_doctype=%s and comment_docname=%s and ifnull(unsubscribed, 0)=0""", (comment.doc.comment_doctype, comment.doc.comment_docname))] - owner = frappe.conn.get_value(comment.doc.comment_doctype, comment.doc.comment_docname, "owner") + owner = frappe.db.get_value(comment.doc.comment_doctype, comment.doc.comment_docname, "owner") from frappe.utils.email_lib.bulk import send send(recipients=list(set(commentors + [owner])), diff --git a/frappe/templates/pages/contact.py b/frappe/templates/pages/contact.py index 5676be3a28..8e37faca8d 100644 --- a/frappe/templates/pages/contact.py +++ b/frappe/templates/pages/contact.py @@ -34,13 +34,13 @@ def send_message(subject="Website Query", message="", sender=""): return # guest method, cap max writes per hour - if frappe.conn.sql("""select count(*) from `tabCommunication` + if frappe.db.sql("""select count(*) from `tabCommunication` where TIMEDIFF(%s, modified) < '01:00:00'""", now())[0][0] > max_communications_per_hour: frappe.response["message"] = "Sorry: we believe we have received an unreasonably high number of requests of this kind. Please try later" return # send email - forward_to_email = frappe.conn.get_value("Contact Us Settings", None, "forward_to_email") + forward_to_email = frappe.db.get_value("Contact Us Settings", None, "forward_to_email") if forward_to_email: from frappe.utils.email_lib import sendmail sendmail(forward_to_email, sender, message, subject) diff --git a/frappe/templates/pages/rss.py b/frappe/templates/pages/rss.py index 11fa54a357..f41239473b 100644 --- a/frappe/templates/pages/rss.py +++ b/frappe/templates/pages/rss.py @@ -14,7 +14,7 @@ def get_context(context): host = get_request_site_address() - blog_list = frappe.conn.sql("""\ + blog_list = frappe.db.sql("""\ select page_name as name, published_on, modified, title, content from `tabBlog Post` where ifnull(published,0)=1 order by published_on desc limit 20""", as_dict=1) diff --git a/frappe/templates/pages/sitemap.py b/frappe/templates/pages/sitemap.py index f9014d6cba..3ac8242d79 100644 --- a/frappe/templates/pages/sitemap.py +++ b/frappe/templates/pages/sitemap.py @@ -15,7 +15,7 @@ def get_context(context): """generate the sitemap XML""" host = get_request_site_address() links = [] - for l in frappe.conn.sql("""select `tabWebsite Route`.page_name, `tabWebsite Route`.lastmod + for l in frappe.db.sql("""select `tabWebsite Route`.page_name, `tabWebsite Route`.lastmod from `tabWebsite Route`, `tabWebsite Template` where `tabWebsite Route`.website_template = `tabWebsite Template`.name diff --git a/frappe/templates/pages/website_script.py b/frappe/templates/pages/website_script.py index a41ee30179..31dc0243e6 100644 --- a/frappe/templates/pages/website_script.py +++ b/frappe/templates/pages/website_script.py @@ -8,10 +8,10 @@ no_sitemap = 1 base_template_path = "templates/pages/website_script.js" def get_context(context): - script_context = { "javascript": frappe.conn.get_value('Website Script', None, 'javascript') } + script_context = { "javascript": frappe.db.get_value('Website Script', None, 'javascript') } if not frappe.conf.developer_mode: - script_context["google_analytics_id"] = frappe.conn.get_value("Website Settings", "Website Settings", + script_context["google_analytics_id"] = frappe.db.get_value("Website Settings", "Website Settings", "google_analytics_id") return script_context diff --git a/frappe/templates/pages/writers.py b/frappe/templates/pages/writers.py index e81cb19a3c..2b3093a551 100644 --- a/frappe/templates/pages/writers.py +++ b/frappe/templates/pages/writers.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe def get_context(context): - bloggers = frappe.conn.sql("""select * from `tabBlogger` + bloggers = frappe.db.sql("""select * from `tabBlogger` where ifnull(posts,0) > 0 and ifnull(disabled,0)=0 order by posts desc""", as_dict=1) @@ -14,7 +14,7 @@ def get_context(context): "texts": { "all_posts_by": "All posts by" }, - "categories": frappe.conn.sql_list("select name from `tabBlog Category` order by name") + "categories": frappe.db.sql_list("select name from `tabBlog Category` order by name") } writers_context.update(frappe.doc("Blog Settings", "Blog Settings").fields) diff --git a/frappe/templates/website_group/forum.py b/frappe/templates/website_group/forum.py index 601b0de1f0..eab00239a0 100644 --- a/frappe/templates/website_group/forum.py +++ b/frappe/templates/website_group/forum.py @@ -12,7 +12,7 @@ def get_post_list_html(group, view, limit_start=0, limit_length=20): # verify permission for paging if frappe.local.form_dict.cmd == "get_post_list_html": - pathname = frappe.conn.get_value("Website Route", + pathname = frappe.db.get_value("Website Route", {"ref_doctype": "Website Group", "docname": group}) access = get_access(pathname) @@ -22,7 +22,7 @@ def get_post_list_html(group, view, limit_start=0, limit_length=20): conditions = "" values = [group] - group_type = frappe.conn.get_value("Website Group", group, "group_type") + group_type = frappe.db.get_value("Website Group", group, "group_type") if group_type == "Events": # should show based on time upto precision of hour # because the current hour should also be in upcoming @@ -52,7 +52,7 @@ def get_post_list_html(group, view, limit_start=0, limit_length=20): values += [int(limit_start), int(limit_length)] - posts = frappe.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name, + posts = frappe.db.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name, (select count(pc.name) from `tabPost` pc where pc.parent_post=p.name) as post_reply_count from `tabPost` p, `tabProfile` pr where p.website_group = %s and pr.name = p.owner and ifnull(p.parent_post, '')='' diff --git a/frappe/templates/website_group/post.py b/frappe/templates/website_group/post.py index d8f949c111..25e359b64d 100644 --- a/frappe/templates/website_group/post.py +++ b/frappe/templates/website_group/post.py @@ -34,7 +34,7 @@ def get_parent_post_html(post, context): .render({"post": post.fields, "view": context.view}) def get_child_posts_html(post, context): - posts = frappe.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name + posts = frappe.db.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name from tabPost p, tabProfile pr where p.parent_post=%s and pr.name = p.owner order by p.creation asc""", (post.name,), as_dict=True) @@ -48,7 +48,7 @@ def get_child_posts_html(post, context): def clear_post_cache(post=None): cache = frappe.cache() - posts = [post] if post else frappe.conn.sql_list("select name from `tabPost`") + posts = [post] if post else frappe.db.sql_list("select name from `tabPost`") for post in posts: cache.delete_value("website_group_post:{}".format(post)) @@ -62,7 +62,7 @@ def add_post(group, content, picture, picture_name, title=None, parent_post=None raise frappe.PermissionError if parent_post: - if frappe.conn.get_value("Post", parent_post, "parent_post"): + if frappe.db.get_value("Post", parent_post, "parent_post"): frappe.throw("Cannot reply to a reply") group = frappe.doc("Website Group", group) @@ -133,13 +133,13 @@ def process_picture(post, picture_name, picture): file_data = save_file(picture_name, picture, "Post", post.doc.name, decode=True) post.doc.picture_url = file_data.file_name or file_data.file_url - frappe.conn.set_value("Post", post.doc.name, "picture_url", post.doc.picture_url) + frappe.db.set_value("Post", post.doc.name, "picture_url", post.doc.picture_url) clear_cache(website_group=post.doc.website_group) @frappe.whitelist() def suggest_user(group, term): """suggest a user that has read permission in this group tree""" - profiles = frappe.conn.sql("""select + profiles = frappe.db.sql("""select pr.name, pr.first_name, pr.last_name, pr.user_image, pr.location from `tabProfile` pr diff --git a/frappe/templates/website_group/settings.py b/frappe/templates/website_group/settings.py index dc3dce7b1b..66233297bf 100644 --- a/frappe/templates/website_group/settings.py +++ b/frappe/templates/website_group/settings.py @@ -13,7 +13,7 @@ def suggest_user(term, group): if not get_access(pathname).get("admin"): raise frappe.PermissionError - profiles = frappe.conn.sql("""select pr.name, pr.first_name, pr.last_name, + profiles = frappe.db.sql("""select pr.name, pr.first_name, pr.last_name, pr.user_image, pr.location from `tabProfile` pr where (pr.first_name like %(term)s or pr.last_name like %(term)s) @@ -45,7 +45,7 @@ def add_sitemap_permission(group, profile): permission.insert(ignore_permissions=True) profile = permission.doc.fields - profile.update(frappe.conn.get_value("Profile", profile.profile, + profile.update(frappe.db.get_value("Profile", profile.profile, ["name", "first_name", "last_name", "user_image", "location"], as_dict=True)) return frappe.get_template("templates/includes/sitemap_permission.html").render({ @@ -64,7 +64,7 @@ def update_permission(group, profile, perm, value): # send email if perm=="admin" and int(value): - group_title = frappe.conn.get_value("Website Route", pathname, "page_title") + group_title = frappe.db.get_value("Website Route", pathname, "page_title") subject = "You have been made Administrator of Group " + group_title @@ -88,7 +88,7 @@ def add_website_group(group, new_group, public_read, public_write, group_type="F if not get_access(get_pathname(group)).get("admin"): raise frappe.PermissionError - parent_website_route = frappe.conn.get_value("Website Route", + parent_website_route = frappe.db.get_value("Website Route", {"ref_doctype": "Website Group", "docname": group}) frappe.bean({ diff --git a/frappe/test_runner.py b/frappe/test_runner.py index c0f8f836d0..9a9fe36e09 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -16,7 +16,7 @@ def main(app=None, module=None, doctype=None, verbose=False): frappe.flags.print_messages = verbose frappe.flags.in_test = True - if not frappe.conn: + if not frappe.db: frappe.connect() if doctype: @@ -80,7 +80,7 @@ def _run_test(path, filename, verbose, test_suite=None, run=True): def make_test_records(doctype, verbose=0): frappe.flags.mute_emails = True - if not frappe.conn: + if not frappe.db: frappe.connect() for options in get_dependencies(doctype): @@ -95,7 +95,7 @@ def make_test_records(doctype, verbose=0): make_test_records_for_doctype(options, verbose) def get_modules(doctype): - module = frappe.conn.get_value("DocType", doctype, "module") + module = frappe.db.get_value("DocType", doctype, "module") try: test_module = load_doctype_module(doctype, module, "test_") if test_module: @@ -173,7 +173,7 @@ def print_mandatory_fields(doctype): print def run_unittest(doctype, verbose=False): - module = frappe.conn.get_value("DocType", doctype, "module") + module = frappe.db.get_value("DocType", doctype, "module") test_module = get_module_name(doctype, module, "test_") make_test_records(doctype, verbose=verbose) test_suite = unittest.TestSuite() diff --git a/frappe/tests/test_db.py b/frappe/tests/test_db.py index a9f8c40ce3..7802d3273e 100644 --- a/frappe/tests/test_db.py +++ b/frappe/tests/test_db.py @@ -10,21 +10,21 @@ class TestDB(unittest.TestCase): def test_get_value(self): from frappe.utils import now_datetime import time - frappe.conn.sql("""delete from `tabProfile` where name not in ('Administrator', 'Guest')""") + frappe.db.sql("""delete from `tabProfile` where name not in ('Administrator', 'Guest')""") now = now_datetime() - self.assertEquals(frappe.conn.get_value("Profile", {"name": ["=", "Administrator"]}), "Administrator") - self.assertEquals(frappe.conn.get_value("Profile", {"name": ["like", "Admin%"]}), "Administrator") - self.assertEquals(frappe.conn.get_value("Profile", {"name": ["!=", "Guest"]}), "Administrator") - self.assertEquals(frappe.conn.get_value("Profile", {"modified": ["<", now]}), "Administrator") - self.assertEquals(frappe.conn.get_value("Profile", {"modified": ["<=", now]}), "Administrator") + self.assertEquals(frappe.db.get_value("Profile", {"name": ["=", "Administrator"]}), "Administrator") + self.assertEquals(frappe.db.get_value("Profile", {"name": ["like", "Admin%"]}), "Administrator") + self.assertEquals(frappe.db.get_value("Profile", {"name": ["!=", "Guest"]}), "Administrator") + self.assertEquals(frappe.db.get_value("Profile", {"modified": ["<", now]}), "Administrator") + self.assertEquals(frappe.db.get_value("Profile", {"modified": ["<=", now]}), "Administrator") time.sleep(2) if "Profile" in frappe.local.test_objects: del frappe.local.test_objects["Profile"] make_test_records("Profile") - self.assertEquals("test1@example.com", frappe.conn.get_value("Profile", {"modified": [">", now]})) - self.assertEquals("test1@example.com", frappe.conn.get_value("Profile", {"modified": [">=", now]})) + self.assertEquals("test1@example.com", frappe.db.get_value("Profile", {"modified": [">", now]})) + self.assertEquals("test1@example.com", frappe.db.get_value("Profile", {"modified": [">=", now]})) \ No newline at end of file diff --git a/frappe/tests/test_email.py b/frappe/tests/test_email.py index 16ef754f4e..1c8bae347d 100644 --- a/frappe/tests/test_email.py +++ b/frappe/tests/test_email.py @@ -11,8 +11,8 @@ make_test_records("Profile") class TestEmail(unittest.TestCase): def setUp(self): - frappe.conn.sql("""update tabProfile set unsubscribed=0""") - frappe.conn.sql("""delete from `tabBulk Email`""") + frappe.db.sql("""update tabProfile set unsubscribed=0""") + frappe.db.sql("""delete from `tabBulk Email`""") def test_send(self): from frappe.utils.email_lib import sendmail @@ -25,7 +25,7 @@ class TestEmail(unittest.TestCase): doctype='Profile', email_field='email', subject='Testing Bulk', message='This is a bulk mail!') - bulk = frappe.conn.sql("""select * from `tabBulk Email` where status='Not Sent'""", as_dict=1) + bulk = frappe.db.sql("""select * from `tabBulk Email` where status='Not Sent'""", as_dict=1) self.assertEquals(len(bulk), 2) self.assertTrue('test@example.com' in [d['recipient'] for d in bulk]) self.assertTrue('test1@example.com' in [d['recipient'] for d in bulk]) @@ -35,7 +35,7 @@ class TestEmail(unittest.TestCase): self.test_bulk() from frappe.utils.email_lib.bulk import flush flush(from_test=True) - bulk = frappe.conn.sql("""select * from `tabBulk Email` where status='Sent'""", as_dict=1) + bulk = frappe.db.sql("""select * from `tabBulk Email` where status='Sent'""", as_dict=1) self.assertEquals(len(bulk), 2) self.assertTrue('test@example.com' in [d['recipient'] for d in bulk]) self.assertTrue('test1@example.com' in [d['recipient'] for d in bulk]) @@ -55,7 +55,7 @@ class TestEmail(unittest.TestCase): doctype='Profile', email_field='email', subject='Testing Bulk', message='This is a bulk mail!') - bulk = frappe.conn.sql("""select * from `tabBulk Email` where status='Not Sent'""", + bulk = frappe.db.sql("""select * from `tabBulk Email` where status='Not Sent'""", as_dict=1) self.assertEquals(len(bulk), 1) self.assertFalse('test@example.com' in [d['recipient'] for d in bulk]) diff --git a/frappe/tests/test_fmt_money.py b/frappe/tests/test_fmt_money.py index 0bce9555a2..8080487531 100644 --- a/frappe/tests/test_fmt_money.py +++ b/frappe/tests/test_fmt_money.py @@ -10,7 +10,7 @@ def fmt_money(amount, precision=None): Convert to string with commas for thousands, millions etc """ - number_format = frappe.conn.get_default("number_format") or "#,###.##" + number_format = frappe.db.get_default("number_format") or "#,###.##" decimal_str, comma_str, precision = get_number_format_info(number_format) @@ -64,7 +64,7 @@ import unittest class TestFmtMoney(unittest.TestCase): def test_standard(self): - frappe.conn.set_default("number_format", "#,###.##") + frappe.db.set_default("number_format", "#,###.##") self.assertEquals(fmt_money(100), "100.00") self.assertEquals(fmt_money(1000), "1,000.00") self.assertEquals(fmt_money(10000), "10,000.00") @@ -75,7 +75,7 @@ class TestFmtMoney(unittest.TestCase): self.assertEquals(fmt_money(1000000000), "1,000,000,000.00") def test_negative(self): - frappe.conn.set_default("number_format", "#,###.##") + frappe.db.set_default("number_format", "#,###.##") self.assertEquals(fmt_money(-100), "-100.00") self.assertEquals(fmt_money(-1000), "-1,000.00") self.assertEquals(fmt_money(-10000), "-10,000.00") @@ -86,7 +86,7 @@ class TestFmtMoney(unittest.TestCase): self.assertEquals(fmt_money(-1000000000), "-1,000,000,000.00") def test_decimal(self): - frappe.conn.set_default("number_format", "#.###,##") + frappe.db.set_default("number_format", "#.###,##") self.assertEquals(fmt_money(-100), "-100,00") self.assertEquals(fmt_money(-1000), "-1.000,00") self.assertEquals(fmt_money(-10000), "-10.000,00") @@ -98,7 +98,7 @@ class TestFmtMoney(unittest.TestCase): def test_lacs(self): - frappe.conn.set_default("number_format", "#,##,###.##") + frappe.db.set_default("number_format", "#,##,###.##") self.assertEquals(fmt_money(100), "100.00") self.assertEquals(fmt_money(1000), "1,000.00") self.assertEquals(fmt_money(10000), "10,000.00") @@ -109,7 +109,7 @@ class TestFmtMoney(unittest.TestCase): self.assertEquals(fmt_money(1000000000), "1,00,00,00,000.00") def test_no_precision(self): - frappe.conn.set_default("number_format", "#,###") + frappe.db.set_default("number_format", "#,###") self.assertEquals(fmt_money(0.3), "0") self.assertEquals(fmt_money(100.3), "100") self.assertEquals(fmt_money(1000.3), "1,000") diff --git a/frappe/translate.py b/frappe/translate.py index e78c6615e6..98b32b3c11 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -21,7 +21,7 @@ import frappe, os, re, codecs, json def get_user_lang(user=None): if not user: user = frappe.session.user - user_lang = frappe.conn.get_value("Profile", user, "language") + user_lang = frappe.db.get_value("Profile", user, "language") return get_lang_dict().get(user_lang!="Loading..." and user_lang or "english") def get_all_languages(): @@ -115,17 +115,17 @@ def get_messages_for_app(app): for m in frappe.local.app_modules[app]]) # doctypes - for name in frappe.conn.sql_list("""select name from tabDocType + for name in frappe.db.sql_list("""select name from tabDocType where module in ({})""".format(modules)): messages.extend(get_messages_from_doctype(name)) # pages - for name in frappe.conn.sql_list("""select name from tabPage + for name in frappe.db.sql_list("""select name from tabPage where module in ({})""".format(modules)): messages.extend(get_messages_from_page(name)) # reports - for name in frappe.conn.sql_list("""select tabReport.name from tabDocType, tabReport + for name in frappe.db.sql_list("""select tabReport.name from tabDocType, tabReport where tabReport.ref_doctype = tabDocType.name and tabDocType.module in ({})""".format(modules)): messages.extend(get_messages_from_report(name)) @@ -166,7 +166,7 @@ def get_messages_from_page(name): def get_messages_from_report(name): report = frappe.doc("Report", name) messages = get_messages_from_page_or_report("Report", name, - frappe.conn.get_value("DocType", report.ref_doctype, "module")) + frappe.db.get_value("DocType", report.ref_doctype, "module")) if report.query: messages.extend(re.findall('"([^:,^"]*):', report.query)) messages.append(report.report_name) @@ -174,7 +174,7 @@ def get_messages_from_report(name): def get_messages_from_page_or_report(doctype, name, module=None): if not module: - module = frappe.conn.get_value(doctype, name, "module") + module = frappe.db.get_value(doctype, name, "module") file_path = frappe.get_module_path(module, doctype, name, name) messages = get_messages_from_file(file_path + ".js") diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 57ddbdfa02..8ede88bc85 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -38,7 +38,7 @@ def get_fullname(profile): frappe.local.fullnames = {} if not frappe.local.fullnames.get(profile): - p = frappe.conn.get_value("Profile", profile, ["first_name", "last_name"], as_dict=True) + p = frappe.db.get_value("Profile", profile, ["first_name", "last_name"], as_dict=True) if p: frappe.local.fullnames[profile] = " ".join(filter(None, [p.get('first_name'), p.get('last_name')])) or profile @@ -105,7 +105,7 @@ def get_traceback(): (unicode((b"").join(trace_list[:-1]), 'utf-8'), unicode(trace_list[-1], 'utf-8')) if frappe.logger: - frappe.logger.error('Db:'+(frappe.conn and frappe.conn.cur_db_name or '') \ + frappe.logger.error('Db:'+(frappe.db and frappe.db.cur_db_name or '') \ + ' - ' + body) return body @@ -176,7 +176,7 @@ def get_user_time_zone(): frappe.local.user_time_zone = frappe.cache().get_value("time_zone") if not frappe.local.user_time_zone: - frappe.local.user_time_zone = frappe.conn.get_value('Control Panel', None, 'time_zone') \ + frappe.local.user_time_zone = frappe.db.get_value('Control Panel', None, 'time_zone') \ or 'Asia/Calcutta' frappe.cache().set_value("time_zone", frappe.local.user_time_zone) @@ -261,7 +261,7 @@ def formatdate(string_date=None): string_date = now_datetime().date() if getattr(frappe.local, "user_format", None) is None: - frappe.local.user_format = frappe.conn.get_default("date_format") + frappe.local.user_format = frappe.db.get_default("date_format") out = frappe.local.user_format @@ -378,7 +378,7 @@ def fmt_money(amount, precision=None, currency=None): """ Convert to string with commas for thousands, millions etc """ - number_format = frappe.conn.get_default("number_format") or "#,###.##" + number_format = frappe.db.get_default("number_format") or "#,###.##" decimal_str, comma_str, precision = get_number_format_info(number_format) @@ -413,7 +413,7 @@ def fmt_money(amount, precision=None, currency=None): amount = minus + amount if currency: - symbol = frappe.conn.get_value("Currency", currency, "symbol") + symbol = frappe.db.get_value("Currency", currency, "symbol") if symbol: amount = symbol + " " + amount @@ -444,15 +444,15 @@ def money_in_words(number, main_currency = None, fraction_currency=None): if not main_currency: main_currency = d.get('currency', 'INR') if not fraction_currency: - fraction_currency = frappe.conn.get_value("Currency", main_currency, "fraction") or "Cent" + fraction_currency = frappe.db.get_value("Currency", main_currency, "fraction") or "Cent" n = "%.2f" % flt(number) main, fraction = n.split('.') if len(fraction)==1: fraction += '0' - number_format = frappe.conn.get_value("Currency", main_currency, "number_format") or \ - frappe.conn.get_default("number_format") or "#,###.##" + number_format = frappe.db.get_value("Currency", main_currency, "number_format") or \ + frappe.db.get_default("number_format") or "#,###.##" in_million = True if number_format == "#,##,###.##": in_million = False @@ -530,13 +530,13 @@ def get_defaults(key=None): """ Get dictionary of default values from the :term:`Control Panel`, or a value if key is passed """ - return frappe.conn.get_defaults(key) + return frappe.db.get_defaults(key) def set_default(key, val): """ Set / add a default value to :term:`Control Panel` """ - return frappe.conn.set_default(key, val) + return frappe.db.set_default(key, val) def remove_blanks(d): """ @@ -688,12 +688,12 @@ def get_doctype_label(dt=None): Gets label of a doctype """ if dt: - res = frappe.conn.sql("""\ + res = frappe.db.sql("""\ SELECT name, dt_label FROM `tabDocType Label` WHERE name=%s""", dt) return res and res[0][0] or dt else: - res = frappe.conn.sql("SELECT name, dt_label FROM `tabDocType Label`") + res = frappe.db.sql("SELECT name, dt_label FROM `tabDocType Label`") dt_label_dict = {} for r in res: dt_label_dict[r[0]] = r[1] @@ -705,7 +705,7 @@ def get_label_doctype(label): """ Gets doctype from its label """ - res = frappe.conn.sql("""\ + res = frappe.db.sql("""\ SELECT name FROM `tabDocType Label` WHERE dt_label=%s""", label) @@ -823,7 +823,7 @@ def get_backups_path(): def get_url(uri=None): url = get_request_site_address() if not url or "localhost" in url: - subdomain = frappe.conn.get_value("Website Settings", "Website Settings", + subdomain = frappe.db.get_value("Website Settings", "Website Settings", "subdomain") if subdomain: if "http" not in subdomain: diff --git a/frappe/utils/backups.py b/frappe/utils/backups.py index 8d28ca29b1..60346193b3 100644 --- a/frappe/utils/backups.py +++ b/frappe/utils/backups.py @@ -131,10 +131,10 @@ def get_backup(): This function is executed when the user clicks on Toos > Download Backup """ - #if verbose: print frappe.conn.cur_db_name + " " + conf.db_password + #if verbose: print frappe.db.cur_db_name + " " + conf.db_password delete_temp_backups() - odb = BackupGenerator(frappe.conn.cur_db_name, frappe.conn.cur_db_name,\ - frappe.conf.db_password, db_host = frappe.conn.host) + odb = BackupGenerator(frappe.db.cur_db_name, frappe.db.cur_db_name,\ + frappe.conf.db_password, db_host = frappe.db.host) odb.get_backup() recipient_list = odb.send_email() frappe.msgprint("""A download link to your backup will be emailed \ @@ -150,9 +150,9 @@ def scheduled_backup(older_than=6, ignore_files=False, backup_path_db=None, back def new_backup(older_than=6, ignore_files=False, backup_path_db=None, backup_path_files=None): delete_temp_backups(older_than=168) - odb = BackupGenerator(frappe.conn.cur_db_name, frappe.conn.cur_db_name,\ + odb = BackupGenerator(frappe.db.cur_db_name, frappe.db.cur_db_name,\ frappe.conf.db_password, - backup_path_db=backup_path_db, backup_path_files=backup_path_files, db_host = frappe.conn.host) + backup_path_db=backup_path_db, backup_path_files=backup_path_files, db_host = frappe.db.host) odb.get_backup(older_than, ignore_files) return odb diff --git a/frappe/utils/datautils.py b/frappe/utils/datautils.py index 688d185124..028391acdd 100644 --- a/frappe/utils/datautils.py +++ b/frappe/utils/datautils.py @@ -18,7 +18,7 @@ def read_csv_content_from_uploaded_file(ignore_encoding=False): return read_csv_content(fcontent, ignore_encoding) def read_csv_content_from_attached_file(doc): - fileid = frappe.conn.get_value("File Data", {"attached_to_doctype": doc.doctype, + fileid = frappe.db.get_value("File Data", {"attached_to_doctype": doc.doctype, "attached_to_name":doc.name}, "name") if not fileid: msgprint("File not attached!") @@ -111,7 +111,7 @@ def check_record(d, parenttype=None, doctype_dl=None): if docfield.fieldtype=='Select' and val and docfield.options: if docfield.options.startswith('link:'): link_doctype = docfield.options.split(':')[1] - if not frappe.conn.exists(link_doctype, val): + if not frappe.db.exists(link_doctype, val): frappe.msgprint("%s: %s must be a valid %s" % (docfield.label, val, link_doctype), raise_exception=1) elif docfield.options == "attach_files:": @@ -130,7 +130,7 @@ def check_record(d, parenttype=None, doctype_dl=None): def import_doc(d, doctype, overwrite, row_idx, submit=False, ignore_links=False): """import main (non child) document""" - if d.get("name") and frappe.conn.exists(doctype, d['name']): + if d.get("name") and frappe.db.exists(doctype, d['name']): if overwrite: bean = frappe.bean(doctype, d['name']) bean.ignore_links = ignore_links diff --git a/frappe/utils/email_lib/__init__.py b/frappe/utils/email_lib/__init__.py index b86135a176..58620b09e4 100644 --- a/frappe/utils/email_lib/__init__.py +++ b/frappe/utils/email_lib/__init__.py @@ -26,7 +26,7 @@ def get_contact_list(): """Returns contacts (from autosuggest)""" cond = ['`%s` like "%s%%"' % (f, frappe.form_dict.get('txt')) for f in frappe.form_dict.get('where').split(',')] - cl = frappe.conn.sql("select `%s` from `tab%s` where %s" % ( + cl = frappe.db.sql("select `%s` from `tab%s` where %s" % ( frappe.form_dict.get('select') ,frappe.form_dict.get('from') ,' OR '.join(cond) @@ -35,7 +35,7 @@ def get_contact_list(): frappe.response['cl'] = filter(None, [c[0] for c in cl]) def get_system_managers(): - return frappe.conn.sql_list("""select parent FROM tabUserRole + return frappe.db.sql_list("""select parent FROM tabUserRole WHERE role='System Manager' AND parent!='Administrator' AND parent IN diff --git a/frappe/utils/email_lib/bulk.py b/frappe/utils/email_lib/bulk.py index 43c8a21d92..2b1eaa06eb 100644 --- a/frappe/utils/email_lib/bulk.py +++ b/frappe/utils/email_lib/bulk.py @@ -22,7 +22,7 @@ def send(recipients=None, sender=None, doctype='Profile', email_field='email', return cint(rdata.unsubscribed) def check_bulk_limit(new_mails): - this_month = frappe.conn.sql("""select count(*) from `tabBulk Email` where + this_month = frappe.db.sql("""select count(*) from `tabBulk Email` where month(creation)=month(%s)""" % nowdate())[0][0] monthly_bulk_mail_limit = frappe.conf.get('monthly_bulk_mail_limit') or 500 @@ -54,13 +54,13 @@ def send(recipients=None, sender=None, doctype='Profile', email_field='email', if not recipients: recipients = [] if not sender or sender == "Administrator": - sender = frappe.conn.get_value('Email Settings', None, 'auto_email_id') + sender = frappe.db.get_value('Email Settings', None, 'auto_email_id') check_bulk_limit(len(recipients)) formatted = get_formatted_html(subject, message) for r in filter(None, list(set(recipients))): - rdata = frappe.conn.sql("""select * from `tab%s` where %s=%s""" % (doctype, + rdata = frappe.db.sql("""select * from `tab%s` where %s=%s""" % (doctype, email_field, '%s'), (r,), as_dict=1) doc = rdata and rdata[0] or {} @@ -99,11 +99,11 @@ def unsubscribe(): field = frappe.form_dict.get('email_field') email = frappe.form_dict.get('email') - frappe.conn.sql("""update `tab%s` set unsubscribed=1 + frappe.db.sql("""update `tab%s` set unsubscribed=1 where `%s`=%s""" % (doctype, field, '%s'), (email,)) if not frappe.form_dict.get("from_test"): - frappe.conn.commit() + frappe.db.commit() frappe.local.message_title = "Unsubscribe" frappe.local.message = "

Unsubscribed

%s has been successfully unsubscribed.

" % email @@ -122,27 +122,27 @@ def flush(from_test=False): from_test = True for i in xrange(500): - email = frappe.conn.sql("""select * from `tabBulk Email` where + email = frappe.db.sql("""select * from `tabBulk Email` where status='Not Sent' limit 1 for update""", as_dict=1) if email: email = email[0] else: break - frappe.conn.sql("""update `tabBulk Email` set status='Sending' where name=%s""", + frappe.db.sql("""update `tabBulk Email` set status='Sending' where name=%s""", (email["name"],), auto_commit=auto_commit) try: if not from_test: smtpserver.sess.sendmail(email["sender"], email["recipient"], email["message"]) - frappe.conn.sql("""update `tabBulk Email` set status='Sent' where name=%s""", + frappe.db.sql("""update `tabBulk Email` set status='Sent' where name=%s""", (email["name"],), auto_commit=auto_commit) except Exception, e: - frappe.conn.sql("""update `tabBulk Email` set status='Error', error=%s + frappe.db.sql("""update `tabBulk Email` set status='Error', error=%s where name=%s""", (unicode(e), email["name"]), auto_commit=auto_commit) def clear_outbox(): """remove mails older than 30 days in Outbox""" - frappe.conn.sql("""delete from `tabBulk Email` where + frappe.db.sql("""delete from `tabBulk Email` where datediff(now(), creation) > 30""") diff --git a/frappe/utils/email_lib/email_body.py b/frappe/utils/email_lib/email_body.py index 77c98a49eb..6f374f82ec 100644 --- a/frappe/utils/email_lib/email_body.py +++ b/frappe/utils/email_lib/email_body.py @@ -159,7 +159,7 @@ class EMail: return email if not self.sender: - self.sender = frappe.conn.get_value('Email Settings', None, + self.sender = frappe.db.get_value('Email Settings', None, 'auto_email_id') or frappe.conf.get('auto_email_id') or None if not self.sender: msgprint(_("Please specify 'Auto Email Id' in Setup > Email Settings")) @@ -211,7 +211,7 @@ def get_footer(footer=None): footer = footer or "" # control panel - footer += frappe.conn.get_value('Control Panel', None, 'mail_footer') or '' + footer += frappe.db.get_value('Control Panel', None, 'mail_footer') or '' # hooks for f in frappe.get_hooks("mail_footer"): diff --git a/frappe/utils/email_lib/receive.py b/frappe/utils/email_lib/receive.py index e27a8379bd..82958cb4aa 100644 --- a/frappe/utils/email_lib/receive.py +++ b/frappe/utils/email_lib/receive.py @@ -149,7 +149,7 @@ class POP3Mailbox: if not self.check_mails(): return # nothing to do - frappe.conn.commit() + frappe.db.commit() self.connect() try: @@ -193,9 +193,9 @@ class POP3Mailbox: msg = self.pop.retr(msg_num) incoming_mail = IncomingMail(b'\n'.join(msg[1])) - frappe.conn.begin() + frappe.db.begin() self.process_message(incoming_mail) - frappe.conn.commit() + frappe.db.commit() except (TotalSizeExceededError, EmailTimeoutError): # propagate this error to break the loop @@ -205,7 +205,7 @@ class POP3Mailbox: # log performs rollback and logs error in scheduler log log("receive.get_messages", self.make_error_msg(msg_num, incoming_mail)) self.errors = True - frappe.conn.rollback() + frappe.db.rollback() self.pop.dele(msg_num) else: diff --git a/frappe/utils/file_manager.py b/frappe/utils/file_manager.py index 2645f93a99..f61d901d26 100644 --- a/frappe/utils/file_manager.py +++ b/frappe/utils/file_manager.py @@ -11,7 +11,7 @@ from frappe import conf class MaxFileSizeReachedError(frappe.ValidationError): pass def get_file_url(file_data_name): - data = frappe.conn.get_value("File Data", file_data_name, ["file_name", "file_url"], as_dict=True) + data = frappe.db.get_value("File Data", file_data_name, ["file_name", "file_url"], as_dict=True) return data.file_name or data.file_url def upload(): @@ -96,7 +96,7 @@ def save_file(fname, content, dt, dn, decode=False): import filecmp from frappe.model.code import load_doctype_module files_path = os.path.join(frappe.local.site_path, "public", "files") - module = load_doctype_module(dt, frappe.conn.get_value("DocType", dt, "module")) + module = load_doctype_module(dt, frappe.db.get_value("DocType", dt, "module")) if hasattr(module, "attachments_folder"): files_path = os.path.join(files_path, module.attachments_folder) @@ -211,7 +211,7 @@ def write_file(content, files_path): def remove_all(dt, dn): """remove all files in a transaction""" try: - for fid in frappe.conn.sql_list("""select name from `tabFile Data` where + for fid in frappe.db.sql_list("""select name from `tabFile Data` where attached_to_doctype=%s and attached_to_name=%s""", (dt, dn)): remove_file(fid) except Exception, e: @@ -222,7 +222,7 @@ def remove_file(fid): frappe.delete_doc("File Data", fid) def get_file(fname): - f = frappe.conn.sql("""select file_name from `tabFile Data` + f = frappe.db.sql("""select file_name from `tabFile Data` where name=%s or file_name=%s""", (fname, fname)) if f: file_name = f[0][0] diff --git a/frappe/utils/install.py b/frappe/utils/install.py index 563165236e..14e1f078b9 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -12,7 +12,7 @@ def before_install(): def after_install(): # reset installed apps for re-install - frappe.conn.set_global("installed_apps", '["frappe"]') + frappe.db.set_global("installed_apps", '["frappe"]') # core users / roles install_docs = [ @@ -34,11 +34,11 @@ def after_install(): pass # all roles to admin - frappe.bean("Profile", "Administrator").get_controller().add_roles(*frappe.conn.sql_list(""" + frappe.bean("Profile", "Administrator").get_controller().add_roles(*frappe.db.sql_list(""" select name from tabRole""")) # update admin password from frappe.auth import _update_password _update_password("Administrator", frappe.conf.get("admin_password")) - frappe.conn.commit() + frappe.db.commit() diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index bb11dfaf3e..58697b36ab 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -49,7 +49,7 @@ def update_nsm(doc_obj): # set old parent d.fields[opf] = p - frappe.conn.set_value(d.doctype, d.name, opf, p or '') + frappe.db.set_value(d.doctype, d.name, opf, p or '') # reload d._loadfromdb() @@ -66,23 +66,23 @@ def update_add_node(doc, parent, parent_field): # get the last sibling of the parent if parent: - left, right = frappe.conn.sql("select lft, rgt from `tab%s` where name=%s" \ + left, right = frappe.db.sql("select lft, rgt from `tab%s` where name=%s" \ % (doctype, "%s"), parent)[0] validate_loop(doc.doctype, doc.name, left, right) else: # root - right = frappe.conn.sql("select ifnull(max(rgt),0)+1 from `tab%s` where ifnull(`%s`,'') =''" % (doctype, parent_field))[0][0] + right = frappe.db.sql("select ifnull(max(rgt),0)+1 from `tab%s` where ifnull(`%s`,'') =''" % (doctype, parent_field))[0][0] right = right or 1 # update all on the right - frappe.conn.sql("update `tab%s` set rgt = rgt+2, modified='%s' where rgt >= %s" %(doctype,n,right)) - frappe.conn.sql("update `tab%s` set lft = lft+2, modified='%s' where lft >= %s" %(doctype,n,right)) + frappe.db.sql("update `tab%s` set rgt = rgt+2, modified='%s' where rgt >= %s" %(doctype,n,right)) + frappe.db.sql("update `tab%s` set lft = lft+2, modified='%s' where lft >= %s" %(doctype,n,right)) # update index of new node - if frappe.conn.sql("select * from `tab%s` where lft=%s or rgt=%s"% (doctype, right, right+1)): + if frappe.db.sql("select * from `tab%s` where lft=%s or rgt=%s"% (doctype, right, right+1)): frappe.msgprint("Nested set error. Please send mail to support") raise Exception - frappe.conn.sql("update `tab%s` set lft=%s, rgt=%s, modified='%s' where name='%s'" % (doctype,right,right+1,n,name)) + frappe.db.sql("update `tab%s` set lft=%s, rgt=%s, modified='%s' where name='%s'" % (doctype,right,right+1,n,name)) return right @@ -90,41 +90,41 @@ def update_move_node(doc, parent_field): parent = doc.fields.get(parent_field) if parent: - new_parent = frappe.conn.sql("""select lft, rgt from `tab%s` + new_parent = frappe.db.sql("""select lft, rgt from `tab%s` where name = %s""" % (doc.doctype, '%s'), parent, as_dict=1)[0] validate_loop(doc.doctype, doc.name, new_parent.lft, new_parent.rgt) # move to dark side - frappe.conn.sql("""update `tab%s` set lft = -lft, rgt = -rgt + frappe.db.sql("""update `tab%s` set lft = -lft, rgt = -rgt where lft >= %s and rgt <= %s"""% (doc.doctype, '%s', '%s'), (doc.lft, doc.rgt)) # shift left diff = doc.rgt - doc.lft + 1 - frappe.conn.sql("""update `tab%s` set lft = lft -%s, rgt = rgt - %s + frappe.db.sql("""update `tab%s` set lft = lft -%s, rgt = rgt - %s where lft > %s"""% (doc.doctype, '%s', '%s', '%s'), (diff, diff, doc.rgt)) # shift left rgts of ancestors whose only rgts must shift - frappe.conn.sql("""update `tab%s` set rgt = rgt - %s + frappe.db.sql("""update `tab%s` set rgt = rgt - %s where lft < %s and rgt > %s"""% (doc.doctype, '%s', '%s', '%s'), (diff, doc.lft, doc.rgt)) if parent: - new_parent = frappe.conn.sql("""select lft, rgt from `tab%s` + new_parent = frappe.db.sql("""select lft, rgt from `tab%s` where name = %s""" % (doc.doctype, '%s'), parent, as_dict=1)[0] # set parent lft, rgt - frappe.conn.sql("""update `tab%s` set rgt = rgt + %s + frappe.db.sql("""update `tab%s` set rgt = rgt + %s where name = %s"""% (doc.doctype, '%s', '%s'), (diff, parent)) # shift right at new parent - frappe.conn.sql("""update `tab%s` set lft = lft + %s, rgt = rgt + %s + frappe.db.sql("""update `tab%s` set lft = lft + %s, rgt = rgt + %s where lft > %s""" % (doc.doctype, '%s', '%s', '%s'), (diff, diff, new_parent.rgt)) # shift right rgts of ancestors whose only rgts must shift - frappe.conn.sql("""update `tab%s` set rgt = rgt + %s + frappe.db.sql("""update `tab%s` set rgt = rgt + %s where lft < %s and rgt > %s""" % (doc.doctype, '%s', '%s', '%s'), (diff, new_parent.lft, new_parent.rgt)) @@ -132,11 +132,11 @@ def update_move_node(doc, parent_field): new_diff = new_parent.rgt - doc.lft else: # new root - max_rgt = frappe.conn.sql("""select max(rgt) from `tab%s`""" % doc.doctype)[0][0] + max_rgt = frappe.db.sql("""select max(rgt) from `tab%s`""" % doc.doctype)[0][0] new_diff = max_rgt + 1 - doc.lft # bring back from dark side - frappe.conn.sql("""update `tab%s` set lft = -lft + %s, rgt = -rgt + %s + frappe.db.sql("""update `tab%s` set lft = -lft + %s, rgt = -rgt + %s where lft < 0"""% (doc.doctype, '%s', '%s'), (new_diff, new_diff)) def rebuild_tree(doctype, parent_field): @@ -144,14 +144,14 @@ def rebuild_tree(doctype, parent_field): call rebuild_node for all root nodes """ # get all roots - frappe.conn.auto_commit_on_many_writes = 1 + frappe.db.auto_commit_on_many_writes = 1 right = 1 - result = frappe.conn.sql("SELECT name FROM `tab%s` WHERE `%s`='' or `%s` IS NULL ORDER BY name ASC" % (doctype, parent_field, parent_field)) + result = frappe.db.sql("SELECT name FROM `tab%s` WHERE `%s`='' or `%s` IS NULL ORDER BY name ASC" % (doctype, parent_field, parent_field)) for r in result: right = rebuild_node(doctype, r[0], right, parent_field) - frappe.conn.auto_commit_on_many_writes = 0 + frappe.db.auto_commit_on_many_writes = 0 def rebuild_node(doctype, parent, left, parent_field): """ @@ -164,13 +164,13 @@ def rebuild_node(doctype, parent, left, parent_field): right = left+1 # get all children of this node - result = frappe.conn.sql("SELECT name FROM `tab%s` WHERE `%s`='%s'" % (doctype, parent_field, parent)) + result = frappe.db.sql("SELECT name FROM `tab%s` WHERE `%s`='%s'" % (doctype, parent_field, parent)) for r in result: right = rebuild_node(doctype, r[0], right, parent_field) # we've got the left value, and now that we've processed # the children of this node we also know the right value - frappe.conn.sql("UPDATE `tab%s` SET lft=%s, rgt=%s, modified='%s' WHERE name='%s'" % (doctype,left,right,n,parent)) + frappe.db.sql("UPDATE `tab%s` SET lft=%s, rgt=%s, modified='%s' WHERE name='%s'" % (doctype,left,right,n,parent)) #return the right value of this node + 1 return right+1 @@ -178,7 +178,7 @@ def rebuild_node(doctype, parent, left, parent_field): def validate_loop(doctype, name, lft, rgt): """check if item not an ancestor (loop)""" - if name in frappe.conn.sql_list("""select name from `tab%s` where lft <= %s and rgt >= %s""" % (doctype, + if name in frappe.db.sql_list("""select name from `tab%s` where lft <= %s and rgt >= %s""" % (doctype, "%s", "%s"), (lft, rgt)): frappe.throw("""Item cannot be added to its own descendents.""", NestedSetRecursionError) @@ -196,7 +196,7 @@ class DocTypeNestedSet(object): msgprint(_("Root ") + self.doc.doctype + _(" cannot be deleted."), raise_exception=1) # cannot delete non-empty group - has_children = frappe.conn.sql("""select count(name) from `tab{doctype}` + has_children = frappe.db.sql("""select count(name) from `tab{doctype}` where `{nsm_parent_field}`=%s""".format(doctype=self.doc.doctype, nsm_parent_field=self.nsm_parent_field), (self.doc.name,))[0][0] if has_children: @@ -209,7 +209,7 @@ class DocTypeNestedSet(object): def before_rename(self, olddn, newdn, merge=False, group_fname="is_group"): if merge: - is_group = frappe.conn.get_value(self.doc.doctype, newdn, group_fname) + is_group = frappe.db.get_value(self.doc.doctype, newdn, group_fname) if self.doc.fields[group_fname] != is_group: frappe.throw(_("""Merging is only possible between Group-to-Group or Ledger-to-Ledger"""), NestedSetInvalidMergeError) @@ -221,27 +221,27 @@ class DocTypeNestedSet(object): def validate_one_root(self): if not self.doc.fields[self.nsm_parent_field]: - if frappe.conn.sql("""select count(*) from `tab%s` where + if frappe.db.sql("""select count(*) from `tab%s` where ifnull(%s, '')=''""" % (self.doc.doctype, self.nsm_parent_field))[0][0] > 1: frappe.throw(_("""Multiple root nodes not allowed."""), NestedSetMultipleRootsError) def validate_ledger(self, group_identifier="is_group"): if self.doc.fields.get(group_identifier) == "No": - if frappe.conn.sql("""select name from `tab%s` where %s=%s and docstatus!=2""" % + if frappe.db.sql("""select name from `tab%s` where %s=%s and docstatus!=2""" % (self.doc.doctype, self.nsm_parent_field, '%s'), (self.doc.name)): frappe.throw(self.doc.doctype + ": " + self.doc.name + _(" can not be marked as a ledger as it has existing child")) def get_root_of(doctype): """Get root element of a DocType with a tree structure""" - result = frappe.conn.sql_list("""select name from `tab%s` + result = frappe.db.sql_list("""select name from `tab%s` where lft=1 and rgt=(select max(rgt) from `tab%s` where docstatus < 2)""" % (doctype, doctype)) return result[0] if result else None def get_ancestors_of(doctype, name): """Get ancestor elements of a DocType with a tree structure""" - lft, rgt = frappe.conn.get_value(doctype, name, ["lft", "rgt"]) - result = frappe.conn.sql_list("""select name from `tab%s` + lft, rgt = frappe.db.get_value(doctype, name, ["lft", "rgt"]) + result = frappe.db.sql_list("""select name from `tab%s` where lft<%s and rgt>%s order by lft desc""" % (doctype, "%s", "%s"), (lft, rgt)) return result or [] diff --git a/frappe/utils/response.py b/frappe/utils/response.py index 5e58e17ed7..788871b19a 100644 --- a/frappe/utils/response.py +++ b/frappe/utils/response.py @@ -16,7 +16,7 @@ def report_error(status_code): frappe.errprint(frappe.utils.get_traceback()) frappe._response.status_code = status_code if frappe.request_method == "POST": - frappe.conn.rollback() + frappe.db.rollback() def build_response(): print_map = { diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 8b9930df9d..0035a484ec 100644 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -29,18 +29,18 @@ def execute(site=None): format = '%Y-%m-%d %H:%M:%S' - if not frappe.conn: + if not frappe.db: frappe.connect(site=site) out = [] nowtime = frappe.utils.now_datetime() - last = frappe.conn.get_global('scheduler_last_event') + last = frappe.db.get_global('scheduler_last_event') # set scheduler last event - frappe.conn.begin() - frappe.conn.set_global('scheduler_last_event', nowtime.strftime(format)) - frappe.conn.commit() + frappe.db.begin() + frappe.db.set_global('scheduler_last_event', nowtime.strftime(format)) + frappe.db.commit() if last: last = datetime.strptime(last, format) @@ -71,11 +71,11 @@ def trigger(method): if method==event_name: try: frappe.get_attr(handler)() - frappe.conn.commit() + frappe.db.commit() except Exception: traceback += log("Method: {method}, Handler: {handler}".format(method=method, handler=handler)) traceback += log(frappe.get_traceback()) - frappe.conn.rollback() + frappe.db.rollback() return traceback or 'ok' @@ -84,23 +84,23 @@ def log(method, message=None): message = frappe.utils.cstr(message) + "\n" if message else "" message += frappe.get_traceback() - if not (frappe.conn and frappe.conn._conn): + if not (frappe.db and frappe.db._conn): frappe.connect() - frappe.conn.rollback() - frappe.conn.begin() + frappe.db.rollback() + frappe.db.begin() d = frappe.doc("Scheduler Log") d.method = method d.error = message d.save() - frappe.conn.commit() + frappe.db.commit() return message def get_errors(from_date, to_date, limit): - errors = frappe.conn.sql("""select modified, method, error from `tabScheduler Log` + errors = frappe.db.sql("""select modified, method, error from `tabScheduler Log` where date(modified) between %s and %s and error not like '%%[Errno 110] Connection timed out%%' order by modified limit %s""", (from_date, to_date, limit), as_dict=True) diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index c60b7819ee..9eb63c937e 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -28,11 +28,11 @@ class DocType(WebsiteGenerator): if self.doc.published and not self.doc.published_on: self.doc.published_on = today() - self.doc.parent_website_route = frappe.conn.get_value("Website Route", + self.doc.parent_website_route = frappe.db.get_value("Website Route", {"ref_doctype": "Blog Category", "docname": self.doc.blog_category}) # update posts - frappe.conn.sql("""update tabBlogger set posts=(select count(*) from `tabBlog Post` + frappe.db.sql("""update tabBlogger set posts=(select count(*) from `tabBlog Post` where ifnull(blogger,'')=tabBlogger.name) where name=%s""", (self.doc.blogger,)) @@ -42,7 +42,7 @@ class DocType(WebsiteGenerator): clear_cache("writers") def clear_blog_cache(): - for blog in frappe.conn.sql_list("""select page_name from + for blog in frappe.db.sql_list("""select page_name from `tabBlog Post` where ifnull(published,0)=1"""): clear_cache(blog) diff --git a/frappe/website/doctype/blog_post/test_blog_post.py b/frappe/website/doctype/blog_post/test_blog_post.py index d12c7b71b5..bb81b59320 100644 --- a/frappe/website/doctype/blog_post/test_blog_post.py +++ b/frappe/website/doctype/blog_post/test_blog_post.py @@ -32,9 +32,9 @@ from frappe.core.page.user_properties.user_properties import add, remove, get_pr test_dependencies = ["Profile"] class TestBlogPost(unittest.TestCase): def setUp(self): - frappe.conn.sql("""update tabDocPerm set `restricted`=0 where parent='Blog Post' + frappe.db.sql("""update tabDocPerm set `restricted`=0 where parent='Blog Post' and ifnull(permlevel,0)=0""") - frappe.conn.sql("""update `tabBlog Post` set owner='test2@example.com' + frappe.db.sql("""update `tabBlog Post` set owner='test2@example.com' where name='_test-blog-post'""") frappe.clear_cache(doctype="Blog Post") @@ -84,7 +84,7 @@ class TestBlogPost(unittest.TestCase): self.assertEquals(doc.get("blog_category"), "_Test Blog Category 1") def add_restricted_on_blogger(self): - frappe.conn.sql("""update tabDocPerm set `restricted`=1 where parent='Blog Post' and role='Blogger' + frappe.db.sql("""update tabDocPerm set `restricted`=1 where parent='Blog Post' and role='Blogger' and ifnull(permlevel,0)=0""") frappe.clear_cache(doctype="Blog Post") @@ -100,7 +100,7 @@ class TestBlogPost(unittest.TestCase): self.assertFalse(post1.has_read_perm()) def test_owner_match_report(self): - frappe.conn.sql("""update tabDocPerm set `restricted`=1 where parent='Blog Post' + frappe.db.sql("""update tabDocPerm set `restricted`=1 where parent='Blog Post' and ifnull(permlevel,0)=0""") frappe.clear_cache(doctype="Blog Post") diff --git a/frappe/website/doctype/blogger/blogger.py b/frappe/website/doctype/blogger/blogger.py index 7557926ae6..3b7197cf4b 100644 --- a/frappe/website/doctype/blogger/blogger.py +++ b/frappe/website/doctype/blogger/blogger.py @@ -18,7 +18,7 @@ class DocType: clear_blog_cache() if self.doc.profile: - for blog in frappe.conn.sql_list("""select name from `tabBlog Post` where owner=%s + for blog in frappe.db.sql_list("""select name from `tabBlog Post` where owner=%s and ifnull(blogger,'')=''""", self.doc.profile): b = frappe.bean("Blog Post", blog) b.doc.blogger = self.doc.name diff --git a/frappe/website/doctype/post/post.py b/frappe/website/doctype/post/post.py index 9817eba2d3..cc83b76e2a 100644 --- a/frappe/website/doctype/post/post.py +++ b/frappe/website/doctype/post/post.py @@ -18,7 +18,7 @@ class DocType: if not self.doc.parent_post and not self.doc.title: frappe.throw("Please enter title!") - self.assigned_to = frappe.conn.get_value(self.doc.doctype, self.doc.name, "assigned_to") + self.assigned_to = frappe.db.get_value(self.doc.doctype, self.doc.name, "assigned_to") if self.doc.is_task: if not self.doc.status: self.doc.status = "Open" @@ -72,7 +72,7 @@ class DocType: ref_doctype=self.doc.doctype, ref_docname=self.doc.name) # send email to members who part of the conversation - participants = frappe.conn.sql("""select owner, name from `tabPost` + participants = frappe.db.sql("""select owner, name from `tabPost` where parent_post=%s and owner not in (%s, %s) order by creation asc""", (self.doc.parent_post, parent_post.owner, self.doc.owner), as_dict=True) diff --git a/frappe/website/doctype/user_vote/user_vote.py b/frappe/website/doctype/user_vote/user_vote.py index 5b5af5f608..79b8334305 100644 --- a/frappe/website/doctype/user_vote/user_vote.py +++ b/frappe/website/doctype/user_vote/user_vote.py @@ -12,7 +12,7 @@ class DocType: def validate(self): # if new if self.doc.fields.get("__islocal"): - if frappe.conn.get_value("User Vote", {"ref_doctype": self.doc.ref_doctype, + if frappe.db.get_value("User Vote", {"ref_doctype": self.doc.ref_doctype, "ref_name": self.doc.ref_name, "owner": frappe.session.user}): raise frappe.DuplicateEntryError @@ -24,18 +24,18 @@ class DocType: self.update_ref_count(-1) def update_ref_count(self, cnt=0): - count = frappe.conn.sql("""select count(*) from `tabUser Vote` where ref_doctype=%s and ref_name=%s""", + count = frappe.db.sql("""select count(*) from `tabUser Vote` where ref_doctype=%s and ref_name=%s""", (self.doc.ref_doctype, self.doc.ref_name))[0][0] - frappe.conn.set_value(self.doc.ref_doctype, self.doc.ref_name, "upvotes", count + cnt) + frappe.db.set_value(self.doc.ref_doctype, self.doc.ref_name, "upvotes", count + cnt) def on_doctype_update(): - frappe.conn.add_index("User Vote", ["ref_doctype", "ref_name"]) + frappe.db.add_index("User Vote", ["ref_doctype", "ref_name"]) # don't allow guest to give vote @frappe.whitelist() def set_vote(ref_doctype, ref_name): - website_group = frappe.conn.get_value(ref_doctype, ref_name, "website_group") - pathname = frappe.conn.get_value("Website Route", {"ref_doctype": "Website Group", + website_group = frappe.db.get_value(ref_doctype, ref_name, "website_group") + pathname = frappe.db.get_value("Website Route", {"ref_doctype": "Website Group", "docname": website_group}) if not get_access(pathname).get("read"): diff --git a/frappe/website/doctype/web_page/test_web_page.py b/frappe/website/doctype/web_page/test_web_page.py index f0c5fc114c..aeec26a454 100644 --- a/frappe/website/doctype/web_page/test_web_page.py +++ b/frappe/website/doctype/web_page/test_web_page.py @@ -40,23 +40,23 @@ test_records = [ class TestWebPage(unittest.TestCase): def test_check_sitemap(self): - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-1"}), "test-web-page-1") - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), "test-web-page-1/test-web-page-2") - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-3"}), "test-web-page-1/test-web-page-3") def test_check_idx(self): - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-2"}, 'idx'), 0) - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-3"}, 'idx'), 1) - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-5"}, 'idx'), 2) def test_check_rename(self): @@ -64,14 +64,14 @@ class TestWebPage(unittest.TestCase): web_page.doc.parent_website_route = "test-web-page-4" web_page.save() - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), "test-web-page-4/test-web-page-1/test-web-page-2") web_page.doc.parent_website_route = "" web_page.save() - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), "test-web-page-1/test-web-page-2") @@ -80,13 +80,13 @@ class TestWebPage(unittest.TestCase): web_page.doc.parent_website_route = "test-web-page-4" web_page.save() - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-2"}, 'idx'), 0) - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-3"}, 'idx'), 0) - self.assertEquals(frappe.conn.get_value("Website Route", + self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-5"}, 'idx'), 1) web_page = frappe.bean("Web Page", "test-web-page-3") diff --git a/frappe/website/doctype/web_page/web_page.py b/frappe/website/doctype/web_page/web_page.py index ca56c01faf..6f2c13b1fb 100644 --- a/frappe/website/doctype/web_page/web_page.py +++ b/frappe/website/doctype/web_page/web_page.py @@ -10,8 +10,8 @@ from frappe.utils import cint class DocType(WebsiteGenerator): def autoname(self): self.doc.name = cleanup_page_name(self.doc.title) - if frappe.conn.exists("Web Page", self.doc.name): - last = frappe.conn.sql("""select name from `tabWeb Page` + if frappe.db.exists("Web Page", self.doc.name): + last = frappe.db.sql("""select name from `tabWeb Page` where name like '{}%' order by name desc limit 1""".format(self.doc.name)) count = last[0][0].replace(self.doc.name, "") if count and "-" in count: @@ -41,7 +41,7 @@ class DocType(WebsiteGenerator): # delete entry from Table of Contents of other pages WebsiteGenerator.on_trash(self) - frappe.conn.sql("""delete from `tabTable of Contents` + frappe.db.sql("""delete from `tabTable of Contents` where web_page=%s""", self.doc.name) # clear all cache if it has toc diff --git a/frappe/website/doctype/website_route/website_route.py b/frappe/website/doctype/website_route/website_route.py index 7d23c53d36..aecb64c51f 100644 --- a/frappe/website/doctype/website_route/website_route.py +++ b/frappe/website/doctype/website_route/website_route.py @@ -34,16 +34,16 @@ class DocType(DocTypeNestedSet): self.set_idx() def renumber_if_moved(self): - current_parent = frappe.conn.get_value("Website Route", self.doc.name, "parent_website_route") + current_parent = frappe.db.get_value("Website Route", self.doc.name, "parent_website_route") if current_parent and current_parent != self.doc.parent_website_route: # move-up # sitemap - frappe.conn.sql("""update `tabWebsite Route` set idx=idx-1 + frappe.db.sql("""update `tabWebsite Route` set idx=idx-1 where parent_website_route=%s and idx>%s""", (current_parent, self.doc.idx)) # source table - frappe.conn.sql("""update `tab{0}` set idx=idx-1 + frappe.db.sql("""update `tab{0}` set idx=idx-1 where parent_website_route=%s and idx>%s""".format(self.doc.ref_doctype), (current_parent, self.doc.idx)) self.doc.idx = None @@ -51,7 +51,7 @@ class DocType(DocTypeNestedSet): def set_idx(self): if self.doc.parent_website_route: if self.doc.idx == None: - self.doc.idx = int(frappe.conn.sql("""select ifnull(max(ifnull(idx, -1)), -1) + self.doc.idx = int(frappe.db.sql("""select ifnull(max(ifnull(idx, -1)), -1) from `tabWebsite Route` where ifnull(parent_website_route, '')=%s and name!=%s""", (self.doc.parent_website_route or '', @@ -59,7 +59,7 @@ class DocType(DocTypeNestedSet): else: self.doc.idx = cint(self.doc.idx) - previous_idx = frappe.conn.sql("""select max(idx) + previous_idx = frappe.db.sql("""select max(idx) from `tab{}` where ifnull(parent_website_route, '')=%s and ifnull(idx, -1) < %s""".format(self.doc.ref_doctype), (self.doc.parent_website_route, self.doc.idx))[0][0] @@ -76,22 +76,22 @@ class DocType(DocTypeNestedSet): from frappe.website.render import clear_cache self.old_name = self.doc.name self.doc.name = self.get_url() - frappe.conn.sql("""update `tabWebsite Route` set name=%s where name=%s""", + frappe.db.sql("""update `tabWebsite Route` set name=%s where name=%s""", (self.doc.name, self.old_name)) self.rename_links() self.rename_descendants() clear_cache(self.old_name) def rename_links(self): - for doctype in frappe.conn.sql_list("""select parent from tabDocField where fieldtype='Link' and + for doctype in frappe.db.sql_list("""select parent from tabDocField where fieldtype='Link' and fieldname='parent_website_route' and options='Website Route'"""): - for name in frappe.conn.sql_list("""select name from `tab{}` + for name in frappe.db.sql_list("""select name from `tab{}` where parent_website_route=%s""".format(doctype), self.old_name): - frappe.conn.set_value(doctype, name, "parent_website_route", self.doc.name) + frappe.db.set_value(doctype, name, "parent_website_route", self.doc.name) def rename_descendants(self): # rename children - for name in frappe.conn.sql_list("""select name from `tabWebsite Route` + for name in frappe.db.sql_list("""select name from `tabWebsite Route` where parent_website_route=%s""", self.doc.name): child = frappe.bean("Website Route", name) child.doc.parent_website_route = self.doc.name @@ -101,11 +101,11 @@ class DocType(DocTypeNestedSet): exists = False if self.doc.page_or_generator == "Page": # for a page, name and website sitemap config form a unique key - exists = frappe.conn.sql("""select name from `tabWebsite Route` + exists = frappe.db.sql("""select name from `tabWebsite Route` where name=%s and website_template!=%s""", (self.doc.name, self.doc.website_template)) else: # for a generator, name, ref_doctype and docname make a unique key - exists = frappe.conn.sql("""select name from `tabWebsite Route` + exists = frappe.db.sql("""select name from `tabWebsite Route` where name=%s and (ifnull(ref_doctype, '')!=%s or ifnull(docname, '')!=%s)""", (self.doc.name, self.doc.ref_doctype, self.doc.docname)) @@ -115,7 +115,7 @@ class DocType(DocTypeNestedSet): def make_private_if_parent_is_private(self): if self.doc.parent_website_route: - parent_pubic_read = frappe.conn.get_value("Website Route", self.doc.parent_website_route, + parent_pubic_read = frappe.db.get_value("Website Route", self.doc.parent_website_route, "public_read") if not parent_pubic_read: @@ -124,7 +124,7 @@ class DocType(DocTypeNestedSet): def on_trash(self): from frappe.website.render import clear_cache # remove website sitemap permissions - to_remove = frappe.conn.sql_list("""select name from `tabWebsite Route Permission` + to_remove = frappe.db.sql_list("""select name from `tabWebsite Route Permission` where website_route=%s""", (self.doc.name,)) frappe.delete_doc("Website Route Permission", to_remove, ignore_permissions=True) @@ -162,12 +162,12 @@ def remove_sitemap(page_name=None, ref_doctype=None, docname=None): if page_name: frappe.delete_doc("Website Route", page_name, ignore_permissions=True) elif ref_doctype and docname: - frappe.delete_doc("Website Route", frappe.conn.sql_list("""select name from `tabWebsite Route` + frappe.delete_doc("Website Route", frappe.db.sql_list("""select name from `tabWebsite Route` where ref_doctype=%s and docname=%s""", (ref_doctype, docname)), ignore_permissions=True) def cleanup_sitemap(): """remove sitemap records where its config do not exist anymore""" - to_delete = frappe.conn.sql_list("""select name from `tabWebsite Route` ws + to_delete = frappe.db.sql_list("""select name from `tabWebsite Route` ws where not exists(select name from `tabWebsite Template` wsc where wsc.name=ws.website_template)""") diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index 1f8ac30cf5..dd7a31be2c 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -16,7 +16,7 @@ class DocType(DocListController): def validate_home_page(self): if self.doc.home_page and \ - not frappe.conn.get_value("Website Route", {"name": self.doc.home_page}): + not frappe.db.get_value("Website Route", {"name": self.doc.home_page}): frappe.throw(_("Invalid Home Page") + " (Standard pages - index, login, products, blog, about, contact)") def validate_top_bar_items(self): @@ -51,7 +51,7 @@ class DocType(DocListController): def get_website_settings(): hooks = frappe.get_hooks() - all_top_items = frappe.conn.sql("""\ + all_top_items = frappe.db.sql("""\ select * from `tabTop Bar Item` where parent='Website Settings' and parentfield='top_bar_items' order by idx asc""", as_dict=1) @@ -70,7 +70,7 @@ def get_website_settings(): context = frappe._dict({ 'top_bar_items': top_items, - 'footer_items': frappe.conn.sql("""\ + 'footer_items': frappe.db.sql("""\ select * from `tabTop Bar Item` where parent='Website Settings' and parentfield='footer_items' order by idx asc""", as_dict=1), diff --git a/frappe/website/doctype/website_template/website_template.py b/frappe/website/doctype/website_template/website_template.py index 2f1979c710..c9a8f2af94 100644 --- a/frappe/website/doctype/website_template/website_template.py +++ b/frappe/website/doctype/website_template/website_template.py @@ -17,7 +17,7 @@ class DocType: def after_insert(self): if self.doc.page_or_generator == "Page": - website_route = frappe.conn.get_value("Website Route", + website_route = frappe.db.get_value("Website Route", {"website_template": self.doc.name, "page_or_generator": "Page"}) opts = self.doc.fields.copy() @@ -33,7 +33,7 @@ class DocType: if self.doc.condition_field: condition = " where ifnull(%s, 0)=1" % self.doc.condition_field - for name in frappe.conn.sql_list("""select name from `tab{doctype}` + for name in frappe.db.sql_list("""select name from `tab{doctype}` {condition} order by idx asc, {sort_field} {sort_order}""".format( doctype = self.doc.ref_doctype, condition = condition, @@ -49,7 +49,7 @@ def rebuild_website_template(): # TODO frappe.flags.in_rebuild_config = True - frappe.conn.sql("""delete from `tabWebsite Template`""") + frappe.db.sql("""delete from `tabWebsite Template`""") for app in frappe.get_installed_apps(): if app=="webnotes": app="frappe" build_website_template(app) @@ -61,7 +61,7 @@ def rebuild_website_template(): # enable nested set and rebuild rebuild_tree("Website Route", "parent_website_route") - frappe.conn.commit() + frappe.db.commit() def build_website_template(app): @@ -75,7 +75,7 @@ def build_website_template(app): for args in generators: add_website_template(**args) - frappe.conn.commit() + frappe.db.commit() def get_pages_and_generators(app): pages = [] @@ -123,9 +123,9 @@ def add_website_template(page_or_generator, app, path, fname, app_path): wsc.base_template_path = getattr(module, "base_template_path", None) wsc.page_title = getattr(module, "page_title", _(name.title())) - if frappe.conn.exists("Website Template", wsc.link_name): + if frappe.db.exists("Website Template", wsc.link_name): # found by earlier app, override - frappe.conn.sql("""delete from `tabWebsite Template` where name=%s""", (wsc.link_name,)) + frappe.db.sql("""delete from `tabWebsite Template` where name=%s""", (wsc.link_name,)) frappe.bean(wsc).insert() diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.py b/frappe/website/page/sitemap_browser/sitemap_browser.py index eabfaafd57..9538f9e1b2 100644 --- a/frappe/website/page/sitemap_browser/sitemap_browser.py +++ b/frappe/website/page/sitemap_browser/sitemap_browser.py @@ -13,7 +13,7 @@ def get_children(parent=None): if parent=="Sitemap": parent = "" - return frappe.conn.sql("""select name as value, 1 as expandable, ref_doctype, docname + return frappe.db.sql("""select name as value, 1 as expandable, ref_doctype, docname from `tabWebsite Route` where ifnull(parent_website_route, '')=%s order by ifnull(idx,0), name asc""", parent, as_dict=True) diff --git a/frappe/website/permissions.py b/frappe/website/permissions.py index 8c736c7752..b440f2b7f3 100644 --- a/frappe/website/permissions.py +++ b/frappe/website/permissions.py @@ -6,11 +6,11 @@ import frappe def remove_empty_permissions(): - permissions_cache_to_be_cleared = frappe.conn.sql_list("""select distinct profile + permissions_cache_to_be_cleared = frappe.db.sql_list("""select distinct profile from `tabWebsite Route Permission` where ifnull(`read`, 0)=0 and ifnull(`write`, 0)=0 and ifnull(`admin`, 0)=0""") - frappe.conn.sql("""delete from `tabWebsite Route Permission` + frappe.db.sql("""delete from `tabWebsite Route Permission` where ifnull(`read`, 0)=0 and ifnull(`write`, 0)=0 and ifnull(`admin`, 0)=0""") clear_permissions(permissions_cache_to_be_cleared) @@ -28,7 +28,7 @@ def get_access(sitemap_page, profile=None): return permissions.get(sitemap_page) def _get_access(sitemap_page, profile): - lft, rgt, public_read, public_write, page_or_generator = frappe.conn.get_value("Website Route", sitemap_page, + lft, rgt, public_read, public_write, page_or_generator = frappe.db.get_value("Website Route", sitemap_page, ["lft", "rgt", "public_read", "public_write", "page_or_generator"]) read = write = admin = private_read = 0 @@ -47,7 +47,7 @@ def _get_access(sitemap_page, profile): elif public_read: read = 1 - for perm in frappe.conn.sql("""select wsp.`read`, wsp.`write`, wsp.`admin`, + for perm in frappe.db.sql("""select wsp.`read`, wsp.`write`, wsp.`admin`, ws.lft, ws.rgt, ws.name from `tabWebsite Route Permission` wsp, `tabWebsite Route` ws where wsp.profile = %s and wsp.website_route = ws.name @@ -71,7 +71,7 @@ def clear_permissions(profiles=None): if isinstance(profiles, basestring): profiles = [profiles] elif profiles is None: - profiles = frappe.conn.sql_list("""select name from `tabProfile`""") + profiles = frappe.db.sql_list("""select name from `tabProfile`""") cache = frappe.cache() for profile in profiles: diff --git a/frappe/website/render.py b/frappe/website/render.py index 30d8ac3a6e..3128fe0a7e 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -47,7 +47,7 @@ def render_page(path): return build(path) def build(path): - if not frappe.conn: + if not frappe.db: frappe.connect() build_method = (build_json if is_ajax() else build_page) @@ -111,7 +111,7 @@ def clear_cache(path=None): delete_page_cache(path) else: - for p in frappe.conn.sql_list("""select name from `tabWebsite Route`"""): + for p in frappe.db.sql_list("""select name from `tabWebsite Route`"""): if p is not None: delete_page_cache(p) diff --git a/frappe/website/sitemap.py b/frappe/website/sitemap.py index 94c878c227..b86ee18afe 100644 --- a/frappe/website/sitemap.py +++ b/frappe/website/sitemap.py @@ -38,15 +38,15 @@ def build_sitemap_options(path): def set_sidebar_items(pathname): if pathname==home_page or not pathname: - sitemap_options.children = frappe.conn.sql("""select url as name, label as page_title, + sitemap_options.children = frappe.db.sql("""select url as name, label as page_title, 1 as public_read from `tabTop Bar Item` where parentfield='sidebar_items' order by idx""", as_dict=True) else: - sitemap_options.children = frappe.conn.sql("""select * from `tabWebsite Route` + sitemap_options.children = frappe.db.sql("""select * from `tabWebsite Route` where ifnull(parent_website_route,'')=%s and public_read=1 order by -idx desc, page_title asc""", pathname, as_dict=True) # establish hierarchy - sitemap_options.parents = frappe.conn.sql("""select name, page_title from `tabWebsite Route` + sitemap_options.parents = frappe.db.sql("""select name, page_title from `tabWebsite Route` where lft < %s and rgt > %s order by lft asc""", (sitemap_options.lft, sitemap_options.rgt), as_dict=True) if not sitemap_options.no_sidebar: diff --git a/frappe/website/statics.py b/frappe/website/statics.py index e705cb8f8b..0a8473903d 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -12,7 +12,7 @@ def sync_statics(): s = sync() while True: s.start() - frappe.conn.commit() + frappe.db.commit() time.sleep(2) class sync(object): @@ -104,7 +104,7 @@ class sync(object): parent_website_route = os.path.dirname(route) page_name = os.path.basename(route) - route_details = frappe.conn.get_value("Website Route", route, + route_details = frappe.db.get_value("Website Route", route, ["name", "idx", "static_file_timestamp", "docname"], as_dict=True) if route_details: @@ -174,13 +174,13 @@ class sync(object): def cleanup(self): if self.synced: - frappe.delete_doc("Web Page", frappe.conn.sql_list("""select docname + frappe.delete_doc("Web Page", frappe.db.sql_list("""select docname from `tabWebsite Route` where ifnull(static_file_timestamp,'')!='' and name not in ({}) order by (rgt-lft) asc""".format(', '.join(["%s"]*len(self.synced))), tuple(self.synced))) else: - frappe.delete_doc("Web Page", frappe.conn.sql_list("""select docname + frappe.delete_doc("Web Page", frappe.db.sql_list("""select docname from `tabWebsite Route` where ifnull(static_file_timestamp,'')!='' order by (rgt-lft) asc""")) diff --git a/frappe/website/utils.py b/frappe/website/utils.py index 6c4199a33c..6aef10b9ef 100644 --- a/frappe/website/utils.py +++ b/frappe/website/utils.py @@ -16,7 +16,7 @@ def can_cache(no_cache=False): def get_home_page(): home_page = frappe.cache().get_value("home_page", \ lambda: (frappe.get_hooks("home_page") \ - or [frappe.conn.get_value("Website Settings", None, "home_page") \ + or [frappe.db.get_value("Website Settings", None, "home_page") \ or "login"])[0]) return home_page @@ -24,7 +24,7 @@ def get_home_page(): def is_signup_enabled(): if getattr(frappe.local, "is_signup_enabled", None) is None: frappe.local.is_signup_enabled = True - if frappe.utils.cint(frappe.conn.get_value("Website Settings", + if frappe.utils.cint(frappe.db.get_value("Website Settings", "Website Settings", "disable_signup")): frappe.local.is_signup_enabled = False diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index 3c4683665b..468990d880 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -22,7 +22,7 @@ class WebsiteGenerator(DocListController): if self.doc.is_new(): self.doc.fields[self._website_config.page_name_field] = page_name else: - frappe.conn.set(self.doc, self._website_config.page_name_field, page_name) + frappe.db.set(self.doc, self._website_config.page_name_field, page_name) return page_name @@ -30,7 +30,7 @@ class WebsiteGenerator(DocListController): return self.doc.parent_website_route def setup_generator(self): - self._website_config = frappe.conn.get_values("Website Template", + self._website_config = frappe.db.get_values("Website Template", {"ref_doctype": self.doc.doctype}, "*")[0] def on_update(self): @@ -38,7 +38,7 @@ class WebsiteGenerator(DocListController): frappe.add_version(self.doclist) def after_rename(self, olddn, newdn, merge): - frappe.conn.sql("""update `tabWebsite Route` + frappe.db.sql("""update `tabWebsite Route` set docname=%s where ref_doctype=%s and docname=%s""", (newdn, self.doc.doctype, olddn)) if merge: @@ -63,7 +63,7 @@ class WebsiteGenerator(DocListController): def add_or_update_sitemap(self): page_name = self.get_page_name() - existing_site_map = frappe.conn.get_value("Website Route", {"ref_doctype": self.doc.doctype, + existing_site_map = frappe.db.get_value("Website Route", {"ref_doctype": self.doc.doctype, "docname": self.doc.name}) opts = frappe._dict({ @@ -87,7 +87,7 @@ class WebsiteGenerator(DocListController): idx = add_to_sitemap(opts) if idx!=None and self.doc.idx != idx: - frappe.conn.set(self.doc, "idx", idx) + frappe.db.set(self.doc, "idx", idx) def update_permissions(self, opts): if self.meta.get_field("public_read"): diff --git a/frappe/widgets/event.py b/frappe/widgets/event.py index efc9e11b94..2ec135cbcd 100644 --- a/frappe/widgets/event.py +++ b/frappe/widgets/event.py @@ -11,19 +11,19 @@ def get_cal_events(m_st, m_end): import frappe.model.doc # load owned events - res1 = frappe.conn.sql("select name from `tabEvent` WHERE ifnull(event_date,'2000-01-01') between '%s' and '%s' and owner = '%s' and event_type != 'Public' and event_type != 'Cancel'" % (m_st, m_end, frappe.user.name)) + res1 = frappe.db.sql("select name from `tabEvent` WHERE ifnull(event_date,'2000-01-01') between '%s' and '%s' and owner = '%s' and event_type != 'Public' and event_type != 'Cancel'" % (m_st, m_end, frappe.user.name)) # load individual events - res2 = frappe.conn.sql("select t1.name from `tabEvent` t1, `tabEvent User` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t2.person = '%s' and t1.name = t2.parent and t1.event_type != 'Cancel'" % (m_st, m_end, frappe.user.name)) + res2 = frappe.db.sql("select t1.name from `tabEvent` t1, `tabEvent User` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t2.person = '%s' and t1.name = t2.parent and t1.event_type != 'Cancel'" % (m_st, m_end, frappe.user.name)) # load role events roles = frappe.user.get_roles() myroles = ['t2.role = "%s"' % r for r in roles] myroles = '(' + (' OR '.join(myroles)) + ')' - res3 = frappe.conn.sql("select t1.name from `tabEvent` t1, `tabEvent Role` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t1.name = t2.parent and t1.event_type != 'Cancel' and %s" % (m_st, m_end, myroles)) + res3 = frappe.db.sql("select t1.name from `tabEvent` t1, `tabEvent Role` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t1.name = t2.parent and t1.event_type != 'Cancel' and %s" % (m_st, m_end, myroles)) # load public events - res4 = frappe.conn.sql("select name from `tabEvent` where ifnull(event_date,'2000-01-01') between '%s' and '%s' and event_type='Public'" % (m_st, m_end)) + res4 = frappe.db.sql("select name from `tabEvent` where ifnull(event_date,'2000-01-01') between '%s' and '%s' and event_type='Public'" % (m_st, m_end)) doclist, rl = [], [] for r in res1 + res2 + res3 + res4: diff --git a/frappe/widgets/form/assign_to.py b/frappe/widgets/form/assign_to.py index cbd656d69b..51f60e0fae 100644 --- a/frappe/widgets/form/assign_to.py +++ b/frappe/widgets/form/assign_to.py @@ -16,7 +16,7 @@ def get(args=None): get_docinfo(args.get("doctype"), args.get("name")) - return frappe.conn.sql_list("""select owner from `tabToDo` + return frappe.db.sql_list("""select owner from `tabToDo` where reference_type=%(doctype)s and reference_name=%(name)s and status="Open" order by modified desc limit 5""", args) @@ -26,7 +26,7 @@ def add(args=None): if not args: args = frappe.local.form_dict - if frappe.conn.sql("""select owner from `tabToDo` + if frappe.db.sql("""select owner from `tabToDo` where reference_type=%(doctype)s and reference_name=%(name)s and status="Open" and owner=%(assign_to)s""", args): frappe.msgprint("Already in todo", raise_exception=True) @@ -49,7 +49,7 @@ def add(args=None): # set assigned_to if field exists from frappe.model.meta import has_field if has_field(args['doctype'], "assigned_to"): - frappe.conn.set_value(args['doctype'], args['name'], "assigned_to", args['assign_to']) + frappe.db.set_value(args['doctype'], args['name'], "assigned_to", args['assign_to']) try: if cint(args.get("restrict")): @@ -86,14 +86,14 @@ def remove(doctype, name, assign_to): # clear assigned_to if field exists from frappe.model.meta import has_field if has_field(doctype, "assigned_to"): - frappe.conn.set_value(doctype, name, "assigned_to", None) + frappe.db.set_value(doctype, name, "assigned_to", None) notify_assignment(todo.doc.assigned_by, todo.doc.owner, todo.doc.reference_type, todo.doc.reference_name) return get({"doctype": doctype, "name": name}) def clear(doctype, name): - for assign_to in frappe.conn.sql_list("""select owner from `tabToDo` + for assign_to in frappe.db.sql_list("""select owner from `tabToDo` where reference_type=%(doctype)s and reference_name=%(name)s""", locals()): remove(doctype, name, assign_to) diff --git a/frappe/widgets/form/load.py b/frappe/widgets/form/load.py index 3640e31a2c..672d9f6206 100644 --- a/frappe/widgets/form/load.py +++ b/frappe/widgets/form/load.py @@ -22,7 +22,7 @@ def getdoc(doctype, name, user=None): if not name: name = doctype - if not frappe.conn.exists(doctype, name): + if not frappe.db.exists(doctype, name): return [] try: @@ -88,7 +88,7 @@ def get_restrictions(meta): def add_attachments(dt, dn): attachments = {} - for f in frappe.conn.sql("""select name, file_name, file_url from + for f in frappe.db.sql("""select name, file_name, file_url from `tabFile Data` where attached_to_name=%s and attached_to_doctype=%s""", (dn, dt), as_dict=True): attachments[f.file_url or f.file_name] = f.name @@ -96,14 +96,14 @@ def add_attachments(dt, dn): return attachments def add_comments(dt, dn, limit=20): - cl = frappe.conn.sql("""select name, comment, comment_by, creation from `tabComment` + cl = frappe.db.sql("""select name, comment, comment_by, creation from `tabComment` where comment_doctype=%s and comment_docname=%s order by creation desc limit %s""" % ('%s','%s', limit), (dt, dn), as_dict=1) return cl def add_assignments(dt, dn): - cl = frappe.conn.sql_list("""select owner from `tabToDo` + cl = frappe.db.sql_list("""select owner from `tabToDo` where reference_type=%(doctype)s and reference_name=%(name)s and status="Open" order by modified desc limit 5""", { "doctype": dt, @@ -119,6 +119,6 @@ def get_badge_info(doctypes, filters): filters["docstatus"] = ["!=", 2] out = {} for doctype in doctypes: - out[doctype] = frappe.conn.get_value(doctype, filters, "count(*)") + out[doctype] = frappe.db.get_value(doctype, filters, "count(*)") return out \ No newline at end of file diff --git a/frappe/widgets/form/run_method.py b/frappe/widgets/form/run_method.py index babbe385fa..8f84c3aa53 100644 --- a/frappe/widgets/form/run_method.py +++ b/frappe/widgets/form/run_method.py @@ -48,7 +48,7 @@ def runserverobj(): frappe.response['docs'] += so.doclist def check_guest_access(doc): - if frappe.session['user']=='Guest' and not frappe.conn.sql("select name from tabDocPerm where role='Guest' and parent=%s and ifnull(`read`,0)=1", doc.doctype): + if frappe.session['user']=='Guest' and not frappe.db.sql("select name from tabDocPerm where role='Guest' and parent=%s and ifnull(`read`,0)=1", doc.doctype): frappe.msgprint("Guest not allowed to call this object") raise Exception diff --git a/frappe/widgets/form/utils.py b/frappe/widgets/form/utils.py index f8e18589c0..de71e4cf30 100644 --- a/frappe/widgets/form/utils.py +++ b/frappe/widgets/form/utils.py @@ -22,7 +22,7 @@ def get_fields(): ,'from':frappe.form_dict.get('from') ,'where':frappe.form_dict.get('where') } - ret = frappe.conn.sql("select %(select)s from `%(from)s` where %(where)s limit 1" % args) + ret = frappe.db.sql("select %(select)s from `%(from)s` where %(where)s limit 1" % args) if ret: fl, i = frappe.form_dict.get('fields').split(','), 0 for f in fl: @@ -42,12 +42,12 @@ def validate_link(): frappe.response['message'] = 'Ok' return - if frappe.conn.sql("select name from `tab%s` where name=%s" % (options, '%s'), (value,)): + if frappe.db.sql("select name from `tab%s` where name=%s" % (options, '%s'), (value,)): # get fetch values if fetch: frappe.response['fetch_values'] = [frappe.utils.parse_val(c) \ - for c in frappe.conn.sql("select %s from `tab%s` where name=%s" \ + for c in frappe.db.sql("select %s from `tab%s` where name=%s" \ % (fetch, options, '%s'), (value,))[0]] frappe.response['message'] = 'Ok' diff --git a/frappe/widgets/moduleview.py b/frappe/widgets/moduleview.py index e4bb2f43b9..ba5dd7a7cb 100644 --- a/frappe/widgets/moduleview.py +++ b/frappe/widgets/moduleview.py @@ -33,7 +33,7 @@ def get_doctype_count_from_table(doctype): def get_report_list(module): """return list on new style reports for modules""" - return frappe.conn.sql(""" + return frappe.db.sql(""" select distinct tabReport.name, tabReport.ref_doctype as doctype, if((tabReport.report_type='Query Report' or tabReport.report_type='Script Report'), 1, 0) as is_query_report diff --git a/frappe/widgets/query_builder.py b/frappe/widgets/query_builder.py index bd47253e1f..44f2303f56 100644 --- a/frappe/widgets/query_builder.py +++ b/frappe/widgets/query_builder.py @@ -20,7 +20,7 @@ def get_sql_tables(q): def get_parent_dt(dt): pdt = '' - if frappe.conn.sql('select name from `tabDocType` where istable=1 and name="%s"' % dt): + if frappe.db.sql('select name from `tabDocType` where istable=1 and name="%s"' % dt): import frappe.model.meta return frappe.model.meta.get_parent_dt(dt) return pdt @@ -44,7 +44,7 @@ def get_sql_meta(tl): meta[dt]['parent'] = ('ID', 'Link', pdt, '200') # get the field properties from DocField - res = frappe.conn.sql("select fieldname, label, fieldtype, options, width from tabDocField where parent='%s'" % dt) + res = frappe.db.sql("select fieldname, label, fieldtype, options, width from tabDocField where parent='%s'" % dt) for r in res: if r[0]: meta[dt][r[0]] = (r[1], r[2], r[3], r[4]); @@ -87,9 +87,9 @@ def exec_report(code, res, colnames=[], colwidths=[], coltypes=[], coloptions=[] from frappe.utils import * from frappe.model.doc import * - set = frappe.conn.set - get_value = frappe.conn.get_value - convert_to_lists = frappe.conn.convert_to_lists + set = frappe.db.set + get_value = frappe.db.get_value + convert_to_lists = frappe.db.convert_to_lists NEWLINE = '\n' exec str(code) @@ -114,7 +114,7 @@ def guess_type(m): def build_description_simple(): colnames, coltypes, coloptions, colwidths = [], [], [], [] - for m in frappe.conn.get_description(): + for m in frappe.db.get_description(): colnames.append(m[0]) coltypes.append(guess_type[m[0]]) coloptions.append('') @@ -124,7 +124,7 @@ def build_description_simple(): def build_description_standard(meta, tl): - desc = frappe.conn.get_description() + desc = frappe.db.get_description() colnames, coltypes, coloptions, colwidths = [], [], [], [] @@ -183,7 +183,7 @@ def runquery(q='', ret=0, from_export=0): raise Exception, 'Query must be a SELECT' as_dict = cint(frappe.form_dict.get('as_dict')) - res = frappe.conn.sql(q, as_dict = as_dict, as_list = not as_dict, formatted=formatted) + res = frappe.db.sql(q, as_dict = as_dict, as_list = not as_dict, formatted=formatted) # build colnames etc from metadata colnames, coltypes, coloptions, colwidths = [], [], [], [] @@ -202,7 +202,7 @@ def runquery(q='', ret=0, from_export=0): q = q.replace('__user', frappe.session.user) q = q.replace('__today', frappe.utils.nowdate()) - res = frappe.conn.sql(q, as_list=1, formatted=formatted) + res = frappe.db.sql(q, as_list=1, formatted=formatted) colnames, coltypes, coloptions, colwidths = build_description_standard(meta, tl) @@ -235,7 +235,7 @@ def runquery(q='', ret=0, from_export=0): if not frappe.form_dict.get('simple_query'): qm = add_match_conditions(qm, tl) - out['n_values'] = frappe.utils.cint(frappe.conn.sql(qm)[0][0]) + out['n_values'] = frappe.utils.cint(frappe.db.sql(qm)[0][0]) @frappe.whitelist() diff --git a/frappe/widgets/query_report.py b/frappe/widgets/query_report.py index d3fd246ab2..e7f5f3d6c0 100644 --- a/frappe/widgets/query_report.py +++ b/frappe/widgets/query_report.py @@ -27,7 +27,7 @@ def get_report_doc(report_name): def get_script(report_name): report = get_report_doc(report_name) - module = frappe.conn.get_value("DocType", report.ref_doctype, "module") + module = frappe.db.get_value("DocType", report.ref_doctype, "module") module_path = get_module_path(module) report_folder = os.path.join(module_path, "report", scrub(report.name)) script_path = os.path.join(report_folder, scrub(report.name) + ".js") @@ -68,10 +68,10 @@ def run(report_name, filters=()): if not report.query.lower().startswith("select"): frappe.msgprint(_("Query must be a SELECT"), raise_exception=True) - result = [list(t) for t in frappe.conn.sql(report.query, filters)] - columns = [c[0] for c in frappe.conn.get_description()] + result = [list(t) for t in frappe.db.sql(report.query, filters)] + columns = [c[0] for c in frappe.db.get_description()] else: - module = frappe.conn.get_value("DocType", report.ref_doctype, "module") + module = frappe.db.get_value("DocType", report.ref_doctype, "module") if report.is_standard=="Yes": method_name = frappe.local.module_app[scrub(module)] + "." + scrub(module) \ + ".report." + scrub(report.name) + "." + scrub(report.name) + ".execute" diff --git a/frappe/widgets/report_dump.py b/frappe/widgets/report_dump.py index fd1ff87786..ee606f204a 100644 --- a/frappe/widgets/report_dump.py +++ b/frappe/widgets/report_dump.py @@ -36,7 +36,7 @@ def get_data(doctypes, last_modified): if not args.get("conditions"): args['conditions'] = [] args['conditions'].append(modified_table + "modified > '" + last_modified[d] + "'") - out[dt]["modified_names"] = frappe.conn.sql_list("""select %sname from %s + out[dt]["modified_names"] = frappe.db.sql_list("""select %sname from %s where %smodified > %s""" % (modified_table, table, modified_table, "%s"), last_modified[d]) if args.get("force_index"): @@ -46,7 +46,7 @@ def get_data(doctypes, last_modified): if args.get("order_by"): order_by = " order by " + args["order_by"] - out[dt]["data"] = [list(t) for t in frappe.conn.sql("""select %s from %s %s %s""" \ + out[dt]["data"] = [list(t) for t in frappe.db.sql("""select %s from %s %s %s""" \ % (",".join(args["columns"]), table, conditions, order_by))] # last modified @@ -54,7 +54,7 @@ def get_data(doctypes, last_modified): if "," in table: modified_table = " ".join(table.split(",")[0].split(" ")[:-1]) - tmp = frappe.conn.sql("""select `modified` + tmp = frappe.db.sql("""select `modified` from %s order by modified desc limit 1""" % modified_table) out[dt]["last_modified"] = tmp and tmp[0][0] or "" out[dt]["columns"] = map(lambda c: c.split(" as ")[-1], args["columns"]) diff --git a/frappe/widgets/reportview.py b/frappe/widgets/reportview.py index b6565cdd99..be62217a47 100644 --- a/frappe/widgets/reportview.py +++ b/frappe/widgets/reportview.py @@ -55,7 +55,7 @@ def execute(doctype, query=None, filters=None, fields=None, docstatus=None, query = """select %(fields)s from %(tables)s where %(conditions)s %(group_by)s order by %(order_by)s %(limit)s""" % args - return frappe.conn.sql(query, as_dict=not as_list, debug=debug) + return frappe.db.sql(query, as_dict=not as_list, debug=debug) def prepare_args(doctype, filters, fields, docstatus, group_by, order_by, with_childnames): frappe.local.reportview_tables = get_tables(doctype, fields) @@ -112,7 +112,7 @@ def run_custom_query(query): """run custom query""" if '%(key)s' in query: query = query.replace('%(key)s', 'name') - return frappe.conn.sql(query, as_dict=1) + return frappe.db.sql(query, as_dict=1) def load_doctypes(): """load all doctypes and roles""" @@ -311,7 +311,7 @@ def save_report(): from frappe.model.doc import Document data = frappe.local.form_dict - if frappe.conn.exists('Report', data['name']): + if frappe.db.exists('Report', data['name']): d = Document('Report', data['name']) else: d = Document('Report') @@ -334,7 +334,7 @@ def export_query(): ret = execute(**form_params) - columns = [x[0] for x in frappe.conn.get_description()] + columns = [x[0] for x in frappe.db.get_description()] data = [['Sr'] + get_labels(columns),] # flatten dict @@ -430,7 +430,7 @@ def scrub_user_tags(tagcount): return rlist def get_table_columns(table): - res = frappe.conn.sql("DESC `tab%s`" % table, as_dict=1) + res = frappe.db.sql("DESC `tab%s`" % table, as_dict=1) if res: return [r['Field'] for r in res] # used in building query in queries.py diff --git a/frappe/widgets/search.py b/frappe/widgets/search.py index 7186e077ee..f740e2a6a3 100644 --- a/frappe/widgets/search.py +++ b/frappe/widgets/search.py @@ -39,7 +39,7 @@ def search_widget(doctype, txt, query=None, searchfield="name", start=0, else: if query: # custom query - frappe.response["values"] = frappe.conn.sql(scrub_custom_query(query, + frappe.response["values"] = frappe.db.sql(scrub_custom_query(query, searchfield, txt)) else: if isinstance(filters, dict): diff --git a/frappe/widgets/tags.py b/frappe/widgets/tags.py index 0d7abf89eb..7b0d438d26 100644 --- a/frappe/widgets/tags.py +++ b/frappe/widgets/tags.py @@ -29,7 +29,7 @@ import frappe def check_user_tags(dt): "if the user does not have a tags column, then it creates one" try: - frappe.conn.sql("select `_user_tags` from `tab%s` limit 1" % dt) + frappe.db.sql("select `_user_tags` from `tab%s` limit 1" % dt) except Exception, e: if e.args[0] == 1054: DocTags(dt).setup() @@ -63,11 +63,11 @@ class DocTags: def get_tag_fields(self): """returns tag_fields property""" - return frappe.conn.get_value('DocType', self.dt, 'tag_fields') + return frappe.db.get_value('DocType', self.dt, 'tag_fields') def get_tags(self, dn): """returns tag for a particular item""" - return frappe.conn.get_value(self.dt, dn, '_user_tags', ignore=1) or '' + return frappe.db.get_value(self.dt, dn, '_user_tags', ignore=1) or '' def add(self, dn, tag): """add a new user tag""" @@ -94,7 +94,7 @@ class DocTags: tl = list(set(filter(lambda x: x, tl))) tags = ',' + ','.join(tl) try: - frappe.conn.sql("update `tab%s` set _user_tags=%s where name=%s" % \ + frappe.db.sql("update `tab%s` set _user_tags=%s where name=%s" % \ (self.dt,'%s','%s'), (tags , dn)) except Exception, e: if e.args[0]==1054: