from pydantic import BaseModel a = { "positions": [ { "instrument": "EUR_USD", "long": { "units": "1", "averagePrice": "0.99361", "pl": "-0.1014", "resettablePL": "-0.1014", "financing": "0.0000", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "tradeIDs": ["71"], "unrealizedPL": "-0.0002", }, "short": { "units": "0", "pl": "0.0932", "resettablePL": "0.0932", "financing": "0.0000", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "unrealizedPL": "0.0000", }, "pl": "-0.0082", "resettablePL": "-0.0082", "financing": "0.0000", "commission": "0.0000", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "unrealizedPL": "-0.0002", "marginUsed": "0.0286", } ], "lastTransactionID": "71", } class PositionLong(BaseModel): units: str averagePrice: str pl: str resettablePL: str financing: str dividendAdjustment: str guaranteedExecutionFees: str tradeIDs: list[str] unrealizedPL: str class PositionShort(BaseModel): units: str pl: str resettablePL: str financing: str dividendAdjustment: str guaranteedExecutionFees: str unrealizedPL: str class Position(BaseModel): instrument: str long: PositionLong short: PositionShort pl: str resettablePL: str financing: str commission: str dividendAdjustment: str guaranteedExecutionFees: str unrealizedPL: str marginUsed: str class OpenPositions(BaseModel): positions: list[Position] lastTransactionID: str { "positions": [ { "instrument": "EUR_USD", "long": { "units": "1", "averagePrice": "0.99361", "pl": "-0.1014", "resettablePL": "-0.1014", "financing": "-0.0002", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "tradeIDs": ["71"], "unrealizedPL": "-0.0044", }, "short": { "units": "0", "pl": "0.0932", "resettablePL": "0.0932", "financing": "0.0000", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "unrealizedPL": "0.0000", }, "pl": "-0.0082", "resettablePL": "-0.0082", "financing": "-0.0002", "commission": "0.0000", "dividendAdjustment": "0.0000", "guaranteedExecutionFees": "0.0000", "unrealizedPL": "-0.0044", "marginUsed": "0.0287", } ], "lastTransactionID": "73", } def parse_prices(x): if int(x["long"]["units"]) > 0: return x["long"]["averagePrice"] elif int(x["short"]["units"]) > 0: return x["short"]["averagePrice"] else: return 0 OpenPositions_schema = { "itemlist": ( "positions", [ { "symbol": "instrument", "unrealized_pl": "unrealizedPL", "price": parse_prices, } ], ) }