From a869831e51ef7521c1ebaf155649036fdd5fa611 Mon Sep 17 00:00:00 2001 From: shreyas Date: Mon, 18 Jul 2016 17:57:52 +0530 Subject: [PATCH 1/9] [Minor] Fixed Restore files while restoring site --- frappe/commands/site.py | 6 ++++-- frappe/installer.py | 36 +++++++++++++++--------------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/frappe/commands/site.py b/frappe/commands/site.py index ab06fa60b7..226ca82db8 100755 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -100,10 +100,12 @@ def restore(context, sql_file_path, mariadb_root_username=None, mariadb_root_pas # Extract public and/or private files to the restored site, if user has given the path if with_public_files: - extract_tar_files(site, with_public_files, 'public') + public = extract_tar_files(site, with_public_files, 'public') + os.remove(public) if with_private_files: - extract_tar_files(site, with_private_files, 'private') + private = extract_tar_files(site, with_private_files, 'private') + os.remove(private) @click.command('reinstall') @pass_context diff --git a/frappe/installer.py b/frappe/installer.py index fe1500313c..fa21900c5a 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -345,42 +345,36 @@ def check_if_ready_for_barracuda(): # raise Exception, "MariaDB needs to be configured!" def extract_sql_gzip(sql_gz_path): - success = -1 try: - subprocess.check_output(['gzip', '-d', '-v', '-f', sql_gz_path]) - except Exception as subprocess.CalledProcessError: - print subprocess.CalledProcessError.output - finally: - # subprocess.check_call returns '0' on success. On success, return path to sql file - return sql_gz_path[:-3] + success = subprocess.check_output(['gzip', '-d', '-v', '-f', sql_gz_path]) + except subprocess.CalledProcessError: + raise subprocess.CalledProcessError + + path = sql_gz_path[:-3] if success else None + + return path def extract_tar_files(site_name, file_path, folder_name): # Need to do frappe.init to maintain the site locals frappe.init(site=site_name) abs_site_path = os.path.abspath(frappe.get_site_path()) - # While creating tar files during backup, a complete recursive structure is created. - # For example, ///*.* - # Shift to parent directory and make it as current directory and do the extraction. - _parent_dir = os.path.dirname(abs_site_path) - os.chdir(_parent_dir) - # Copy the files to the parent directory and extract - shutil.copy2(os.path.abspath(file_path), _parent_dir) + shutil.copy2(os.path.abspath(file_path), abs_site_path) # Get the file name splitting the file path on - filename = file_path.split('/')[-1] - filepath = os.path.join(_parent_dir, filename) + tar_name = os.path.split(file_path)[1] + tar_path = os.path.join(abs_site_path, tar_name) try: - error = subprocess.check_output(['tar', 'xvf', filepath]) - except Exception as subprocess.CalledProcessError: - print subprocess.CalledProcessError.output + subprocess.check_output(['tar', 'xvf', tar_path, '--strip', '2'], cwd=abs_site_path) + except subprocess.CalledProcessError: + raise subprocess.CalledProcessError finally: - # On successful extraction delete the tarfile to avoid any abuse through command line - os.remove(filepath) frappe.destroy() + return tar_path + expected_config_for_barracuda = """[mysqld] innodb-file-format=barracuda innodb-file-per-table=1 From 09935604c4ae02730f27d58fad832ac4ad225ffe Mon Sep 17 00:00:00 2001 From: shreyas Date: Thu, 21 Jul 2016 18:04:31 +0530 Subject: [PATCH 2/9] [Fix] Raise exception instead of particular error --- frappe/installer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frappe/installer.py b/frappe/installer.py index fa21900c5a..68bffabfb4 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -347,8 +347,8 @@ def check_if_ready_for_barracuda(): def extract_sql_gzip(sql_gz_path): try: success = subprocess.check_output(['gzip', '-d', '-v', '-f', sql_gz_path]) - except subprocess.CalledProcessError: - raise subprocess.CalledProcessError + except: + raise path = sql_gz_path[:-3] if success else None @@ -368,8 +368,8 @@ def extract_tar_files(site_name, file_path, folder_name): try: subprocess.check_output(['tar', 'xvf', tar_path, '--strip', '2'], cwd=abs_site_path) - except subprocess.CalledProcessError: - raise subprocess.CalledProcessError + except: + raise finally: frappe.destroy() From c3cd0c4ea11a0f07a8c314d92af2b0b4f965ae91 Mon Sep 17 00:00:00 2001 From: Valmik Jangla Date: Sat, 23 Jul 2016 14:57:26 +0530 Subject: [PATCH 3/9] Added scheduler enabled to get_site_info --- frappe/utils/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 917197a56a..da3c34307b 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -514,6 +514,7 @@ def get_site_info(): 'language': system_settings.language or 'english', 'time_zone': system_settings.time_zone, 'setup_complete': cint(system_settings.setup_complete), + 'scheduler_enabled': system_settings.enable_scheduler, # usage 'emails_sent': get_emails_sent_this_month(), From 3ffea03e7ec12609c873c0027d4420880b05b86f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Sat, 23 Jul 2016 15:55:27 +0530 Subject: [PATCH 4/9] [fix] confirm reinstall --- frappe/commands/site.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/commands/site.py b/frappe/commands/site.py index a35ae749f1..f434ced042 100755 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -111,6 +111,7 @@ def restore(context, sql_file_path, mariadb_root_username=None, mariadb_root_pas @pass_context def reinstall(context): "Reinstall site ie. wipe all data and start over" + click.confirm('This will wipe your database. Are you sure you want to reinstall?', abort=True) site = get_site(context) try: frappe.init(site=site) @@ -180,7 +181,7 @@ def disable_user(context, email): user = frappe.get_doc("User", email) user.enabled = 0 user.save(ignore_permissions=True) - frappe.db.commit() + frappe.db.commit() @click.command('migrate') From c05112ce453fde61305c5bf9b1355edce9a17c7f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 24 Jul 2016 13:03:47 +0530 Subject: [PATCH 5/9] [fix] file.py issue via scheduler log --- frappe/core/doctype/file/file.py | 4 ++-- frappe/public/js/frappe/form/grid.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/core/doctype/file/file.py b/frappe/core/doctype/file/file.py index 415ba5ab5e..9dc75f06d9 100755 --- a/frappe/core/doctype/file/file.py +++ b/frappe/core/doctype/file/file.py @@ -76,7 +76,7 @@ class File(NestedSet): """Set folder size if folder""" if self.is_folder and not self.is_new(): self.file_size = self.get_folder_size() - frappe.db.set_value("File", self.name, "file_size", self.file_size) + self.db_set('file_size', self.file_size) for folder in self.get_ancestors(): frappe.db.set_value("File", folder, "file_size", self.get_folder_size(folder)) @@ -93,7 +93,7 @@ class File(NestedSet): def update_parent_folder_size(self): """Update size of parent folder""" if self.folder and not self.is_folder: # it not home - frappe.get_doc("File", self.folder).save(ignore_permissions=True) + frappe.get_doc("File", self.folder).set_folder_size() def set_folder_name(self): """Make parent folders if not exists based on reference doctype and name""" diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 3aa05bac9d..d31b971d21 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -718,7 +718,7 @@ frappe.ui.form.GridRow = Class.extend({ var me = this; // show static for field based on // whether grid is editable - if(this.grid.is_editable() && this.doc && show !== false) { + if(this.grid.allow_on_grid_editing() && this.grid.is_editable() && this.doc && show !== false) { // disable other editale row if(frappe.ui.form.editable_row From a5156ec40c59157e37914b77588eb6e0a4042f20 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 24 Jul 2016 13:12:10 +0530 Subject: [PATCH 6/9] [minor] encoding for has_gravatar --- frappe/utils/__init__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index da3c34307b..cd33f7ecf8 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -127,7 +127,12 @@ def has_gravatar(email): # since querying gravatar for every item will be slow return '' - gravatar_url = "https://secure.gravatar.com/avatar/{hash}?d=404&s=200".format(hash=md5.md5(email).hexdigest()) + if not isinstance(email, unicode): + email = unicode(email, 'utf-8') + + hexdigest = md5.md5(email).hexdigest() + + gravatar_url = "https://secure.gravatar.com/avatar/{hash}?d=404&s=200".format(hash=hexdigest) try: res = requests.get(gravatar_url) if res.status_code==200: From 48000e6cc20e4d55f2e127ab45efbc41296f78d9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 24 Jul 2016 13:29:08 +0530 Subject: [PATCH 7/9] [fix] reinstall --yes to skip prompt --- .travis.yml | 2 +- frappe/commands/site.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d236789029..4601f0eafb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ install: script: - cd ~/frappe-bench - bench use test_site - - bench reinstall + - bench reinstall --yes - bench build - bench start & - sleep 10 diff --git a/frappe/commands/site.py b/frappe/commands/site.py index f434ced042..a961872192 100755 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -108,10 +108,14 @@ def restore(context, sql_file_path, mariadb_root_username=None, mariadb_root_pas os.remove(private) @click.command('reinstall') +@click.option('--yes', is_flag=True, default=False, help='Pass --yes to skip confirmation') @pass_context -def reinstall(context): +def reinstall(context, yes=False): "Reinstall site ie. wipe all data and start over" - click.confirm('This will wipe your database. Are you sure you want to reinstall?', abort=True) + + if not yes: + click.confirm('This will wipe your database. Are you sure you want to reinstall?', abort=True) + site = get_site(context) try: frappe.init(site=site) From 2162b695d48b43872b21b491efcef8bf85ef151f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Sun, 24 Jul 2016 14:09:47 +0530 Subject: [PATCH 8/9] [api call] frappe.client.get_password --- frappe/client.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frappe/client.py b/frappe/client.py index 54dce106bf..142aeb2d8a 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -154,6 +154,12 @@ def has_permission(doctype, docname, perm_type="read"): # perm_type can be one of read, write, create, submit, cancel, report return {"has_permission": frappe.has_permission(doctype, perm_type.lower(), docname)} +@frappe.whitelist() +def get_password(doctype, name, fieldname): + frappe.only_for("System Manager") + return frappe.get_doc(doctype, name).get_password(fieldname) + + @frappe.whitelist() def get_js(items): items = json.loads(items) From 3826b453019234b3dafe51cfd7c65c8fc408f71a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 24 Jul 2016 17:35:59 +0600 Subject: [PATCH 9/9] bumped to version 7.0.1 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 601eee795e..26058ce943 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = "7.0.0" +__version__ = "7.0.1" local = Local()