def test_sanitize_invalid_dates(self): with pytest.raises(ValueError): _sanitize_dates(2019, 2018) with pytest.raises(ValueError): _sanitize_dates("2019-01-01", "2018-01-01") with pytest.raises(ValueError): _sanitize_dates("20199", None) with pytest.raises(ValueError): _sanitize_dates(2022, None) with pytest.raises(ValueError): _sanitize_dates(None, 2022)
def test_sanitize_dates_int(self): start_int = 2018 end_int = 2019 expected_start = pd.to_datetime(dt.datetime(start_int, 1, 1)) expected_end = pd.to_datetime(dt.datetime(end_int, 1, 1)) assert _sanitize_dates(start_int, end_int) == (expected_start, expected_end)
def get_historical_data(symbols=None, start=None, end=None, output_format='json', **kwargs): """ Top-level function to obtain historical date for a symbol or list of symbols. Return an instance of HistoricalReader Parameters ---------- symbols: str or list, default None A symbol or list of symbols start: datetime.datetime, default None Beginning of desired date range end: datetime.datetime, default None End of required date range output_format: str, default 'json', optional Desired output format (json or pandas) kwargs: Additional Request Parameters (see base class) Returns ------- list or DataFrame Historical stock prices over date range, start to end """ start, end = _sanitize_dates(start, end) return HistoricalReader(symbols, start=start, end=end, output_format=output_format, **kwargs).fetch()
def get_stats_daily(start=None, end=None, last=None, output_format='json', **kwargs): """ Top-level function for obtaining data from the Historical Daily endpoint of IEX Stats Parameters ---------- start: datetime.datetime, default None, optional Start of data retrieval period end: datetime.datetime, default None, optional End of data retrieval period last: int, default None, optional Used in place of date range to retrieve previous number of trading days (up to 90) output_format: str, default 'json', optional Desired output format. kwargs: Additional Request Parameters (see base class) """ start, end = _sanitize_dates(start, end) return DailySummaryReader(start=start, end=end, last=last, output_format=output_format, **kwargs).fetch()
def test_sanitize_dates_default(self): exp_start = datetime.datetime(2015, 1, 1, 0, 0) exp_end = datetime.datetime.today() start, end = _sanitize_dates(None, None) assert start == exp_start assert end.date() == exp_end.date()
def get_stats_daily(start=None, end=None, last=None, **kwargs): """ Stats Historical Daily This call will return daily stats for a given month or day. .. warning:: This endpoint is marked as "in development" by the provider. Reference: https://iexcloud.io/docs/api/#stats-historical-daily-in-dev Data Weighting: ``Free`` Parameters ---------- start : string, int, date, datetime, Timestamp Starting date. Parses many different kind of date representations (e.g., 'JAN-01-2010', '1/1/10', 'Jan, 1, 1980'). Defaults to 15 years before current date. end : string, int, date, datetime, Timestamp Ending date last: int, default None, optional Used in place of date range to retrieve previous number of trading days (up to 90) kwargs: Additional Request Parameters (see base class) """ start, end = _sanitize_dates(start, end) return DailySummaryReader(start=start, end=end, last=last, **kwargs).fetch()
def get_stats_daily(start=None, end=None, last=None, **kwargs): """ Stats Historical Daily This call will return daily stats for a given month or day. .. warning:: This endpoint is marked as "in development" by the provider. Reference: https://iexcloud.io/docs/api/#stats-historical-daily-in-dev Data Weighting: ``Free`` Parameters ---------- start: datetime.datetime, default None, optional Start of data retrieval period end: datetime.datetime, default None, optional End of data retrieval period last: int, default None, optional Used in place of date range to retrieve previous number of trading days (up to 90) kwargs: Additional Request Parameters (see base class) """ start, end = _sanitize_dates(start, end) return DailySummaryReader(start=start, end=end, last=last, **kwargs).fetch()
def get_stats_daily(start=None, end=None, last=None, **kwargs): """ MOVED to iexfinance.iexdata.get_stats_daily """ import warnings warnings.warn(WNG_MSG % ("get_stats_daily", "iexdata.get_stats_daily")) start, end = _sanitize_dates(start, end) return DailySummaryReader(start=start, end=end, last=last, **kwargs).fetch()
def __init__(self, symbols, start=None, end=None, close_only=False, **kwargs): start = start or datetime.datetime.today() - datetime.timedelta( days=365) self.start, self.end = _sanitize_dates(start, end) self.close_only = close_only super(HistoricalReader, self).__init__(symbols, **kwargs)
def __init__(self, start=None, end=None, last=None, **kwargs): self.curr_date = start self.last = last # if no start specified, use 4 years from previous date to override # _sanitize_dates if start is None: start = dt.date.today() - timedelta(days=365 * 4) self.start, self.end = _sanitize_dates(start, end) self.json_parse_int = kwargs.pop("json_parse_int", None) self.json_parse_float = kwargs.pop("json_parse_float", None) self._validate_params() super(DailySummaryReader, self).__init__(**kwargs)
def get_historical_data(symbols, start=None, end=None, **kwargs): """ Function to obtain historical date for a symbol or list of symbols. Return an instance of HistoricalReader Parameters ---------- symbols: str or list A symbol or list of symbols start: datetime.datetime, default None Beginning of desired date range end: datetime.datetime, default None End of required date range kwargs: Additional Request Parameters (see base class) Returns ------- list or DataFrame Historical stock prices over date range, start to end """ start, end = _sanitize_dates(start, end) return HistoricalReader(symbols, start=start, end=end, **kwargs).fetch()
def test_sanitize_dates(self, input_date): expected_start = pd.to_datetime(input_date) expected_end = pd.to_datetime(dt.date.today()) result = _sanitize_dates(input_date, None) assert result == (expected_start, expected_end)
def __init__(self, symbols, start, end=None, close_only=False, **kwargs): self.start, self.end = _sanitize_dates(start, end) self.single_day = True if self.end is None else False self.close_only = close_only super(HistoricalReader, self).__init__(symbols, **kwargs)
def test_sanitize_dates(self): start = datetime.datetime(2017, 3, 4) end = datetime.datetime(2018, 3, 9) assert _sanitize_dates(start, end) == (start, end)
def test_sanitize_dates_years(self): expected = (datetime.datetime(2017, 1, 1), datetime.datetime(2018, 1, 1)) assert _sanitize_dates(2017, 2018) == expected
def __init__(self, start=None, end=None, **kwargs): self.curr_date = start self.date_format = "%Y%m" self.start, self.end = _sanitize_dates(start, end) self._validate_dates(self.start, self.end) super(MonthlySummaryReader, self).__init__(**kwargs)
def test_sanitize_dates_defaults(self): start_raw = dt.date.today() - dt.timedelta(days=365 * 15) default_start = pd.to_datetime(start_raw) default_end = pd.to_datetime(dt.date.today()) assert _sanitize_dates(None, None) == (default_start, default_end)
def test_sanitize_dates_error(self): start = datetime.datetime(2018, 1, 1) end = datetime.datetime(2017, 1, 1) with pytest.raises(ValueError): _sanitize_dates(start, end)