1
1
import logging
2
+ from typing import Literal
2
3
3
4
import pandas as pd
4
5
import yfinance as yf
@@ -33,9 +34,17 @@ def get_stock_info(ticker: str) -> dict:
33
34
logging .error (f"Error fetching stock info for { stock } : { e } " )
34
35
35
36
@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 :
37
40
stock = yf .Ticker (ticker )
38
41
42
+ balance_sheet = (
43
+ stock .balance_sheet
44
+ if frequency == "yearly"
45
+ else stock .quarterly_balance_sheet
46
+ )
47
+
39
48
try :
40
49
fields = [
41
50
"Current Assets" ,
@@ -50,26 +59,32 @@ def get_yearly_balance_sheet(ticker: str) -> pd.DataFrame:
50
59
"Stockholders Equity" ,
51
60
]
52
61
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" ]
56
65
)
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" ]
60
69
)
61
70
62
- df_balance_sheet = stock . balance_sheet .transpose ()
71
+ df_balance_sheet = balance_sheet .transpose ()
63
72
df_balance_sheet = df_balance_sheet .reindex (columns = fields , fill_value = 0 )
64
73
65
74
return df_balance_sheet .sort_index ().tail (4 )
66
75
except Exception as e :
67
76
logging .error (f"Error fetching balance sheet for { stock } : { e } " )
68
77
69
78
@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 :
71
82
stock = yf .Ticker (ticker )
72
83
84
+ income_statement = (
85
+ stock .income_stmt if frequency == "yearly" else stock .quarterly_income_stmt
86
+ )
87
+
73
88
try :
74
89
fields = [
75
90
"Total Revenue" ,
@@ -87,7 +102,7 @@ def get_yearly_income_statement(ticker: str) -> pd.DataFrame:
87
102
"Basic EPS" ,
88
103
]
89
104
90
- df_income_stmt = stock . income_stmt .transpose ()
105
+ df_income_stmt = income_statement .transpose ()
91
106
df_income_stmt = df_income_stmt .reindex (columns = fields , fill_value = 0 )
92
107
93
108
return df_income_stmt .sort_index ().tail (4 )
@@ -96,8 +111,15 @@ def get_yearly_income_statement(ticker: str) -> pd.DataFrame:
96
111
logging .error (f"Error fetching income statement for { stock } : { e } " )
97
112
98
113
@staticmethod
99
- def get_yearly_cashflow (ticker : str ):
114
+ def get_cashflow (
115
+ ticker : str , frequency : Literal ["yearly" , "quarterly" ]
116
+ ) -> pd .DataFrame :
100
117
stock = yf .Ticker (ticker )
118
+
119
+ cashflow = (
120
+ stock .cash_flow if frequency == "yearly" else stock .quarterly_cashflow
121
+ )
122
+
101
123
try :
102
124
fields = [
103
125
"Operating Cash Flow" ,
@@ -106,7 +128,7 @@ def get_yearly_cashflow(ticker: str):
106
128
"Capital Expenditure" ,
107
129
"Free Cash Flow" ,
108
130
]
109
- df_cashflow = stock . cash_flow .transpose ()
131
+ df_cashflow = cashflow .transpose ()
110
132
df_cashflow = df_cashflow .reindex (columns = fields , fill_value = 0 )
111
133
112
134
return df_cashflow .sort_index ().tail (4 )
0 commit comments