From 5b6e6ce20257c210b8330055e166fe37b953461c Mon Sep 17 00:00:00 2001 From: Cameron Yick Date: Mon, 29 Apr 2019 23:17:02 -0400 Subject: [PATCH] [errors] Validate arguments to get_dataframe --- tiingo/api.py | 34 ++++++++++++++-------------------- tiingo/exceptions.py | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 tiingo/exceptions.py diff --git a/tiingo/api.py b/tiingo/api.py index f2ec61b..a3e3079 100644 --- a/tiingo/api.py +++ b/tiingo/api.py @@ -1,15 +1,16 @@ # -*- coding: utf-8 -*- -import os -import sys -import pkg_resources +from collections import namedtuple import csv import json -from collections import namedtuple -from zipfile import ZipFile -from tiingo.restclient import RestClient -import requests +import os import re +import sys +import pkg_resources +from zipfile import ZipFile + +from tiingo.restclient import RestClient +from tiingo.exceptions import InstallPandasException, APIColumnNameError, InvalidFrequencyError, MissingRequiredArgumentError try: import pandas as pd @@ -49,17 +50,6 @@ def dict_to_object(item, object_name): object_hook=lambda d: namedtuple(object_name, fields)(*values)) -class InstallPandasException(Exception): - pass - - -class APIColumnNameError(Exception): - pass - - -class InvalidFrequencyError(Exception): - pass - class TiingoClient(RestClient): """Class for managing interactions with the Tiingo REST API @@ -227,12 +217,16 @@ class TiingoClient(RestClient): frequency (string): Resample frequency (defaults to daily). """ - valid_columns = ['open', 'high', 'low', 'close', 'volume', 'adjOpen', 'adjHigh', 'adjLow', - 'adjClose', 'adjVolume', 'divCash', 'splitFactor'] + valid_columns = {'open', 'high', 'low', 'close', 'volume', 'adjOpen', 'adjHigh', 'adjLow', + 'adjClose', 'adjVolume', 'divCash', 'splitFactor'} if metric_name is not None and metric_name not in valid_columns: raise APIColumnNameError('Valid data items are: ' + str(valid_columns)) + if metric_name is None and type(tickers) is not str: + raise MissingRequiredArgumentError("""When tickers is provided as a list, metric_name is a required argument. + Please provide a metric_name, or call this method with one ticker at a time.""") + params = { 'format': 'json', 'resampleFreq': frequency diff --git a/tiingo/exceptions.py b/tiingo/exceptions.py new file mode 100644 index 0000000..81ff713 --- /dev/null +++ b/tiingo/exceptions.py @@ -0,0 +1,15 @@ +# Exception Clasess +class InstallPandasException(Exception): + pass + + +class APIColumnNameError(Exception): + pass + + +class InvalidFrequencyError(Exception): + pass + + +class MissingRequiredArgumentError(Exception): + pass