예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
    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()
예제 #6
0
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()
예제 #7
0
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()
예제 #8
0
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()
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
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()
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
    def test_sanitize_dates(self):
        start = datetime.datetime(2017, 3, 4)
        end = datetime.datetime(2018, 3, 9)

        assert _sanitize_dates(start, end) == (start, end)
예제 #15
0
 def test_sanitize_dates_years(self):
     expected = (datetime.datetime(2017, 1,
                                   1), datetime.datetime(2018, 1, 1))
     assert _sanitize_dates(2017, 2018) == expected
예제 #16
0
 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)
예제 #17
0
 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)
예제 #18
0
    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)