diff --git a/tests/test_tiingo.py b/tests/test_tiingo.py index 4a35af2..45aa439 100644 --- a/tests/test_tiingo.py +++ b/tests/test_tiingo.py @@ -79,6 +79,10 @@ class TestTickerPrices(TestCase): assert len(tickers) > 1 assert all(ticker['assetType'] == 'Stock' for ticker in tickers) + def test_ticker_metadata_for_object(self): + data = self._client.get_ticker_metadata("GOOGL", fmt='object') + assert len(data.name) > 1 + # tiingo/news class TestNews(TestCase): diff --git a/tiingo/api.py b/tiingo/api.py index 9a11086..329f36f 100644 --- a/tiingo/api.py +++ b/tiingo/api.py @@ -81,7 +81,7 @@ class TiingoClient(RestClient): return [row for row in reader if row.get('assetType') == 'Stock'] - def get_ticker_metadata(self, ticker,fmt='json'): + def get_ticker_metadata(self, ticker, fmt='json'): """Return metadata for 1 ticker Use TiingoClient.list_tickers() to get available options @@ -90,11 +90,13 @@ class TiingoClient(RestClient): """ url = "tiingo/daily/{}".format(ticker) response = self._request('GET', url) - if fmt=='json': - return response.json() - elif fmt=='object': + data = response.json() + if fmt == 'json': + return data + elif fmt == 'object': # inspired by https://stackoverflow.com/a/15882054 - return json.loads(json.dumps(response.json()), object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) + return json.loads(json.dumps(data), + object_hook=lambda d: namedtuple('Ticker', d.keys())(*d.values())) def get_ticker_price(self, ticker, startDate=None, endDate=None, @@ -134,7 +136,8 @@ class TiingoClient(RestClient): # NEWS FEEDS # tiingo/news def get_news(self, tickers=[], tags=[], sources=[], startDate=None, - endDate=None, limit=100, offset=0, sortBy="publishedDate",fmt='json'): + endDate=None, limit=100, offset=0, sortBy="publishedDate", + fmt='json'): """Return list of news articles matching given search terms https://api.tiingo.com/docs/tiingo/news @@ -161,12 +164,14 @@ class TiingoClient(RestClient): 'endDate': endDate } response = self._request('GET', url, params=params) - if fmt=='json': - return response.json() - elif fmt=='object': - return json.loads(json.dumps(response.json()), object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) + data = response.json() + if fmt == 'json': + return data + elif fmt == 'object': + return json.loads(json.dumps(data), + object_hook=lambda d: namedtuple('NewsArticle', d.keys())(*d.values())) - def get_bulk_news(self, file_id=None,fmt='json'): + def get_bulk_news(self, file_id=None, fmt='json'): """Only available to institutional clients. If ID is NOT provided, return array of available file_ids. If ID is provided, provides URL which you can use to download your @@ -178,7 +183,9 @@ class TiingoClient(RestClient): url = "tiingo/news/bulk_download" response = self._request('GET', url) - if fmt=='json': - return response.json() - elif fmt=='object': - return json.loads(json.dumps(response.json()), object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) + data = response.json() + if fmt == 'json': + return data + elif fmt == 'object': + return json.loads(json.dumps(data), + object_hook=lambda d: namedtuple('BulkDownload', d.keys())(*d.values()))