Jitendra12421 commited on
Commit
79f9130
·
verified ·
1 Parent(s): 01448db

Upload 42 files

Browse files
__pycache__/app.cpython-311.pyc CHANGED
Binary files a/__pycache__/app.cpython-311.pyc and b/__pycache__/app.cpython-311.pyc differ
 
__pycache__/kotak_neo.cpython-311.pyc CHANGED
Binary files a/__pycache__/kotak_neo.cpython-311.pyc and b/__pycache__/kotak_neo.cpython-311.pyc differ
 
app.py CHANGED
@@ -211,12 +211,24 @@ def current_market_state(now: datetime | None = None) -> dict:
211
  }
212
 
213
 
214
- def attach_market_state(payload: dict) -> dict:
215
- state = current_market_state()
216
- payload.setdefault("data_status", {})
217
- payload["data_status"].update(state)
218
-
219
- t5_latest = payload.get("latest") or {}
 
 
 
 
 
 
 
 
 
 
 
 
220
  tomorrow_latest = payload.get("tomorrow_latest") or {}
221
  tplus1_latest = payload.get("tplus1_latest") or {}
222
  t5_available = bool(state["t5_available"] and t5_latest.get("prediction"))
 
211
  }
212
 
213
 
214
+ def attach_market_state(payload: dict) -> dict:
215
+ state = current_market_state()
216
+ payload.setdefault("data_status", {})
217
+ payload["data_status"].update(state)
218
+ try:
219
+ payload["nifty_quote"] = kotak_neo_manager.fetch_nifty50_quote()
220
+ payload["nifty_quote_error"] = None
221
+ except KotakNeoSessionRequired as exc:
222
+ payload["nifty_quote"] = None
223
+ payload["nifty_quote_error"] = {"status": 401, "message": str(exc)}
224
+ except KotakNeoConfigError as exc:
225
+ payload["nifty_quote"] = None
226
+ payload["nifty_quote_error"] = {"status": 503, "message": str(exc)}
227
+ except KotakNeoError as exc:
228
+ payload["nifty_quote"] = None
229
+ payload["nifty_quote_error"] = {"status": 502, "message": str(exc)}
230
+
231
+ t5_latest = payload.get("latest") or {}
232
  tomorrow_latest = payload.get("tomorrow_latest") or {}
233
  tplus1_latest = payload.get("tplus1_latest") or {}
234
  t5_available = bool(state["t5_available"] and t5_latest.get("prediction"))
kotak_neo.py CHANGED
@@ -29,6 +29,8 @@ TOTP_LOGIN_PATH = "login/1.0/tradeApiLogin"
29
  TOTP_VALIDATE_PATH = "login/1.0/tradeApiValidate"
30
  DEFAULT_TIMEOUT_SECONDS = 20
31
  ACCOUNT_TIMEOUT_SECONDS = 7
 
 
32
  DATA_DIR = Path(__file__).resolve().parent / "data"
33
  KOTAK_ACTIVITY_LOG_PATH = DATA_DIR / "kotak_activity_log.txt"
34
  NIFTY_1M_PATH = DATA_DIR / "nifty50_1m.parquet"
@@ -472,7 +474,7 @@ class KotakNeoManager:
472
  with self._lock:
473
  if not force_refresh:
474
  cached = self._quote_cache.get(cache_key)
475
- if cached and (monotonic() - float(cached.get("stored_at_monotonic") or 0.0)) < 0.25:
476
  return dict(cached["payload"])
477
  context = self._context_locked()
478
 
@@ -485,7 +487,7 @@ class KotakNeoManager:
485
  "instrument_token": str(reference["quote_instrument_token"]),
486
  }
487
  ],
488
- timeout=ACCOUNT_TIMEOUT_SECONDS,
489
  )
490
  items = _extract_items(quote_payload)
491
  if not items:
 
29
  TOTP_VALIDATE_PATH = "login/1.0/tradeApiValidate"
30
  DEFAULT_TIMEOUT_SECONDS = 20
31
  ACCOUNT_TIMEOUT_SECONDS = 7
32
+ NIFTY_QUOTE_TIMEOUT_SECONDS = 2.5
33
+ NIFTY_QUOTE_CACHE_SECONDS = 1.0
34
  DATA_DIR = Path(__file__).resolve().parent / "data"
35
  KOTAK_ACTIVITY_LOG_PATH = DATA_DIR / "kotak_activity_log.txt"
36
  NIFTY_1M_PATH = DATA_DIR / "nifty50_1m.parquet"
 
474
  with self._lock:
475
  if not force_refresh:
476
  cached = self._quote_cache.get(cache_key)
477
+ if cached and (monotonic() - float(cached.get("stored_at_monotonic") or 0.0)) < NIFTY_QUOTE_CACHE_SECONDS:
478
  return dict(cached["payload"])
479
  context = self._context_locked()
480
 
 
487
  "instrument_token": str(reference["quote_instrument_token"]),
488
  }
489
  ],
490
+ timeout=NIFTY_QUOTE_TIMEOUT_SECONDS,
491
  )
492
  items = _extract_items(quote_payload)
493
  if not items: