import gradio as gr import yfinance as yf import csv import pandas as pd import matplotlib.pyplot as plt from valuation import parallel_portfolio_valuation,serialCal def get_stock_price(stock_symbol): try: stock = yf.Ticker(stock_symbol) stock_data = stock.history(period="1d") latest_close = stock_data['Close'].iloc[-1] return float(latest_close) except Exception as e: return 0 def getCompoanyInfo(portfolio): #yfinance company_data = [] for stock in portfolio: try: stock_info = yf.Ticker(stock['symbol']).info # Collect key datasets company_details = { 'symbol': stock['symbol'], 'company_name': stock_info.get('longName', 'N/A'), 'sector': stock_info.get('sector', 'N/A'), 'industry': stock_info.get('industry', 'N/A'), 'market_cap': stock_info.get('marketCap', 'N/A'), 'dividend_yield': stock_info.get('dividendYield', 'N/A'), 'pe_ratio': stock_info.get('trailingPE', 'N/A'), '52_week_high': stock_info.get('fiftyTwoWeekHigh', 'N/A'), '52_week_low': stock_info.get('fiftyTwoWeekLow', 'N/A'), 'price': round(stock['price'],2), 'quantity': stock['quantity'], } company_data.append(company_details) except Exception as e: print(f"Error fetching data for {stock['symbol']}: {e}") continue return pd.DataFrame(company_data) def calculatePortfolioValue(file:str): portfolio = [] """ portfolio = [ {'symbol': 'AAPL', 'price': 160, 'quantity': 100}, {'symbol': 'GOOG', 'price': 2000, 'quantity': 50}, {'symbol': 'MSFT', 'price': 300, 'quantity': 200}, ] """ with open(file,"r") as fr: reader = csv.reader(fr) for i in list(reader)[1:]: #print({'symbol':i[0],'price':get_stock_price(i[0]),'quantity':i[1]}) portfolio.append({'symbol':i[0],'price':get_stock_price(i[0]),'quantity':float(i[1])}) return str(round(parallel_portfolio_valuation(portfolio),2)) + " $", getCompoanyInfo(portfolio) def startGradio(): with gr.Blocks() as demo: text1 = gr.Text(value ="Stock Portfolio Valuation using multiprocessing",interactive=False,show_label=False) with gr.Column(): file = gr.File() df = gr.Dataframe() parallelValue = gr.Textbox(label="Portfolio Valuation through the process of paralleization") bt = gr.Button() bt.click(fn=calculatePortfolioValue,inputs=[file],outputs=[parallelValue,df]) demo.load() demo.launch() if __name__ == "__main__": startGradio() #calculatePortfolioValue("/Users/sarathrajan/Desktop/HPCUI/stocks_qty.csv")