From 3fbb6e512103869c13737ae718db982abecf8378 Mon Sep 17 00:00:00 2001
From: Davis Thames
Date: Wed, 4 Jul 2018 07:34:50 -0400
Subject: [PATCH] Updated frequency error check
---
tests/test_tiingo.py | 8 ++++++++
tiingo/api.py | 12 ++++++------
2 files changed, 14 insertions(+), 6 deletions(-)
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"