|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | from abc import ABC | 
					
						
						|  | import pandas as pd | 
					
						
						|  | from agent.component.base import ComponentBase, ComponentParamBase | 
					
						
						|  | import yfinance as yf | 
					
						
						|  | from api.utils.log_utils import logger | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class YahooFinanceParam(ComponentParamBase): | 
					
						
						|  | """ | 
					
						
						|  | Define the YahooFinance component parameters. | 
					
						
						|  | """ | 
					
						
						|  |  | 
					
						
						|  | def __init__(self): | 
					
						
						|  | super().__init__() | 
					
						
						|  | self.info = True | 
					
						
						|  | self.history = False | 
					
						
						|  | self.count = False | 
					
						
						|  | self.financials = False | 
					
						
						|  | self.income_stmt = False | 
					
						
						|  | self.balance_sheet = False | 
					
						
						|  | self.cash_flow_statement = False | 
					
						
						|  | self.news = True | 
					
						
						|  |  | 
					
						
						|  | def check(self): | 
					
						
						|  | self.check_boolean(self.info, "get all stock info") | 
					
						
						|  | self.check_boolean(self.history, "get historical market data") | 
					
						
						|  | self.check_boolean(self.count, "show share count") | 
					
						
						|  | self.check_boolean(self.financials, "show financials") | 
					
						
						|  | self.check_boolean(self.income_stmt, "income statement") | 
					
						
						|  | self.check_boolean(self.balance_sheet, "balance sheet") | 
					
						
						|  | self.check_boolean(self.cash_flow_statement, "cash flow statement") | 
					
						
						|  | self.check_boolean(self.news, "show news") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class YahooFinance(ComponentBase, ABC): | 
					
						
						|  | component_name = "YahooFinance" | 
					
						
						|  |  | 
					
						
						|  | def _run(self, history, **kwargs): | 
					
						
						|  | ans = self.get_input() | 
					
						
						|  | ans = "".join(ans["content"]) if "content" in ans else "" | 
					
						
						|  | if not ans: | 
					
						
						|  | return YahooFinance.be_output("") | 
					
						
						|  |  | 
					
						
						|  | yohoo_res = [] | 
					
						
						|  | try: | 
					
						
						|  | msft = yf.Ticker(ans) | 
					
						
						|  | if self._param.info: | 
					
						
						|  | yohoo_res.append({"content": "info:\n" + pd.Series(msft.info).to_markdown() + "\n"}) | 
					
						
						|  | if self._param.history: | 
					
						
						|  | yohoo_res.append({"content": "history:\n" + msft.history().to_markdown() + "\n"}) | 
					
						
						|  | if self._param.financials: | 
					
						
						|  | yohoo_res.append({"content": "calendar:\n" + pd.DataFrame(msft.calendar).to_markdown() + "\n"}) | 
					
						
						|  | if self._param.balance_sheet: | 
					
						
						|  | yohoo_res.append({"content": "balance sheet:\n" + msft.balance_sheet.to_markdown() + "\n"}) | 
					
						
						|  | yohoo_res.append( | 
					
						
						|  | {"content": "quarterly balance sheet:\n" + msft.quarterly_balance_sheet.to_markdown() + "\n"}) | 
					
						
						|  | if self._param.cash_flow_statement: | 
					
						
						|  | yohoo_res.append({"content": "cash flow statement:\n" + msft.cashflow.to_markdown() + "\n"}) | 
					
						
						|  | yohoo_res.append( | 
					
						
						|  | {"content": "quarterly cash flow statement:\n" + msft.quarterly_cashflow.to_markdown() + "\n"}) | 
					
						
						|  | if self._param.news: | 
					
						
						|  | yohoo_res.append({"content": "news:\n" + pd.DataFrame(msft.news).to_markdown() + "\n"}) | 
					
						
						|  | except Exception: | 
					
						
						|  | logger.exception("YahooFinance got exception") | 
					
						
						|  |  | 
					
						
						|  | if not yohoo_res: | 
					
						
						|  | return YahooFinance.be_output("") | 
					
						
						|  |  | 
					
						
						|  | return pd.DataFrame(yohoo_res) | 
					
						
						|  |  |