Merge pull request #346 from n1rna/improve-list-tickers

Add support for multi tickers in list_tickers function
This commit is contained in:
Cameron Yick
2019-10-20 15:50:54 -04:00
committed by GitHub
2 changed files with 25 additions and 5 deletions

View File

@@ -107,6 +107,22 @@ class TestTickerPrices(TestCase):
frequency="30Min") frequency="30Min")
self.assertGreater(len(prices), 1) self.assertGreater(len(prices), 1)
@vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml')
def test_list_all_stock_tickers(self):
tickers = self._client.list_tickers()
assert len(tickers) > 1
assert any(ticker['assetType' == 'Stock' for ticker in tickers)
assert any(ticker['assetType' == 'Mutual Fund' for ticker in tickers)
assert any(ticker['assetType' == 'ETF' for ticker in tickers)
@vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml')
def test_list_multi_stock_tickers(self):
tickers = self._client.list_tickers(['Stock', 'ETF'])
assert len(tickers) > 1
assert any(ticker['assetType' == 'Stock' for ticker in tickers)
assert any(ticker['assetType' == 'ETF' for ticker in tickers)
assert all(ticker['assetType' != 'Mutual Fund' for ticker in tickers)
@vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml') @vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml')
def test_list_stock_tickers(self): def test_list_stock_tickers(self):
tickers = self._client.list_stock_tickers() tickers = self._client.list_stock_tickers()

View File

@@ -94,7 +94,7 @@ class TiingoClient(RestClient):
# TICKER PRICE ENDPOINTS # TICKER PRICE ENDPOINTS
# https://api.tiingo.com/docs/tiingo/daily # https://api.tiingo.com/docs/tiingo/daily
def list_tickers(self, assetType): def list_tickers(self, assetTypes=[]):
"""Return a list of dicts of metadata tickers for all supported tickers """Return a list of dicts of metadata tickers for all supported tickers
of the specified asset type, as well as metadata about each ticker. of the specified asset type, as well as metadata about each ticker.
This includes supported date range, the exchange the ticker is traded This includes supported date range, the exchange the ticker is traded
@@ -108,17 +108,21 @@ class TiingoClient(RestClient):
raw_csv = get_buffer_from_zipfile(zipdata, 'supported_tickers.csv') raw_csv = get_buffer_from_zipfile(zipdata, 'supported_tickers.csv')
reader = csv.DictReader(raw_csv) reader = csv.DictReader(raw_csv)
if not len(assetTypes):
return [row for row in reader]
assetTypesSet = set(assetTypes)
return [row for row in reader return [row for row in reader
if row.get('assetType') == assetType] if row.get('assetType') in assetTypesSet]
def list_stock_tickers(self): def list_stock_tickers(self):
return self.list_tickers('Stock') return self.list_tickers(['Stock'])
def list_etf_tickers(self): def list_etf_tickers(self):
return self.list_tickers('ETF') return self.list_tickers(['ETF'])
def list_fund_tickers(self): def list_fund_tickers(self):
return self.list_tickers('Mutual Fund') return self.list_tickers(['Mutual Fund'])
def get_ticker_metadata(self, ticker, fmt='json'): def get_ticker_metadata(self, ticker, fmt='json'):
"""Return metadata for 1 ticker """Return metadata for 1 ticker