From bf4e6024cd2492bace29fcd4e4bd8ecc63ccd085 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Thu, 18 Jan 2018 09:10:02 +0000 Subject: [PATCH] CLN/BUG: Fix test errors in IEX Fix test errors in IEX Mark API as unstable --- pandas_datareader/exceptions.py | 4 ++++ pandas_datareader/iex/__init__.py | 4 ++++ pandas_datareader/iex/deep.py | 5 +++++ pandas_datareader/iex/stats.py | 9 ++++++++- pandas_datareader/tests/test_iex.py | 15 +++++++-------- 5 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 pandas_datareader/exceptions.py diff --git a/pandas_datareader/exceptions.py b/pandas_datareader/exceptions.py new file mode 100644 index 00000000..8f5cefe2 --- /dev/null +++ b/pandas_datareader/exceptions.py @@ -0,0 +1,4 @@ +"""Custom warnings and exceptions""" + +class UnstableAPIWarning(Warning): + pass diff --git a/pandas_datareader/iex/__init__.py b/pandas_datareader/iex/__init__.py index a7f2bc6b..befc7284 100644 --- a/pandas_datareader/iex/__init__.py +++ b/pandas_datareader/iex/__init__.py @@ -39,6 +39,10 @@ def url(self): def read(self): df = super(IEX, self).read() + if isinstance(df, pd.DataFrame): + df = df.squeeze() + if not isinstance(df, pd.DataFrame): + df = pd.DataFrame(df) return df def _get_params(self, symbols): diff --git a/pandas_datareader/iex/deep.py b/pandas_datareader/iex/deep.py index ffd505ed..dd5adf9d 100644 --- a/pandas_datareader/iex/deep.py +++ b/pandas_datareader/iex/deep.py @@ -11,6 +11,11 @@ class Deep(IEX): def __init__(self, symbols=None, service=None, start=None, end=None, retry_count=3, pause=0.001, session=None): + if isinstance(symbols, str): + symbols = symbols.lower() + else: + symbols = [s.lower() for s in symbols] + super(Deep, self).__init__(symbols=symbols, start=start, end=end, retry_count=retry_count, diff --git a/pandas_datareader/iex/stats.py b/pandas_datareader/iex/stats.py index 45f7c529..a3c66bf7 100644 --- a/pandas_datareader/iex/stats.py +++ b/pandas_datareader/iex/stats.py @@ -1,7 +1,11 @@ -import pandas as pd from datetime import datetime, timedelta + +import pandas as pd + +from pandas_datareader.exceptions import UnstableAPIWarning from pandas_datareader.iex import IEX + # Data provided for free by IEX # Data is furnished in compliance with the guidelines promulgated in the IEX # API terms of service and manual @@ -12,6 +16,9 @@ class DailySummaryReader(IEX): def __init__(self, symbols=None, start=None, end=None, retry_count=3, pause=0.001, session=None): + import warnings + warnings.warn('Daily statistics is not working due to issues with the IEX API', + UnstableAPIWarning) self.curr_date = start super(DailySummaryReader, self).__init__(symbols=symbols, start=start, end=end, diff --git a/pandas_datareader/tests/test_iex.py b/pandas_datareader/tests/test_iex.py index 68f25be0..7ea6d7f7 100644 --- a/pandas_datareader/tests/test_iex.py +++ b/pandas_datareader/tests/test_iex.py @@ -1,9 +1,8 @@ -import pytest - -import pandas.util.testing as tm +from datetime import datetime, timedelta +import pytest from pandas import DataFrame -from datetime import datetime, timedelta + from pandas_datareader.data import (DataReader, get_summary_iex, get_last_iex, get_dailysummary_iex, get_iex_symbols, get_iex_book) @@ -25,8 +24,9 @@ def test_historical(self): def test_false_ticker(self): df = get_last_iex("INVALID TICKER") - tm.assert_frame_equal(df, DataFrame()) + assert df.shape[0] == 0 + @pytest.mark.xfail(reason='IEX daily history API is returning 500 as of Jan 2018') def test_daily(self): df = get_dailysummary_iex(start=datetime(2017, 5, 5), end=datetime(2017, 5, 6)) @@ -43,6 +43,5 @@ def test_live_prices(self): assert df["price"].mean() > 0 def test_deep(self): - dob = get_iex_book('GS', service='system-event') - assert len(dob['eventResponse']) > 0 - assert dob['timestamp'] > datetime.now() - timedelta(days=1) + dob = get_iex_book('GS', service='book') + assert 'GS' in dob