From 9761989ea49fee7dacb3dcf756887f05f5a2cc9c Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 23 Jul 2025 13:33:41 +0530 Subject: [PATCH] fix: improve exchange rate fetching with retry logic and default return value --- crm/utils/__init__.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crm/utils/__init__.py b/crm/utils/__init__.py index 6f7bbad0..eaf076d5 100644 --- a/crm/utils/__init__.py +++ b/crm/utils/__init__.py @@ -275,12 +275,16 @@ def get_exchange_rate(from_currency, to_currency, date=None): url = f"https://api.frankfurter.app/{date}?from={from_currency}&to={to_currency}" - response = requests.get(url) + for _i in range(3): + response = requests.get(url) + if response.status_code == 200: + data = response.json() + rate = data["rates"].get(to_currency) + if rate: + return rate - if response.status_code == 200: - data = response.json() - rate = data["rates"].get(to_currency) - return rate - else: - frappe.throw(_("Failed to fetch historical exchange rate from external API. Please try again later.")) - return None + frappe.log_error( + f"Failed to fetch exchange rate from {from_currency} to {to_currency} on {date}", + title="Exchange Rate Fetch Error", + ) + return 1.0 # Default exchange rate if API call fails or no rate found