Skip to content

Commit ef36dd8

Browse files
committed
Add error handling for download failures and extend tests for long series
Issue #19
1 parent 13266f5 commit ef36dd8

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

bcb/sgs/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import json
12
from io import StringIO
23

3-
import requests
44
import pandas as pd
5+
import requests
56

67
from bcb.utils import Date
78

@@ -119,6 +120,12 @@ def get(codes, start=None, end=None, last=0, multi=True, freq=None):
119120
urd = _get_url_and_payload(code.value, start, end, last)
120121
res = requests.get(urd["url"], params=urd["payload"])
121122
if res.status_code != 200:
123+
try:
124+
res_json = json.loads(res.text)
125+
except Exception:
126+
res_json = {}
127+
if "error" in res_json:
128+
raise Exception("Download error: {}".format(res_json["error"]))
122129
raise Exception("Download error: code = {}".format(code.value))
123130
df = pd.read_json(StringIO(res.text))
124131
df = _format_df(df, code, freq)

tests/sgs/test_series.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from datetime import datetime
2+
23
import pandas as pd
4+
35
from bcb import sgs
46

57

@@ -87,3 +89,16 @@ def test_get_series():
8789
assert len(x) == 5
8890
assert x.index[0] == datetime.strptime("2021-01-18", "%Y-%m-%d")
8991
assert x.index[-1] == datetime.strptime("2021-01-22", "%Y-%m-%d")
92+
93+
94+
def test_get_long_series_error():
95+
# Test for error when getting long series
96+
try:
97+
sgs.get(1, start="2000-01-01", end="2023-01-01")
98+
except Exception as e:
99+
assert (
100+
str(e)
101+
== "Download error: O sistema aceita uma janela de consulta de, no máximo, 10 anos em séries de periodicidade diária"
102+
)
103+
else:
104+
assert False, "Expected an exception but none was raised."

0 commit comments

Comments
 (0)