Skip to content

Commit 673ff92

Browse files
committed
Adapt Yahoo Finance API to get yearly and quarterly data
1 parent dcb5e77 commit 673ff92

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

src/infra/yahoo.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Literal
23

34
import pandas as pd
45
import yfinance as yf
@@ -33,9 +34,17 @@ def get_stock_info(ticker: str) -> dict:
3334
logging.error(f"Error fetching stock info for {stock}: {e}")
3435

3536
@staticmethod
36-
def get_yearly_balance_sheet(ticker: str) -> pd.DataFrame:
37+
def get_balance_sheet(
38+
ticker: str, frequency: Literal["yearly", "quarterly"]
39+
) -> pd.DataFrame:
3740
stock = yf.Ticker(ticker)
3841

42+
balance_sheet = (
43+
stock.balance_sheet
44+
if frequency == "yearly"
45+
else stock.quarterly_balance_sheet
46+
)
47+
3948
try:
4049
fields = [
4150
"Current Assets",
@@ -50,26 +59,32 @@ def get_yearly_balance_sheet(ticker: str) -> pd.DataFrame:
5059
"Stockholders Equity",
5160
]
5261

53-
stock.balance_sheet.loc["Debt to Equity"] = (
54-
stock.balance_sheet.loc["Total Liabilities Net Minority Interest"]
55-
/ stock.balance_sheet.loc["Stockholders Equity"]
62+
balance_sheet.loc["Debt to Equity"] = (
63+
balance_sheet.loc["Total Liabilities Net Minority Interest"]
64+
/ balance_sheet.loc["Stockholders Equity"]
5665
)
57-
stock.balance_sheet.loc["Current Ratio"] = (
58-
stock.balance_sheet.loc["Current Assets"]
59-
/ stock.balance_sheet.loc["Current Liabilities"]
66+
balance_sheet.loc["Current Ratio"] = (
67+
balance_sheet.loc["Current Assets"]
68+
/ balance_sheet.loc["Current Liabilities"]
6069
)
6170

62-
df_balance_sheet = stock.balance_sheet.transpose()
71+
df_balance_sheet = balance_sheet.transpose()
6372
df_balance_sheet = df_balance_sheet.reindex(columns=fields, fill_value=0)
6473

6574
return df_balance_sheet.sort_index().tail(4)
6675
except Exception as e:
6776
logging.error(f"Error fetching balance sheet for {stock}: {e}")
6877

6978
@staticmethod
70-
def get_yearly_income_statement(ticker: str) -> pd.DataFrame:
79+
def get_income_statement(
80+
ticker: str, frequency: Literal["yearly", "quarterly"]
81+
) -> pd.DataFrame:
7182
stock = yf.Ticker(ticker)
7283

84+
income_statement = (
85+
stock.income_stmt if frequency == "yearly" else stock.quarterly_income_stmt
86+
)
87+
7388
try:
7489
fields = [
7590
"Total Revenue",
@@ -87,7 +102,7 @@ def get_yearly_income_statement(ticker: str) -> pd.DataFrame:
87102
"Basic EPS",
88103
]
89104

90-
df_income_stmt = stock.income_stmt.transpose()
105+
df_income_stmt = income_statement.transpose()
91106
df_income_stmt = df_income_stmt.reindex(columns=fields, fill_value=0)
92107

93108
return df_income_stmt.sort_index().tail(4)
@@ -96,8 +111,15 @@ def get_yearly_income_statement(ticker: str) -> pd.DataFrame:
96111
logging.error(f"Error fetching income statement for {stock}: {e}")
97112

98113
@staticmethod
99-
def get_yearly_cashflow(ticker: str):
114+
def get_cashflow(
115+
ticker: str, frequency: Literal["yearly", "quarterly"]
116+
) -> pd.DataFrame:
100117
stock = yf.Ticker(ticker)
118+
119+
cashflow = (
120+
stock.cash_flow if frequency == "yearly" else stock.quarterly_cashflow
121+
)
122+
101123
try:
102124
fields = [
103125
"Operating Cash Flow",
@@ -106,7 +128,7 @@ def get_yearly_cashflow(ticker: str):
106128
"Capital Expenditure",
107129
"Free Cash Flow",
108130
]
109-
df_cashflow = stock.cash_flow.transpose()
131+
df_cashflow = cashflow.transpose()
110132
df_cashflow = df_cashflow.reindex(columns=fields, fill_value=0)
111133

112134
return df_cashflow.sort_index().tail(4)

src/ui/layout.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,21 @@ def render_overview(financial_data):
170170

171171

172172
def render_balance_sheet(financial_data):
173-
balance_sheet = financial_data.get_yearly_balance_sheet(st.session_state["ticker"])
173+
balance_sheet = financial_data.get_balance_sheet(
174+
st.session_state["ticker"], frequency="quarterly"
175+
)
174176
st.dataframe(balance_sheet)
175177

176178

177179
def render_income_stmt(financial_data):
178-
income_stmt = financial_data.get_yearly_income_statement(st.session_state["ticker"])
180+
income_stmt = financial_data.get_income_statement(
181+
st.session_state["ticker"], frequency="quarterly"
182+
)
179183
st.dataframe(income_stmt)
180184

181185

182186
def render_cashflow(financial_data):
183-
cashflow = financial_data.get_yearly_cashflow(st.session_state["ticker"])
187+
cashflow = financial_data.get_cashflow(
188+
st.session_state["ticker"], frequency="quarterly"
189+
)
184190
st.dataframe(cashflow)

0 commit comments

Comments
 (0)