From 3307d2579a46e1dc9e0b1db92579e192505f7337 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 27 Sep 2023 11:03:15 +0530 Subject: [PATCH] refactor: add import guard for erpnext --- .../doctype/mpesa_settings/mpesa_settings.py | 4 +++- payments/utils/__init__.py | 1 + payments/utils/utils.py | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/payments/payment_gateways/doctype/mpesa_settings/mpesa_settings.py b/payments/payment_gateways/doctype/mpesa_settings/mpesa_settings.py index 34265889..43d5348b 100644 --- a/payments/payment_gateways/doctype/mpesa_settings/mpesa_settings.py +++ b/payments/payment_gateways/doctype/mpesa_settings/mpesa_settings.py @@ -14,6 +14,7 @@ from payments.payment_gateways.doctype.mpesa_settings.mpesa_custom_fields import ( create_custom_pos_fields, ) +from payments.utils import erpnext_app_import_guard class MpesaSettings(Document): @@ -354,7 +355,8 @@ def fetch_param_value(response, key, key_field): def create_mode_of_payment(gateway, payment_type="General"): - from erpnext import get_default_company + with erpnext_app_import_guard(): + from erpnext import get_default_company payment_gateway_account = frappe.db.get_value( "Payment Gateway Account", {"payment_gateway": gateway}, ["payment_account"] diff --git a/payments/utils/__init__.py b/payments/utils/__init__.py index 54a5c2e8..fb540bd5 100644 --- a/payments/utils/__init__.py +++ b/payments/utils/__init__.py @@ -4,4 +4,5 @@ delete_custom_fields, get_payment_gateway_controller, make_custom_fields, + erpnext_app_import_guard, ) diff --git a/payments/utils/utils.py b/payments/utils/utils.py index 930f243d..e56a89c2 100644 --- a/payments/utils/utils.py +++ b/payments/utils/utils.py @@ -1,6 +1,7 @@ import click import frappe from frappe import _ +from contextlib import contextmanager from frappe.custom.doctype.custom_field.custom_field import create_custom_fields @@ -188,3 +189,16 @@ def before_install(): # a lot of apis don;t exist in v10 and this is a (at the moment) required app for erpnext. if not frappe.get_meta("Module Def").has_field("custom"): return False + + +@contextmanager +def erpnext_app_import_guard(): + marketplace_link = 'Marketplace' + github_link = 'GitHub' + msg = _("erpnext app is not installed. Please install it from {} or {}").format( + marketplace_link, github_link + ) + try: + yield + except ImportError: + frappe.throw(msg, title=_("Missing ERPNext App"))