diff --git a/requirements.txt b/requirements.txt index 427c16ebb..b8768416b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,4 @@ pytz>=2022.5 frozendict>=2.3.4 beautifulsoup4>=4.11.1 html5lib>=1.1 -peewee>=3.16.2 \ No newline at end of file +peewee>=3.16.2 diff --git a/tests/ticker.py b/tests/ticker.py index 393681335..ff0d8e6c4 100644 --- a/tests/ticker.py +++ b/tests/ticker.py @@ -112,8 +112,24 @@ def test_badTicker(self): dat.fast_info[k] for attribute_name, attribute_type in ticker_attributes: - assert_attribute_type(self, dat, attribute_name, attribute_type) - + assert_attribute_type(self, dat, attribute_name, attribute_type) + + with self.assertRaises(YFNotImplementedError): + assert isinstance(dat.earnings, pd.Series) + assert dat.earnings.empty + assert isinstance(dat.dividends, pd.Series) + assert dat.dividends.empty + assert isinstance(dat.splits, pd.Series) + assert dat.splits.empty + assert isinstance(dat.capital_gains, pd.Series) + assert dat.capital_gains.empty + with self.assertRaises(YFNotImplementedError): + assert isinstance(dat.shares, pd.DataFrame) + assert dat.shares.empty + assert isinstance(dat.actions, pd.DataFrame) + assert dat.actions.empty + + def test_goodTicker(self): # that yfinance works when full api is called on same instance of ticker diff --git a/yfinance/base.py b/yfinance/base.py index d2f3c9277..c852df245 100644 --- a/yfinance/base.py +++ b/yfinance/base.py @@ -27,7 +27,7 @@ import logging import time as _time import warnings -from typing import Optional +from typing import Optional, Union from urllib.parse import quote as urlencode import dateutil as _dateutil @@ -1916,7 +1916,7 @@ def get_balance_sheet(self, proxy=None, as_dict=False, pretty=False, freq="yearl def get_balancesheet(self, proxy=None, as_dict=False, pretty=False, freq="yearly"): return self.get_balance_sheet(proxy, as_dict, pretty, freq) - def get_cash_flow(self, proxy=None, as_dict=False, pretty=False, freq="yearly"): + def get_cash_flow(self, proxy=None, as_dict=False, pretty=False, freq="yearly") -> Union[pd.DataFrame, dict]: """ :Parameters: as_dict: bool @@ -1946,31 +1946,31 @@ def get_cash_flow(self, proxy=None, as_dict=False, pretty=False, freq="yearly"): def get_cashflow(self, proxy=None, as_dict=False, pretty=False, freq="yearly"): return self.get_cash_flow(proxy, as_dict, pretty, freq) - def get_dividends(self, proxy=None): + def get_dividends(self, proxy=None) -> pd.Series: if self._history is None: self.history(period="max", proxy=proxy) if self._history is not None and "Dividends" in self._history: dividends = self._history["Dividends"] return dividends[dividends != 0] - return [] + return pd.Series() - def get_capital_gains(self, proxy=None): + def get_capital_gains(self, proxy=None) -> pd.Series: if self._history is None: self.history(period="max", proxy=proxy) if self._history is not None and "Capital Gains" in self._history: capital_gains = self._history["Capital Gains"] return capital_gains[capital_gains != 0] - return [] + return pd.Series() - def get_splits(self, proxy=None): + def get_splits(self, proxy=None) -> pd.Series: if self._history is None: self.history(period="max", proxy=proxy) if self._history is not None and "Stock Splits" in self._history: splits = self._history["Stock Splits"] return splits[splits != 0] - return [] + return pd.Series() - def get_actions(self, proxy=None): + def get_actions(self, proxy=None) -> pd.DataFrame: if self._history is None: self.history(period="max", proxy=proxy) if self._history is not None and "Dividends" in self._history and "Stock Splits" in self._history: @@ -1979,9 +1979,9 @@ def get_actions(self, proxy=None): action_columns.append("Capital Gains") actions = self._history[action_columns] return actions[actions != 0].dropna(how='all').fillna(0) - return [] + return pd.DataFrame() - def get_shares(self, proxy=None, as_dict=False): + def get_shares(self, proxy=None, as_dict=False) -> Union[pd.DataFrame, dict]: self._fundamentals.proxy = proxy or self.proxy data = self._fundamentals.shares if as_dict: @@ -2078,7 +2078,7 @@ def get_isin(self, proxy=None) -> Optional[str]: self._isin = data.split(search_str)[1].split('"')[0].split('|')[0] return self._isin - def get_news(self, proxy=None): + def get_news(self, proxy=None) -> list: if self._news: return self._news diff --git a/yfinance/ticker.py b/yfinance/ticker.py index 806899ace..75ba14029 100644 --- a/yfinance/ticker.py +++ b/yfinance/ticker.py @@ -134,7 +134,7 @@ def dividends(self) -> _pd.Series: return self.get_dividends() @property - def capital_gains(self): + def capital_gains(self) -> _pd.Series: return self.get_capital_gains() @property @@ -146,7 +146,7 @@ def actions(self) -> _pd.DataFrame: return self.get_actions() @property - def shares(self) -> _pd.DataFrame : + def shares(self) -> _pd.DataFrame: return self.get_shares() @property @@ -259,7 +259,7 @@ def options(self) -> tuple: return tuple(self._expirations.keys()) @property - def news(self): + def news(self) -> list: return self.get_news() @property