From 5db8af2343f993bea6866811dfe75574bacf2a74 Mon Sep 17 00:00:00 2001 From: *3d4nf03033 Date: Mon, 5 Jun 2023 16:54:54 +0900 Subject: [PATCH 1/2] Stop waiting forever when "currency not ready" --- forex_python/converter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forex_python/converter.py b/forex_python/converter.py index 4655b7b..fe60280 100644 --- a/forex_python/converter.py +++ b/forex_python/converter.py @@ -55,7 +55,7 @@ def get_rates(self, base_cur, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload) + response = requests.get(source_url, params=payload, timeout=5) if response.status_code == 200: rates = self._decode_rates(response, date_str=date_str) return rates @@ -69,7 +69,7 @@ def get_rate(self, base_cur, dest_cur, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'symbols': dest_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload) + response = requests.get(source_url, params=payload, timeout=5) if response.status_code == 200: rate = self._get_decoded_rate(response, dest_cur, date_str=date_str) if not rate: @@ -92,7 +92,7 @@ def convert(self, base_cur, dest_cur, amount, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'symbols': dest_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload) + response = requests.get(source_url, params=payload, timeout=5) if response.status_code == 200: rate = self._get_decoded_rate( response, dest_cur, use_decimal=use_decimal, date_str=date_str) From 1ad62c448ea24e0e194a370c7d8726ae7d1800b8 Mon Sep 17 00:00:00 2001 From: *3d4nf03033 Date: Wed, 23 Aug 2023 14:55:05 +0900 Subject: [PATCH 2/2] catching ReadTimeout and ConnectTimeout exception --- forex_python/converter.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/forex_python/converter.py b/forex_python/converter.py index fe60280..179c13b 100644 --- a/forex_python/converter.py +++ b/forex_python/converter.py @@ -2,6 +2,7 @@ from decimal import Decimal import requests +from requests.exceptions import ReadTimeout, ConnectTimeout import simplejson as json @@ -55,7 +56,10 @@ def get_rates(self, base_cur, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload, timeout=5) + try: + response = requests.get(source_url, params=payload, timeout=5) + except (ReadTimeout, ConnectTimeout): + raise RatesNotAvailableError("Currency Rates Source Not Ready") if response.status_code == 200: rates = self._decode_rates(response, date_str=date_str) return rates @@ -69,7 +73,10 @@ def get_rate(self, base_cur, dest_cur, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'symbols': dest_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload, timeout=5) + try: + response = requests.get(source_url, params=payload, timeout=5) + except (ReadTimeout, ConnectTimeout): + raise RatesNotAvailableError("Currency Rates Source Not Ready") if response.status_code == 200: rate = self._get_decoded_rate(response, dest_cur, date_str=date_str) if not rate: @@ -92,7 +99,10 @@ def convert(self, base_cur, dest_cur, amount, date_obj=None): date_str = self._get_date_string(date_obj) payload = {'base': base_cur, 'symbols': dest_cur, 'rtype': 'fpy'} source_url = self._source_url() + date_str - response = requests.get(source_url, params=payload, timeout=5) + try: + response = requests.get(source_url, params=payload, timeout=5) + except (ReadTimeout, ConnectTimeout): + raise RatesNotAvailableError("Currency Rates Source Not Ready") if response.status_code == 200: rate = self._get_decoded_rate( response, dest_cur, use_decimal=use_decimal, date_str=date_str)