diff --git a/tests/test_tiingo.py b/tests/test_tiingo.py index bab5587..0d0da23 100644 --- a/tests/test_tiingo.py +++ b/tests/test_tiingo.py @@ -6,6 +6,7 @@ from unittest import TestCase import vcr from tiingo import TiingoClient +from tiingo.api import InvalidFrequencyError from tiingo.restclient import RestClientError @@ -124,6 +125,13 @@ class TestTickerPrices(TestCase): assert len(tickers) > 1 assert all(ticker['assetType'] == 'ETF' for ticker in tickers) + def test_invalid_frequency_error(self): + with self.assertRaises(InvalidFrequencyError): + prices = self._client.get_ticker_price("GOOGL", + startDate="2018-01-02", + endDate="2018-01-02", + frequency="1.5mins") + # tiingo/news class TestNews(TestCase): diff --git a/tiingo/api.py b/tiingo/api.py index c8b7e22..dead54f 100644 --- a/tiingo/api.py +++ b/tiingo/api.py @@ -9,6 +9,8 @@ from collections import namedtuple from zipfile import ZipFile from tiingo.restclient import RestClient import requests +import re + try: import pandas as pd pandas_is_installed = True @@ -86,6 +88,8 @@ class TiingoClient(RestClient): 'User-Agent': 'tiingo-python-client {}'.format(VERSION) } + self._frequency_pattern = re.compile('^[0-9]+(min)$|(hour)$', re.IGNORECASE) + def __repr__(self): return ''.format(self._base_url) @@ -139,12 +143,8 @@ class TiingoClient(RestClient): :return (boolean): """ daily_freqs = ['daily', 'weekly', 'monthly', 'annually'] - intraday_freqs = ['min', 'hour'] - if frequency.lower() in daily_freqs: - return False - elif intraday_freqs[0] in frequency.lower() or \ - intraday_freqs[1] in frequency.lower(): + if frequency.lower() in daily_freqs or re.match(self._frequency_pattern, frequency): return False else: return True @@ -159,7 +159,7 @@ class TiingoClient(RestClient): if self._invalid_frequency(frequency): etext = ("Error: {} is an invalid frequency. Check Tiingo API documentation " "for valid EOD or intraday frequency format.") - raise self.InvalidFrequencyError(etext.format(frequency)) + raise InvalidFrequencyError(etext.format(frequency)) else: if frequency.lower() in ['daily', 'weekly', 'monthly', 'annually']: return "tiingo/daily/{}/prices"