Upload 42 files
Browse files- __pycache__/app.cpython-311.pyc +0 -0
- __pycache__/kotak_neo.cpython-311.pyc +0 -0
- app.py +18 -6
- kotak_neo.py +4 -2
__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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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)) <
|
| 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=
|
| 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:
|