Skip to content

Commit e40f820

Browse files
authored
Merge pull request #2 from prsutherland/json-decode-error
Handle non-json http error responses and use requests.exceptions.JSONDecodeError instead of json.JSONDecodeError EodHistoricalData#57
2 parents 0ecad64 + 87a1a2b commit e40f820

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

eodhd/APIs/BaseAPI.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from json.decoder import JSONDecodeError
21
import sys
32
from requests import get as requests_get
43
from requests import ConnectionError as requests_ConnectionError
54
from requests import Timeout as requests_Timeout
6-
from requests.exceptions import HTTPError as requests_HTTPError
5+
from requests.exceptions import HTTPError as requests_HTTPError, JSONDecodeError as requests_JSONDecodeError
76
from rich.console import Console
87

98
from eodhd.rates import Rate
@@ -27,7 +26,9 @@ def _rest_get_method(self, api_key: str, endpoint: str = "", uri: str = "", quer
2726

2827
if resp.status_code != 200:
2928
try:
30-
if "message" in resp.json():
29+
if resp.headers.get("Content-Type") != 'application/json':
30+
resp_message = resp.text
31+
elif "message" in resp.json():
3132
resp_message = resp.json()["message"]
3233
elif "errors" in resp.json():
3334
self.console.log(resp.json())
@@ -38,7 +39,7 @@ def _rest_get_method(self, api_key: str, endpoint: str = "", uri: str = "", quer
3839
message = f"({resp.status_code}) {self._api_url} - {resp_message}"
3940
self.console.log(message)
4041

41-
except JSONDecodeError as err:
42+
except requests_JSONDecodeError as err:
4243
self.console.log(err)
4344

4445
try:

eodhd/apiclient.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"""apiclient.py"""
22

3-
from json.decoder import JSONDecodeError
43
import sys
54
from enum import Enum
65
from datetime import datetime
@@ -11,7 +10,7 @@
1110
from requests import get as requests_get
1211
from requests import ConnectionError as requests_ConnectionError
1312
from requests import Timeout as requests_Timeout
14-
from requests.exceptions import HTTPError as requests_HTTPError
13+
from requests.exceptions import HTTPError as requests_HTTPError, JSONDecodeError as requests_JSONDecodeError
1514
from rich.console import Console
1615
from rich.progress import track
1716

@@ -122,7 +121,9 @@ def _rest_get(self, endpoint: str = "", uri: str = "", querystring: str = "") ->
122121

123122
if resp.status_code != 200:
124123
try:
125-
if "message" in resp.json():
124+
if resp.headers.get("Content-Type") != 'application/json':
125+
resp_message = resp.text
126+
elif "message" in resp.json():
126127
resp_message = resp.json()["message"]
127128
elif "errors" in resp.json():
128129
self.console.log(resp.json())
@@ -133,7 +134,7 @@ def _rest_get(self, endpoint: str = "", uri: str = "", querystring: str = "") ->
133134
message = f"({resp.status_code}) {self._api_url} - {resp_message}"
134135
self.console.log(message)
135136

136-
except JSONDecodeError as err:
137+
except requests_JSONDecodeError as err:
137138
self.console.log(err)
138139

139140
try:

0 commit comments

Comments
 (0)