Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed adding complementary to info #1774

Merged
merged 2 commits into from
Dec 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions tests/ticker.py
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,18 @@ def test_info(self):
self.assertIn("symbol", data.keys(), f"Did not find expected key '{k}' in info dict")
self.assertEqual(self.symbols[0], data["symbol"], "Wrong symbol value in info dict")

def test_complementary_info(self):
# This test is to check that we can successfully retrieve the trailing PEG ratio

# We don't expect this one to have a trailing PEG ratio
data1 = self.tickers[0].info
self.assertEqual(data1['trailingPegRatio'], None)

# This one should have a trailing PEG ratio
data2 = self.tickers[2].info
self.assertEqual(data2['trailingPegRatio'], 1.2713)
pass

# def test_fast_info_matches_info(self):
# fast_info_keys = set()
# for ticker in self.tickers:
Expand Down
18 changes: 8 additions & 10 deletions yfinance/scrapers/quote.py
Original file line number Diff line number Diff line change
Expand Up @@ -700,14 +700,12 @@ def _fetch_complementary(self, proxy):

json_str = self._data.cache_get(url=url, proxy=proxy).text
json_data = json.loads(json_str)
try:
key_stats = json_data["timeseries"]["result"][0]
if k not in key_stats:
# Yahoo website prints N/A, indicates Yahoo lacks necessary data to calculate
v = None
if json_data["timeseries"]["error"] is not None:
raise YFinanceException("Failed to parse json response from Yahoo Finance: " + json_data["error"])
for k in keys:
keydict = json_data["timeseries"]["result"][0]
if k in keydict:
self._info[k] = keydict[k][-1]["reportedValue"]["raw"]
else:
# Select most recent (last) raw value in list:
v = key_stats[k][-1]["reportedValue"]["raw"]
except Exception:
v = None
self._info[k] = v
self.info[k] = None