eshan6704 commited on
Commit
58b5a46
·
verified ·
1 Parent(s): 650b122

Create router.py

Browse files
Files changed (1) hide show
  1. app/router.py +44 -39
app/router.py CHANGED
@@ -1,8 +1,7 @@
1
- from fastapi import FastAPI, HTTPException
2
  from fastapi.responses import HTMLResponse
3
- from fastapi.middleware.cors import CORSMiddleware
4
- from fastapi.middleware.gzip import GZipMiddleware
5
  from pydantic import BaseModel
 
6
  # -------------------------------------------------------
7
  # Local modules
8
  # -------------------------------------------------------
@@ -18,6 +17,7 @@ from . import nsepythonmodified as ns
18
  from . import yahooinfo
19
  from . import screener # screener owns its map
20
 
 
21
 
22
  # -------------------------------------------------------
23
  # REQ TYPE MAP (stock & index only)
@@ -39,17 +39,28 @@ REQ_TYPE_MAP = {
39
  ],
40
  }
41
 
42
- # ===============================
43
- # Screener name URL mapping
44
- # ===============================
45
- SCREENER_MAP = {
46
- "from_high": "https://www.screener.in/screens/3355081/from-high/",
47
- "sales_wise": "https://www.screener.in/screens/880780/sales_wise/",
48
- "fii_buying": "https://www.screener.in/screens/343087/fii-buying/",
49
- "debt_reduction": "https://www.screener.in/screens/126864/debt-reduction/",
50
- "magic_formula": "https://www.screener.in/screens/59/magic-formula/",
51
 
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  # -------------------------------------------------------
55
  # Request model
@@ -61,8 +72,6 @@ class FetchRequest(BaseModel):
61
  date_start: str = ""
62
  date_end: str = ""
63
 
64
-
65
-
66
  # -------------------------------------------------------
67
  # STOCK handler
68
  # -------------------------------------------------------
@@ -98,7 +107,6 @@ def handle_stock(req: FetchRequest):
98
 
99
  return common.wrap(f"<h3>Unhandled stock req_type: {t}</h3>")
100
 
101
-
102
  # -------------------------------------------------------
103
  # INDEX handler
104
  # -------------------------------------------------------
@@ -117,7 +125,6 @@ def handle_index(req: FetchRequest):
117
  return ns.nse_fiidii()
118
  if t == "events":
119
  return ns.nse_events()
120
-
121
  if t == "index_highlow":
122
  return ns.nse_highlow(req.date_end)
123
  if t == "stock_highlow":
@@ -149,36 +156,34 @@ def handle_index(req: FetchRequest):
149
 
150
  return common.wrap(f"<h3>Unhandled index req_type: {t}</h3>")
151
 
152
-
153
  # -------------------------------------------------------
154
  # SCREENER handler
155
  # -------------------------------------------------------
156
  def handle_screener(req: FetchRequest):
157
  return screener.fetch_screener(req.req_type.lower())
158
 
159
-
160
-
161
  # -------------------------------------------------------
162
- # HTML builder for req_type discovery
163
  # -------------------------------------------------------
164
- def build_req_type_list_html():
165
- html = ["<div id='req_type_list'>"]
 
166
 
167
- # STOCK & INDEX
168
- for mode, items in REQ_TYPE_MAP.items():
169
- html.append(f"<h3>{mode.upper()}</h3><ul>")
170
- for it in items:
171
- html.append(
172
- f"<li class='{mode}-req' data-mode='{mode}'>{it}</li>"
173
- )
174
- html.append("</ul>")
175
 
176
- # SCREENER (keys extracted from screener.py)
177
- html.append("<h3>SCREENER</h3><ul>")
178
- for key in SCREENER_MAP.keys():
179
- html.append(
180
- f"<li class='screener-req' data-mode='screener'>{key}</li>"
181
- )
182
- html.append("</ul></div>")
183
 
184
- return "".join(html)
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import APIRouter, HTTPException
2
  from fastapi.responses import HTMLResponse
 
 
3
  from pydantic import BaseModel
4
+
5
  # -------------------------------------------------------
6
  # Local modules
7
  # -------------------------------------------------------
 
17
  from . import yahooinfo
18
  from . import screener # screener owns its map
19
 
20
+ router = APIRouter()
21
 
22
  # -------------------------------------------------------
23
  # REQ TYPE MAP (stock & index only)
 
39
  ],
40
  }
41
 
42
+ # -------------------------------------------------------
43
+ # HTML builder for req_type discovery
44
+ # -------------------------------------------------------
45
+ def build_req_type_list_html():
46
+ html = ["<div id='req_type_list'>"]
 
 
 
 
47
 
48
+ for mode, items in REQ_TYPE_MAP.items():
49
+ html.append(f"<h3>{mode.upper()}</h3><ul>")
50
+ for it in items:
51
+ html.append(
52
+ f"<li class='{mode}-req' data-mode='{mode}'>{it}</li>"
53
+ )
54
+ html.append("</ul>")
55
+
56
+ html.append("<h3>SCREENER</h3><ul>")
57
+ for key in screener.SCREENER_MAP.keys():
58
+ html.append(
59
+ f"<li class='screener-req' data-mode='screener'>{key}</li>"
60
+ )
61
+ html.append("</ul></div>")
62
+
63
+ return "".join(html)
64
 
65
  # -------------------------------------------------------
66
  # Request model
 
72
  date_start: str = ""
73
  date_end: str = ""
74
 
 
 
75
  # -------------------------------------------------------
76
  # STOCK handler
77
  # -------------------------------------------------------
 
107
 
108
  return common.wrap(f"<h3>Unhandled stock req_type: {t}</h3>")
109
 
 
110
  # -------------------------------------------------------
111
  # INDEX handler
112
  # -------------------------------------------------------
 
125
  return ns.nse_fiidii()
126
  if t == "events":
127
  return ns.nse_events()
 
128
  if t == "index_highlow":
129
  return ns.nse_highlow(req.date_end)
130
  if t == "stock_highlow":
 
156
 
157
  return common.wrap(f"<h3>Unhandled index req_type: {t}</h3>")
158
 
 
159
  # -------------------------------------------------------
160
  # SCREENER handler
161
  # -------------------------------------------------------
162
  def handle_screener(req: FetchRequest):
163
  return screener.fetch_screener(req.req_type.lower())
164
 
 
 
165
  # -------------------------------------------------------
166
+ # Routes
167
  # -------------------------------------------------------
168
+ @router.get("/")
169
+ def health():
170
+ return {"status": "ok", "service": "backend alive"}
171
 
172
+ @router.post("/api/fetch", response_class=HTMLResponse)
173
+ def fetch_data(req: FetchRequest):
 
 
 
 
 
 
174
 
175
+ mode = req.mode.lower()
 
 
 
 
 
 
176
 
177
+ if mode == "list":
178
+ return HTMLResponse(content=build_req_type_list_html())
179
+
180
+ if mode == "stock":
181
+ html = handle_stock(req)
182
+ elif mode == "index":
183
+ html = handle_index(req)
184
+ elif mode == "screener":
185
+ html = handle_screener(req)
186
+ else:
187
+ raise HTTPException(status_code=400, detail="Invalid mode")
188
+
189
+ return HTMLResponse(content=str(html))