Fix Groww funds parsing

This commit is contained in:
Thigazhezhilan J 2026-04-05 20:39:17 +05:30
parent 28ec6c9a4d
commit 760eb6ea1a
3 changed files with 48 additions and 1 deletions

View File

@ -216,22 +216,36 @@ def _normalize_groww_funds(data: dict | None) -> dict:
available = payload.get("available") if isinstance(payload.get("available"), dict) else {}
equity = payload.get("equity") if isinstance(payload.get("equity"), dict) else {}
equity_available = equity.get("available") if isinstance(equity.get("available"), dict) else {}
equity_margin = (
payload.get("equity_margin_details")
if isinstance(payload.get("equity_margin_details"), dict)
else {}
)
cash = _first_number(
payload.get("clear_cash"),
payload.get("cash"),
payload.get("available_cash"),
payload.get("available_balance"),
payload.get("available_margin"),
available.get("cash"),
available.get("available_cash"),
available.get("available_margin"),
available.get("balance"),
equity.get("cash"),
equity.get("available_margin"),
equity_available.get("cash"),
equity_available.get("live_balance"),
equity_margin.get("cnc_balance_available"),
equity_margin.get("mis_balance_available"),
)
net = _first_number(
payload.get("net"),
payload.get("total"),
payload.get("margin_available"),
payload.get("available_margin"),
payload.get("clear_cash"),
payload.get("utilised_margin"),
equity.get("net"),
cash,
)
@ -239,20 +253,32 @@ def _normalize_groww_funds(data: dict | None) -> dict:
payload.get("withdrawable"),
payload.get("available_to_withdraw"),
available.get("withdrawable"),
equity_margin.get("cnc_balance_available"),
payload.get("clear_cash"),
cash,
)
balance = _first_number(
payload.get("balance"),
payload.get("available_balance"),
available.get("balance"),
payload.get("clear_cash"),
cash,
)
utilized = _first_number(
payload.get("utilized"),
payload.get("utilised"),
payload.get("utilised_margin"),
payload.get("used_margin"),
equity_margin.get("utilised_margin"),
default=0.0,
)
return {
"net": net,
"cash": cash,
"withdrawable": withdrawable,
"balance": balance,
"utilized": utilized,
"available": {
"live_balance": cash,
"cash": cash,

View File

@ -98,7 +98,12 @@ def _first_data(payload: dict | None):
if not isinstance(payload, dict):
return payload
data = payload.get("data")
return data if data is not None else payload
if data is not None:
return data
envelope = payload.get("payload")
if envelope is not None:
return envelope
return payload
def _auth_headers(access_token: str) -> dict:

View File

@ -86,22 +86,35 @@ def _normalize_groww_funds(data: dict | None) -> dict:
available = payload.get("available") if isinstance(payload.get("available"), dict) else {}
equity = payload.get("equity") if isinstance(payload.get("equity"), dict) else {}
equity_available = equity.get("available") if isinstance(equity.get("available"), dict) else {}
equity_margin = (
payload.get("equity_margin_details")
if isinstance(payload.get("equity_margin_details"), dict)
else {}
)
cash = _first_numeric(
payload.get("clear_cash"),
payload.get("cash"),
payload.get("available_cash"),
payload.get("available_balance"),
payload.get("available_margin"),
available.get("cash"),
available.get("available_cash"),
available.get("available_margin"),
available.get("balance"),
equity.get("cash"),
equity.get("available_margin"),
equity_available.get("cash"),
equity_available.get("live_balance"),
equity_margin.get("cnc_balance_available"),
equity_margin.get("mis_balance_available"),
)
net = _first_numeric(
payload.get("net"),
payload.get("total"),
payload.get("margin_available"),
payload.get("available_margin"),
payload.get("clear_cash"),
equity.get("net"),
cash,
)
@ -109,12 +122,15 @@ def _normalize_groww_funds(data: dict | None) -> dict:
payload.get("withdrawable"),
payload.get("available_to_withdraw"),
available.get("withdrawable"),
equity_margin.get("cnc_balance_available"),
payload.get("clear_cash"),
cash,
)
balance = _first_numeric(
payload.get("balance"),
payload.get("available_balance"),
available.get("balance"),
payload.get("clear_cash"),
cash,
)