Source code for pypergraph.keyring.accounts.asset_library
fromabcimportABC,abstractmethodfromtypingimportDict,List,Optionalfrompypergraph.keyring.models.kcsimportKeyringAssetInfo# AssetMap is a dictionary mapping a token symbol to its KeyringAssetInfo.AssetMap=Dict[str,KeyringAssetInfo]
[docs]classAssetLibrary(ABC):def__init__(self):# This holds tokens that are imported at runtime.self.imported_assets={}@property@abstractmethoddefdefault_assets_map(self)->AssetMap:"""Returns the default asset map (i.e., a dict mapping symbols to asset info)."""pass@property@abstractmethoddefdefault_assets(self)->List[str]:"""Returns a list of default asset symbols."""pass
[docs]defserialize(self)->Dict[str,dict]:"""Serializes (or exports) the imported assets for saving state."""returnself.imported_assets
[docs]defdeserialize(self,assets:AssetMap)->None:"""Loads a previously saved asset map."""self.imported_assets=assets
[docs]defget_default_assets(self)->List[str]:"""Returns a copy of the default asset symbols."""returnself.default_assets[:]
[docs]defget_asset_by_symbol(self,symbol:str)->Optional[KeyringAssetInfo]:""" Looks up an asset by symbol. First checks the default assets, then any imported tokens. """returnself.default_assets_map.get(symbol)orself.imported_assets.get(symbol)
[docs]defimport_token(self,token:KeyringAssetInfo)->bool:""" Imports a new token. Returns True if the token was added (i.e. did not exist before), otherwise returns False. """iftoken.symbolnotinself.imported_assets:self.imported_assets[token.symbol]=token.__dict__returnTruereturnFalse