From 521102b5891545b7e623cdddcf4b4b7a2dab1348 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 16 Aug 2022 18:23:23 +0530 Subject: [PATCH] fix: update public workspace name with json file --- frappe/__init__.py | 7 +++++++ frappe/desk/doctype/workspace/workspace.py | 20 +++++++++++++++++--- frappe/modules/export_file.py | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 1d3cf7f62e..4f312ef908 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -16,6 +16,7 @@ import inspect import json import os import re +import shutil import warnings from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, overload @@ -530,6 +531,12 @@ def throw( ) +def delete_folder(path: str) -> None: + """Delete folder and all the content inside that folder.""" + if os.path.exists(path): + shutil.rmtree(path) + + def create_folder(path, with_init=False): """Create a folder in the given path and add an `__init__.py` file (optional). diff --git a/frappe/desk/doctype/workspace/workspace.py b/frappe/desk/doctype/workspace/workspace.py index 9fa99884fb..0e49d1d7e1 100644 --- a/frappe/desk/doctype/workspace/workspace.py +++ b/frappe/desk/doctype/workspace/workspace.py @@ -9,7 +9,7 @@ from frappe.desk.desktop import save_new_widget from frappe.desk.utils import validate_route_conflict from frappe.model.document import Document from frappe.model.rename_doc import rename_doc -from frappe.modules.export_file import export_to_files +from frappe.modules.export_file import delete_folder, export_to_files class Workspace(Document): @@ -28,8 +28,22 @@ class Workspace(Document): if disable_saving_as_public(): return - if frappe.conf.developer_mode and self.module and self.public: - export_to_files(record_list=[["Workspace", self.name]], record_module=self.module) + if frappe.conf.developer_mode and self.public: + if self.module: + export_to_files(record_list=[["Workspace", self.name]], record_module=self.module) + + if self.has_value_changed("title") or self.has_value_changed("module"): + previous = self.get_doc_before_save() + if previous and previous.get("module") and previous.get("title"): + delete_folder(previous.get("module"), "Workspace", previous.get("title")) + + def before_export(self, doc): + if doc.title != doc.label and doc.label == doc.name: + self.name = doc.name = doc.label = doc.title + + def after_delete(self): + if self.module: + delete_folder(self.module, "Workspace", self.title) @staticmethod def get_module_page_map(): diff --git a/frappe/modules/export_file.py b/frappe/modules/export_file.py index b448c04f2f..7f183a750d 100644 --- a/frappe/modules/export_file.py +++ b/frappe/modules/export_file.py @@ -92,6 +92,20 @@ def get_module_name(doc): return module +def delete_folder(module, dt, dn): + if frappe.db.get_value("Module Def", module, "custom"): + module_path = get_custom_module_path(module) + else: + module_path = get_module_path(module) + + dt, dn = scrub_dt_dn(dt, dn) + + # delete folder + folder = os.path.join(module_path, dt, dn) + + frappe.delete_folder(folder) + + def create_folder(module, dt, dn, create_init): if frappe.db.get_value("Module Def", module, "custom"): module_path = get_custom_module_path(module)