File size: 3,796 Bytes
3f6ff4d
 
 
 
 
d8f5cc7
3f6ff4d
 
 
23be269
6615a62
 
d8f5cc7
3f6ff4d
 
 
 
 
 
d8f5cc7
2f1d239
 
3f6ff4d
7ce3177
3f6ff4d
d8f5cc7
3f6ff4d
 
 
 
 
 
 
 
 
 
 
d8f5cc7
3f6ff4d
 
 
 
 
 
 
 
 
 
 
 
 
 
d8f5cc7
3f6ff4d
 
 
 
 
 
 
 
 
 
 
 
d8f5cc7
3f6ff4d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d8f5cc7
3f6ff4d
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# ============================
# info.py — Company Info Page
# EXACT SAME LOOK AS BEFORE
# ============================

import yfinance as yf
import pandas as pd
import traceback

from yf import yfinfo

from common import (format_number,format_large_number,make_table,html_card,html_section,html_error,clean_df,safe_get)


def fetch_info(symbol: str):
    """
    Fetch full company info and return the SAME layout you used earlier.
    Only internal code updated to use common.py helpers.
    """
    try:
        
        info = yfinfo(symbol)

        if not info:
            return html_error(f"No information found for {symbol}")

        # ===== BASIC DETAILS =====
        basic = {
            "Symbol": symbol,
            "Name": safe_get(info, "longName"),
            "Sector": safe_get(info, "sector"),
            "Industry": safe_get(info, "industry"),
            "Website": safe_get(info, "website"),
            "Employee Count": format_large_number(safe_get(info, "fullTimeEmployees")),
        }
        df_basic = pd.DataFrame(basic.items(), columns=["Field", "Value"])
        basic_html = make_table(df_basic)

        # ===== PRICE DETAILS =====
        price_info = {
            "Current Price": format_number(safe_get(info, "currentPrice")),
            "Previous Close": format_number(safe_get(info, "previousClose")),
            "Open": format_number(safe_get(info, "open")),
            "Day High": format_number(safe_get(info, "dayHigh")),
            "Day Low": format_number(safe_get(info, "dayLow")),
            "52W High": format_number(safe_get(info, "fiftyTwoWeekHigh")),
            "52W Low": format_number(safe_get(info, "fiftyTwoWeekLow")),
            "Volume": format_large_number(safe_get(info, "volume")),
            "Avg Volume": format_large_number(safe_get(info, "averageVolume")),
        }
        df_price = pd.DataFrame(price_info.items(), columns=["Field", "Value"])
        price_html = make_table(df_price)

        # ===== VALUATION METRICS =====
        valuation = {
            "Market Cap": format_large_number(safe_get(info, "marketCap")),
            "PE Ratio": format_number(safe_get(info, "trailingPE")),
            "EPS": format_number(safe_get(info, "trailingEps")),
            "PB Ratio": format_number(safe_get(info, "priceToBook")),
            "Dividend Yield": format_number(safe_get(info, "dividendYield")),
            "ROE": format_number(safe_get(info, "returnOnEquity")),
            "ROA": format_number(safe_get(info, "returnOnAssets")),
        }
        df_val = pd.DataFrame(valuation.items(), columns=["Field", "Value"])
        val_html = make_table(df_val)

        # ===== COMPANY EXTRA DETAILS =====
        extra = {
            "Beta": format_number(safe_get(info, "beta")),
            "Revenue": format_large_number(safe_get(info, "totalRevenue")),
            "Gross Margins": format_number(safe_get(info, "grossMargins")),
            "Operating Margins": format_number(safe_get(info, "operatingMargins")),
            "Profit Margins": format_number(safe_get(info, "profitMargins")),
            "Book Value": format_number(safe_get(info, "bookValue")),
        }
        df_extra = pd.DataFrame(extra.items(), columns=["Field", "Value"])
        extra_html = make_table(df_extra)

        # ========================
        # Final HTML (Same Layout)
        # ========================
        final_html = (
            html_card("Basic Information", basic_html)
            + html_card("Price Details", price_html)
            + html_card("Valuation Metrics", val_html)
            + html_card("Additional Company Data", extra_html)
        )

        return final_html

    except Exception as e:
        return html_error(f"INFO MODULE ERROR: {e}<br><pre>{traceback.format_exc()}</pre>")