Source code for pragma_sdk.common.fetchers.handlers.index_aggregator_handler

from typing import List

from pragma_sdk.common.types.entry import SpotEntry
from pragma_sdk.common.types.pair import Pair

from pragma_sdk.common.logging import get_pragma_sdk_logger

logger = get_pragma_sdk_logger()


[docs] class AssetQuantities:
[docs] def __init__(self, pair: Pair, quantities: float): self.pair = pair self.quantities = quantities
[docs] class IndexAggregatorHandler: spot_entries: List[SpotEntry] pair_quantities: List[AssetQuantities]
[docs] def __init__( self, spot_entries: List[SpotEntry], pair_quantities: List[AssetQuantities] ): self.spot_entries = spot_entries self.pair_quantities = pair_quantities
[docs] def get_index_value(self): self.standardize_decimals() total = sum( entry.price * quantities.quantities for entry, quantities in zip(self.spot_entries, self.pair_quantities) ) return total
[docs] def standardize_decimals(self): decimals = self.pair_quantities[0].pair.decimals() for i, pair_quantity in enumerate(self.pair_quantities): pair = pair_quantity.pair exponent = abs(pair.decimals() - decimals) if pair.decimals() > decimals: for j in range(0, i): self.spot_entries[j].price *= 10**exponent self.spot_entries[j].volume *= 10**exponent elif pair.decimals() < decimals: self.spot_entries[i].price *= 10**exponent self.spot_entries[i].volume *= 10**exponent else: continue decimals = pair.decimals()