fix!: meaningful error messages over KeyError

This commit is contained in:
Ankush Menat 2022-05-29 11:27:12 +05:30
parent 076eb593e3
commit 1e64abe9a5
2 changed files with 22 additions and 12 deletions

View file

@ -1258,8 +1258,10 @@ def get_module_path(module, *joins):
:param module: Module name.
:param *joins: Join additional path elements using `os.path.join`."""
module = scrub(module)
return get_pymodule_path(local.module_app[module] + "." + module, *joins)
from frappe.modules.utils import get_module_app
app = get_module_app(module)
return get_pymodule_path(app + "." + scrub(module), *joins)
def get_app_path(app_name, *joins):

View file

@ -207,13 +207,18 @@ def export_doc(doctype, name, module=None):
write_document_file(frappe.get_doc(doctype, name), module)
def get_doctype_module(doctype):
def get_doctype_module(doctype) -> str:
"""Returns **Module Def** name of given doctype."""
def make_modules_dict():
return dict(frappe.db.sql("select name, module from tabDocType"))
return frappe.cache().get_value("doctype_modules", make_modules_dict)[doctype]
doctype_module_map = frappe.cache().get_value("doctype_modules", make_modules_dict)
if module_name := doctype_module_map.get(doctype):
return module_name
else:
frappe.throw(_("DocType {} not found").format(doctype), exc=frappe.DoesNotExistError)
doctype_python_modules = {}
@ -234,9 +239,9 @@ def load_doctype_module(doctype, module=None, prefix="", suffix=""):
if key not in doctype_python_modules:
doctype_python_modules[key] = frappe.get_module(module_name)
except ImportError as e:
raise ImportError(
"Module import failed for {0} ({1})".format(doctype, module_name + " Error: " + str(e))
)
msg = f"Module import failed for {doctype}, the DocType you're trying to open might be deleted."
msg += f"<br> Error: {e}"
raise ImportError(msg) from e
return doctype_python_modules[key]
@ -251,12 +256,15 @@ def get_module_name(doctype, module, prefix="", suffix="", app=None):
)
def get_module_app(module):
return frappe.local.module_app[scrub(module)]
def get_module_app(module: str) -> str:
app = frappe.local.module_app.get(scrub(module))
if app is None:
frappe.throw(_("Module {} not found").format(module), exc=frappe.DoesNotExistError)
return app
def get_app_publisher(module):
app = frappe.local.module_app[scrub(module)]
def get_app_publisher(module: str) -> str:
app = get_module_app(module)
if not app:
frappe.throw(_("App not found"))
app_publisher = frappe.get_hooks(hook="app_publisher", app_name=app)[0]
@ -321,7 +329,7 @@ def make_boilerplate(template, doc, opts=None):
base_class=base_class,
doctype=doc.name,
**opts,
custom_controller=custom_controller
custom_controller=custom_controller,
)
)
)