Skip to content

Commit f160ca6

Browse files
committed
Add sandbox support
1 parent 0cef790 commit f160ca6

File tree

2 files changed

+77
-69
lines changed

2 files changed

+77
-69
lines changed

pandas_datareader/iex/daily.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ def __init__(self, symbols=None, start=None, end=None, retry_count=3,
5353
raise ValueError('The IEX Cloud API key must be provided either '
5454
'through the api_key variable or through the '
5555
' environment variable IEX_API_KEY')
56+
# Support for sandbox environment (testing purposes)
57+
if os.getenv("IEX_SANDBOX") == "enable":
58+
self.sandbox = True
59+
else:
60+
self.sandbox = False
5661
self.api_key = api_key
5762
super(IEXDailyReader, self).__init__(symbols=symbols, start=start,
5863
end=end, retry_count=retry_count,
@@ -62,7 +67,10 @@ def __init__(self, symbols=None, start=None, end=None, retry_count=3,
6267
@property
6368
def url(self):
6469
"""API URL"""
65-
return 'https://sandbox.iexapis.com/stable/stock/market/batch'
70+
if self.sandbox is True:
71+
return 'https://sandbox.iexapis.com/stable/stock/market/batch'
72+
else:
73+
return 'https://cloud.iexapis.com/stable/stock/market/batch'
6674

6775
@property
6876
def endpoint(self):
Lines changed: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,68 @@
1-
from datetime import datetime
2-
import os
3-
4-
from pandas import DataFrame, MultiIndex
5-
6-
import pytest
7-
8-
import pandas_datareader.data as web
9-
10-
11-
@pytest.mark.skipif(os.getenv("IEX_SANDBOX") != 'enable',
12-
reason='All tests must be run in sandbox mode')
13-
class TestIEXDaily(object):
14-
15-
@classmethod
16-
def setup_class(cls):
17-
pytest.importorskip("lxml")
18-
19-
@property
20-
def start(self):
21-
return datetime(2015, 2, 9)
22-
23-
@property
24-
def end(self):
25-
return datetime(2017, 5, 24)
26-
27-
def test_iex_bad_symbol(self):
28-
with pytest.raises(Exception):
29-
web.DataReader("BADTICKER", "iex,", self.start, self.end)
30-
31-
def test_iex_bad_symbol_list(self):
32-
with pytest.raises(Exception):
33-
web.DataReader(["AAPL", "BADTICKER"], "iex",
34-
self.start, self.end)
35-
36-
def test_daily_invalid_date(self):
37-
start = datetime(2000, 1, 5)
38-
end = datetime(2017, 5, 24)
39-
with pytest.raises(Exception):
40-
web.DataReader(["AAPL", "TSLA"], "iex", start, end)
41-
42-
def test_single_symbol(self):
43-
df = web.DataReader("AAPL", "iex", self.start, self.end)
44-
assert list(df) == ["open", "high", "low", "close", "volume"]
45-
assert len(df) == 578
46-
47-
def test_multiple_symbols(self):
48-
syms = ["AAPL", "MSFT", "TSLA"]
49-
df = web.DataReader(syms, "iex", self.start, self.end)
50-
assert sorted(list(df.columns.levels[1])) == syms
51-
for sym in syms:
52-
assert len(df.xs(sym, level='Symbols', axis=1) == 578)
53-
54-
def test_multiple_symbols_2(self):
55-
syms = ["AAPL", "MSFT", "TSLA"]
56-
good_start = datetime(2017, 2, 9)
57-
good_end = datetime(2017, 5, 24)
58-
df = web.DataReader(syms, "iex", good_start, good_end)
59-
assert isinstance(df, DataFrame)
60-
assert isinstance(df.columns, MultiIndex)
61-
assert len(df.columns.levels[1]) == 3
62-
assert sorted(list(df.columns.levels[1])) == syms
63-
64-
a = df.xs("AAPL", axis=1, level='Symbols')
65-
t = df.xs("TSLA", axis=1, level='Symbols')
66-
67-
assert len(a) == 73
68-
assert len(t) == 73
1+
from datetime import datetime
2+
import os
3+
4+
from pandas import DataFrame, MultiIndex
5+
6+
import pytest
7+
8+
import pandas_datareader.data as web
9+
10+
11+
@pytest.mark.skipif(os.getenv("IEX_SANDBOX") != 'enable',
12+
reason='All tests must be run in sandbox mode')
13+
class TestIEXDaily(object):
14+
15+
@classmethod
16+
def setup_class(cls):
17+
pytest.importorskip("lxml")
18+
19+
@property
20+
def start(self):
21+
return datetime(2015, 2, 9)
22+
23+
@property
24+
def end(self):
25+
return datetime(2017, 5, 24)
26+
27+
def test_iex_bad_symbol(self):
28+
with pytest.raises(Exception):
29+
web.DataReader("BADTICKER", "iex,", self.start, self.end)
30+
31+
def test_iex_bad_symbol_list(self):
32+
with pytest.raises(Exception):
33+
web.DataReader(["AAPL", "BADTICKER"], "iex",
34+
self.start, self.end)
35+
36+
def test_daily_invalid_date(self):
37+
start = datetime(2000, 1, 5)
38+
end = datetime(2017, 5, 24)
39+
with pytest.raises(Exception):
40+
web.DataReader(["AAPL", "TSLA"], "iex", start, end)
41+
42+
def test_single_symbol(self):
43+
df = web.DataReader("AAPL", "iex", self.start, self.end)
44+
assert list(df) == ["open", "high", "low", "close", "volume"]
45+
assert len(df) == 578
46+
47+
def test_multiple_symbols(self):
48+
syms = ["AAPL", "MSFT", "TSLA"]
49+
df = web.DataReader(syms, "iex", self.start, self.end)
50+
assert sorted(list(df.columns.levels[1])) == syms
51+
for sym in syms:
52+
assert len(df.xs(sym, level='Symbols', axis=1) == 578)
53+
54+
def test_multiple_symbols_2(self):
55+
syms = ["AAPL", "MSFT", "TSLA"]
56+
good_start = datetime(2017, 2, 9)
57+
good_end = datetime(2017, 5, 24)
58+
df = web.DataReader(syms, "iex", good_start, good_end)
59+
assert isinstance(df, DataFrame)
60+
assert isinstance(df.columns, MultiIndex)
61+
assert len(df.columns.levels[1]) == 3
62+
assert sorted(list(df.columns.levels[1])) == syms
63+
64+
a = df.xs("AAPL", axis=1, level='Symbols')
65+
t = df.xs("TSLA", axis=1, level='Symbols')
66+
67+
assert len(a) == 73
68+
assert len(t) == 73

0 commit comments

Comments
 (0)