eshan6704 commited on
Commit
fd65e12
·
verified ·
1 Parent(s): 8bb2b58

Create router.py

Browse files
Files changed (1) hide show
  1. app/router.py +157 -0
app/router.py ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # -------------------------------------------------------
3
+ # Local modules
4
+ # -------------------------------------------------------
5
+ from . import common
6
+ from . import stock
7
+ from . import indices_html as indices
8
+ from . import index_live_html as live
9
+ from . import preopen_html as pre
10
+ from . import eq_html as eq
11
+ from . import bhavcopy_html as bhav
12
+ from . import build_nse_fno as fno
13
+ from . import nsepythonmodified as ns
14
+ from . import yahooinfo
15
+ from . import screener # screener owns its map
16
+
17
+
18
+ # -------------------------------------------------------
19
+ # REQ TYPE MAP (stock & index only)
20
+ # -------------------------------------------------------
21
+ REQ_TYPE_MAP = {
22
+ "stock": [
23
+ "info", "intraday", "daily", "nse_eq", "qresult",
24
+ "result", "balance", "cashflow", "dividend",
25
+ "split", "other", "stock_hist"
26
+ ],
27
+ "index": [
28
+ "indices", "open", "preopen", "fno",
29
+ "fiidii", "events",
30
+ "index_highlow", "stock_highlow", "bhav",
31
+ "largedeals", "bulkdeals", "blockdeals",
32
+ "most_active", "index_history",
33
+ "Hlargedeals", "pe_pb",
34
+ "total_returns"
35
+ ],
36
+ }
37
+
38
+
39
+ # -------------------------------------------------------
40
+ # STOCK handler
41
+ # -------------------------------------------------------
42
+ def handle_stock(req: FetchRequest):
43
+ t = req.req_type.lower()
44
+
45
+ if t == "info":
46
+ return yahooinfo.fetch_info(req.name)
47
+ if t == "intraday":
48
+ return stock.fetch_intraday(req.name)
49
+ if t == "daily":
50
+ return stock.fetch_daily(req.name, req.date_end)
51
+ if t == "nse_eq":
52
+ return eq.build_eq_html(req.name)
53
+ if t == "qresult":
54
+ return stock.fetch_qresult(req.name)
55
+ if t == "result":
56
+ return stock.fetch_result(req.name)
57
+ if t == "balance":
58
+ return stock.fetch_balance(req.name)
59
+ if t == "cashflow":
60
+ return stock.fetch_cashflow(req.name)
61
+ if t == "dividend":
62
+ return stock.fetch_dividend(req.name)
63
+ if t == "split":
64
+ return stock.fetch_split(req.name)
65
+ if t == "other":
66
+ return stock.fetch_other(req.name)
67
+ if t == "stock_hist":
68
+ return ns.nse_stock_hist(
69
+ req.date_start, req.date_end, req.name
70
+ ).to_html()
71
+
72
+ return common.wrap(f"<h3>Unhandled stock req_type: {t}</h3>")
73
+
74
+
75
+ # -------------------------------------------------------
76
+ # INDEX handler
77
+ # -------------------------------------------------------
78
+ def handle_index(req: FetchRequest):
79
+ t = req.req_type.lower()
80
+
81
+ if t == "indices":
82
+ return indices.build_indices_html()
83
+ if t == "open":
84
+ return live.build_index_live_html()
85
+ if t == "preopen":
86
+ return pre.build_preopen_html()
87
+ if t == "fno":
88
+ return fno.nse_fno_html(req.date_end, req.name)
89
+ if t == "fiidii":
90
+ return ns.nse_fiidii()
91
+ if t == "events":
92
+ return ns.nse_events()
93
+
94
+ if t == "index_highlow":
95
+ return ns.nse_highlow(req.date_end)
96
+ if t == "stock_highlow":
97
+ return ns.stock_highlow(req.date_end)
98
+ if t == "bhav":
99
+ return bhav.build_bhavcopy_html(req.date_end)
100
+ if t == "largedeals":
101
+ return ns.nse_largedeals()
102
+ if t == "bulkdeals":
103
+ return ns.nse_bulkdeals()
104
+ if t == "blockdeals":
105
+ return ns.nse_blockdeals()
106
+ if t == "most_active":
107
+ return ns.nse_most_active()
108
+ if t == "index_history":
109
+ return ns.index_history("NIFTY", req.date_start, req.date_end)
110
+ if t == "Hlargedeals":
111
+ return ns.nse_largedeals_historical(
112
+ req.date_start, req.date_end
113
+ )
114
+ if t == "pe_pb":
115
+ return ns.index_pe_pb_div(
116
+ "NIFTY", req.date_start, req.date_end
117
+ )
118
+ if t == "total_returns":
119
+ return ns.index_total_returns(
120
+ "NIFTY", req.date_start, req.date_end
121
+ )
122
+
123
+ return common.wrap(f"<h3>Unhandled index req_type: {t}</h3>")
124
+
125
+
126
+ # -------------------------------------------------------
127
+ # SCREENER handler
128
+ # -------------------------------------------------------
129
+ def handle_screener(req: FetchRequest):
130
+ return screener.fetch_screener(req.req_type.lower())
131
+
132
+
133
+
134
+ # -------------------------------------------------------
135
+ # HTML builder for req_type discovery
136
+ # -------------------------------------------------------
137
+ def build_req_type_list_html():
138
+ html = ["<div id='req_type_list'>"]
139
+
140
+ # STOCK & INDEX
141
+ for mode, items in REQ_TYPE_MAP.items():
142
+ html.append(f"<h3>{mode.upper()}</h3><ul>")
143
+ for it in items:
144
+ html.append(
145
+ f"<li class='{mode}-req' data-mode='{mode}'>{it}</li>"
146
+ )
147
+ html.append("</ul>")
148
+
149
+ # SCREENER (keys extracted from screener.py)
150
+ html.append("<h3>SCREENER</h3><ul>")
151
+ for key in screener.SCREENER_MAP.keys():
152
+ html.append(
153
+ f"<li class='screener-req' data-mode='screener'>{key}</li>"
154
+ )
155
+ html.append("</ul></div>")
156
+
157
+ return "".join(html)