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 {} available = payload.get("available") if isinstance(payload.get("available"), dict) else {}
equity = payload.get("equity") if isinstance(payload.get("equity"), 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_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( cash = _first_number(
payload.get("clear_cash"),
payload.get("cash"), payload.get("cash"),
payload.get("available_cash"), payload.get("available_cash"),
payload.get("available_balance"), payload.get("available_balance"),
payload.get("available_margin"),
available.get("cash"), available.get("cash"),
available.get("available_cash"), available.get("available_cash"),
available.get("available_margin"),
available.get("balance"), available.get("balance"),
equity.get("cash"), equity.get("cash"),
equity.get("available_margin"),
equity_available.get("cash"), equity_available.get("cash"),
equity_available.get("live_balance"), equity_available.get("live_balance"),
equity_margin.get("cnc_balance_available"),
equity_margin.get("mis_balance_available"),
) )
net = _first_number( net = _first_number(
payload.get("net"), payload.get("net"),
payload.get("total"), payload.get("total"),
payload.get("margin_available"), payload.get("margin_available"),
payload.get("available_margin"),
payload.get("clear_cash"),
payload.get("utilised_margin"),
equity.get("net"), equity.get("net"),
cash, cash,
) )
@ -239,20 +253,32 @@ def _normalize_groww_funds(data: dict | None) -> dict:
payload.get("withdrawable"), payload.get("withdrawable"),
payload.get("available_to_withdraw"), payload.get("available_to_withdraw"),
available.get("withdrawable"), available.get("withdrawable"),
equity_margin.get("cnc_balance_available"),
payload.get("clear_cash"),
cash, cash,
) )
balance = _first_number( balance = _first_number(
payload.get("balance"), payload.get("balance"),
payload.get("available_balance"), payload.get("available_balance"),
available.get("balance"), available.get("balance"),
payload.get("clear_cash"),
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 { return {
"net": net, "net": net,
"cash": cash, "cash": cash,
"withdrawable": withdrawable, "withdrawable": withdrawable,
"balance": balance, "balance": balance,
"utilized": utilized,
"available": { "available": {
"live_balance": cash, "live_balance": cash,
"cash": cash, "cash": cash,

View File

@ -98,7 +98,12 @@ def _first_data(payload: dict | None):
if not isinstance(payload, dict): if not isinstance(payload, dict):
return payload return payload
data = payload.get("data") 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: 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 {} available = payload.get("available") if isinstance(payload.get("available"), dict) else {}
equity = payload.get("equity") if isinstance(payload.get("equity"), 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_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( cash = _first_numeric(
payload.get("clear_cash"),
payload.get("cash"), payload.get("cash"),
payload.get("available_cash"), payload.get("available_cash"),
payload.get("available_balance"), payload.get("available_balance"),
payload.get("available_margin"),
available.get("cash"), available.get("cash"),
available.get("available_cash"), available.get("available_cash"),
available.get("available_margin"),
available.get("balance"), available.get("balance"),
equity.get("cash"), equity.get("cash"),
equity.get("available_margin"),
equity_available.get("cash"), equity_available.get("cash"),
equity_available.get("live_balance"), equity_available.get("live_balance"),
equity_margin.get("cnc_balance_available"),
equity_margin.get("mis_balance_available"),
) )
net = _first_numeric( net = _first_numeric(
payload.get("net"), payload.get("net"),
payload.get("total"), payload.get("total"),
payload.get("margin_available"), payload.get("margin_available"),
payload.get("available_margin"),
payload.get("clear_cash"),
equity.get("net"), equity.get("net"),
cash, cash,
) )
@ -109,12 +122,15 @@ def _normalize_groww_funds(data: dict | None) -> dict:
payload.get("withdrawable"), payload.get("withdrawable"),
payload.get("available_to_withdraw"), payload.get("available_to_withdraw"),
available.get("withdrawable"), available.get("withdrawable"),
equity_margin.get("cnc_balance_available"),
payload.get("clear_cash"),
cash, cash,
) )
balance = _first_numeric( balance = _first_numeric(
payload.get("balance"), payload.get("balance"),
payload.get("available_balance"), payload.get("available_balance"),
available.get("balance"), available.get("balance"),
payload.get("clear_cash"),
cash, cash,
) )