Skip to content

Commit a9f254b

Browse files
authored
Allow error messages without code field (#738)
1 parent 32bb2a4 commit a9f254b

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

alpaca_trade_api/rest.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def __init__(self, error, http_error=None):
5656

5757
@property
5858
def code(self):
59-
return self._error['code']
59+
return self._error.get('code', self.status_code)
6060

6161
@property
6262
def status_code(self):
@@ -74,6 +74,15 @@ def response(self):
7474
if self._http_error is not None:
7575
return self._http_error.response
7676

77+
def raise_api_error(resp: requests.Response, http_error: requests.HTTPError):
78+
try:
79+
error = resp.json()
80+
except:
81+
raise http_error from None
82+
if 'message' in error:
83+
raise APIError(error, http_error) from None
84+
raise http_error from None
85+
7786

7887
class TimeFrameUnit(Enum):
7988
Minute = "Min"
@@ -236,12 +245,7 @@ def _one_request(self, method: str, url: URL, opts: dict, retry: int):
236245
# retry if we hit Rate Limit
237246
if resp.status_code in retry_codes and retry > 0:
238247
raise RetryException()
239-
if 'code' in resp.text:
240-
error = resp.json()
241-
if 'code' in error:
242-
raise APIError(error, http_error)
243-
else:
244-
raise
248+
raise_api_error(resp, http_error)
245249
if resp.text != '':
246250
return resp.json()
247251
return None

requirements/requirements_test.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ requests-mock
44
coverage>=4.4.1
55
mock>=1.0.1
66
flake8
7-
deprecated
7+
deprecated

0 commit comments

Comments
 (0)