Skip to content

Commit

Permalink
Merge pull request #479 from bashtage/improve-coverage-report
Browse files Browse the repository at this point in the history
TST: Add additional tests to tiingo
  • Loading branch information
bashtage committed Jan 25, 2018
2 parents 4a014c5 + 2cea674 commit fd32e09
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 7 deletions.
2 changes: 2 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ include = */pandas_datareader/*
omit =
*/_version.py
*/yahoo/*
*/edgar.py
*/google/options.py
*/google/quotes.py
*/tests/google/test_options.py
*/tests/test_edgar.py

[report]
# Regexes for lines to exclude from consideration
Expand Down
7 changes: 6 additions & 1 deletion pandas_datareader/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,15 @@ def _get_response(self, url, params=None, headers=None):

# initial attempt + retry
pause = self.pause
last_response_text = ''
for i in range(self.retry_count + 1):
response = self.session.get(url,
params=params,
headers=headers)
if response.status_code == requests.codes.ok:
return response

last_response_text = response.text.encode(response.encoding)
time.sleep(pause)

# Increase time between subsequent requests, per subclass.
Expand All @@ -146,8 +148,11 @@ def _get_response(self, url, params=None, headers=None):

if params is not None and len(params) > 0:
url = url + "?" + urlencode(params)
msg = 'Unable to read URL: {0}'.format(url)
if last_response_text:
msg += '\nResponse Text:\n{0}'.format(last_response_text)

raise RemoteDataError('Unable to read URL: {0}'.format(url))
raise RemoteDataError(msg)

def _get_crumb(self, *args):
""" To be implemented by subclass """
Expand Down
9 changes: 6 additions & 3 deletions pandas_datareader/compat/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
# flake8: noqa
import sys
from distutils.version import LooseVersion
from io import BytesIO

import pandas as pd
import pandas.io.common as com
import pandas.compat as compat
import pandas.io.common as com

from io import BytesIO
from distutils.version import LooseVersion
PY3 = sys.version_info >= (3, 0)

PANDAS_VERSION = LooseVersion(pd.__version__)

Expand Down
20 changes: 19 additions & 1 deletion pandas_datareader/tests/test_tiingo.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import pandas as pd
import pytest

from pandas_datareader.compat import PY3
from pandas_datareader.tiingo import TiingoDailyReader, TiingoMetaDataReader, \
TiingoQuoteReader
TiingoQuoteReader, get_tiingo_symbols

TEST_API_KEY = os.getenv('TIINGO_API_KEY')
# Ensure blank TEST_API_KEY not used in pull request
TEST_API_KEY = None if not TEST_API_KEY else TEST_API_KEY

syms = ['GOOG', ['GOOG', 'XOM']]
ids = list(map(str, syms))
Expand Down Expand Up @@ -42,3 +45,18 @@ def test_tiingo_metadata(symbols):
if isinstance(symbols, str):
symbols = [symbols]
assert df.shape[1] == len(symbols)


@pytest.mark.skipif(not PY3, reason='test.support missing on Python 2')
def test_tiingo_no_api_key(symbols):
from test.support import EnvironmentVarGuard
env = EnvironmentVarGuard()
env.unset('TIINGO_API_KEY')
with env:
with pytest.raises(ValueError):
TiingoMetaDataReader(symbols=symbols)


def test_tiingo_stock_symbols():
sym = get_tiingo_symbols()
assert isinstance(sym, pd.DataFrame)
4 changes: 2 additions & 2 deletions pandas_datareader/tiingo.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ def __init__(self, symbols, start=None, end=None, retry_count=3, pause=0.1,
self.symbols = [self.symbols]
self._symbol = ''
if api_key is None:
api_key = os.environ.get('TIINGO_API_KEY', None)
if api_key is None:
api_key = os.getenv('TIINGO_API_KEY')
if not api_key or not isinstance(api_key, str):
raise ValueError('The tiingo API key must be provided either '
'through the api_key variable or through the '
'environmental variable TIINGO_API_KEY.')
Expand Down

0 comments on commit fd32e09

Please sign in to comment.