From f5e1cdc5cefbbba458a67ed386cee71324a2776c Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Tue, 13 Oct 2020 17:25:05 +0530 Subject: [PATCH 1/2] fix: Restore assets during bench init --- frappe/build.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frappe/build.py b/frappe/build.py index 767217a9b9..1cea4cb243 100644 --- a/frappe/build.py +++ b/frappe/build.py @@ -40,6 +40,7 @@ def build_missing_files(): # check which files dont exist yet from the build.json and tell build.js to build only those! missing_assets = [] current_asset_files = [] + frappe_build = os.path.join("..", "apps", "frappe", "frappe", "public", "build.json") for type in ["css", "js"]: current_asset_files.extend( @@ -49,7 +50,7 @@ def build_missing_files(): ] ) - with open(os.path.join(sites_path, "assets", "frappe", "build.json")) as f: + with open(frappe_build) as f: all_asset_files = json.load(f).keys() for asset in all_asset_files: @@ -118,6 +119,11 @@ def download_frappe_assets(verbose=True): if not file.isdir(): dest = "." + file.name.replace("./frappe-bench/sites", "") show = dest.replace("./assets/", "") + + dirname = os.path.dirname(dest) + if not os.path.exists(dirname): + os.makedirs(dirname, exist_ok=True) + tar.makefile(file, dest) print("{0} Restored {1}".format(green('✔'), show)) From 86dd74f277145e0895902787e61322e5d7d73a39 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Tue, 13 Oct 2020 17:39:25 +0530 Subject: [PATCH 2/2] perf: Maintain set of created paths to reduce path.exists calls --- frappe/build.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frappe/build.py b/frappe/build.py index 1cea4cb243..f14b250a92 100644 --- a/frappe/build.py +++ b/frappe/build.py @@ -112,17 +112,20 @@ def download_frappe_assets(verbose=True): if assets_archive: import tarfile + directories_created = set() click.secho("\nExtracting assets...\n", fg="yellow") with tarfile.open(assets_archive) as tar: for file in tar: if not file.isdir(): dest = "." + file.name.replace("./frappe-bench/sites", "") + asset_directory = os.path.dirname(dest) show = dest.replace("./assets/", "") - dirname = os.path.dirname(dest) - if not os.path.exists(dirname): - os.makedirs(dirname, exist_ok=True) + if asset_directory not in directories_created: + if not os.path.exists(asset_directory): + os.makedirs(asset_directory, exist_ok=True) + directories_created.add(asset_directory) tar.makefile(file, dest) print("{0} Restored {1}".format(green('✔'), show))