From 234e21feeeab1efb6cdf9bfffbcb446aee6edab1 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 6 Jul 2016 18:06:50 +0530 Subject: [PATCH] [fix] touch locks/installing.lock during new-site, fixes in db_query and get_app_path --- frappe/commands/site.py | 39 ++++++++++++++++++++++++--------------- frappe/model/db_query.py | 13 ++++++------- frappe/model/document.py | 5 ++++- frappe/utils/__init__.py | 2 +- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/frappe/commands/site.py b/frappe/commands/site.py index 4bbe622550..d528fbd710 100755 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -6,6 +6,7 @@ from frappe.commands import pass_context, get_site from frappe.commands.scheduler import _is_scheduler_enabled from frappe.limits import update_limits, get_limits from frappe.installer import update_site_config +from frappe.utils import touch_file, get_site_path @click.command('new-site') @click.argument('site') @@ -23,12 +24,17 @@ def new_site(site, mariadb_root_username=None, mariadb_root_password=None, admin db_name = hashlib.sha1(site).hexdigest()[:10] frappe.init(site=site, new_site=True) - _new_site(db_name, site, mariadb_root_username=mariadb_root_username, mariadb_root_password=mariadb_root_password, admin_password=admin_password, verbose=verbose, install_apps=install_app, source_sql=source_sql, force=force) + + _new_site(db_name, site, mariadb_root_username=mariadb_root_username, mariadb_root_password=mariadb_root_password, admin_password=admin_password, + verbose=verbose, install_apps=install_app, source_sql=source_sql, force=force) + if len(frappe.utils.get_sites()) == 1: use(site) -def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=None, admin_password=None, verbose=False, install_apps=None, source_sql=None,force=False, reinstall=False): - "Install a new Frappe site" +def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=None, admin_password=None, + verbose=False, install_apps=None, source_sql=None,force=False, reinstall=False): + """Install a new Frappe site""" + from frappe.installer import install_db, make_site_dirs from frappe.installer import install_app as _install_app import frappe.utils.scheduler @@ -41,24 +47,27 @@ def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=N except: enable_scheduler = False - install_db(root_login=mariadb_root_username, root_password=mariadb_root_password, db_name=db_name, admin_password=admin_password, verbose=verbose, source_sql=source_sql,force=force, reinstall=reinstall) make_site_dirs() - _install_app("frappe", verbose=verbose, set_as_patched=not source_sql) - if frappe.conf.get("install_apps"): - for app in frappe.conf.install_apps: - _install_app(app, verbose=verbose, set_as_patched=not source_sql) + try: + installing = touch_file(get_site_path('locks', 'installing.lock')) - if install_apps: - for app in install_apps: + install_db(root_login=mariadb_root_username, root_password=mariadb_root_password, db_name=db_name, + admin_password=admin_password, verbose=verbose, source_sql=source_sql,force=force, reinstall=reinstall) + + apps_to_install = ['frappe'] + (frappe.conf.get("install_apps") or []) + (install_apps or []) + for app in apps_to_install: _install_app(app, verbose=verbose, set_as_patched=not source_sql) - frappe.utils.scheduler.toggle_scheduler(enable_scheduler) - frappe.db.commit() + frappe.utils.scheduler.toggle_scheduler(enable_scheduler) + frappe.db.commit() - scheduler_status = "disabled" if frappe.utils.scheduler.is_scheduler_disabled() else "enabled" - print "*** Scheduler is", scheduler_status, "***" - frappe.destroy() + scheduler_status = "disabled" if frappe.utils.scheduler.is_scheduler_disabled() else "enabled" + print "*** Scheduler is", scheduler_status, "***" + + finally: + os.remove(installing) + frappe.destroy() @click.command('restore') @click.argument('sql-file-path') diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 56f1e9a2ab..8dc42ea781 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -36,16 +36,15 @@ class DatabaseQuery(object): # fitlers and fields swappable # its hard to remember what comes first - if isinstance(fields, dict): - # if fields is given as dict, its probably filters - self.filters = fields - fields = None + if (isinstance(fields, dict) + or (isinstance(fields, list) and fields and isinstance(fields[0], list))): + # if fields is given as dict/list of list, its probably filters + filters, fields = fields, filters - if self.fields and isinstance(filters, list) \ + elif fields and isinstance(filters, list) \ and len(filters) > 1 and isinstance(filters[0], basestring): # if `filters` is a list of strings, its probably fields - self.fields = filters - filters = None + filters, fields = fields, filters if fields: self.fields = fields diff --git a/frappe/model/document.py b/frappe/model/document.py index fd0eb37774..ce56c01b4a 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -553,7 +553,10 @@ class Document(BaseDocument): if frappe.flags.print_messages: print self.as_json().encode("utf-8") - raise frappe.MandatoryError(", ".join((each[0] for each in missing))) + raise frappe.MandatoryError('[{doctype}, {name}]: {fields}'.format( + fields=", ".join((each[0] for each in missing)), + doctype=self.doctype, + name=self.name)) def _validate_links(self): if self.flags.ignore_links: diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index d30045a810..362daa5669 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -318,7 +318,7 @@ def get_disk_usage(): def touch_file(path): with open(path, 'a'): os.utime(path, None) - return True + return path def get_test_client(): from frappe.app import application