def action_get_assets(action: TaxableAction) -> List[Asset]: """Gets the assets involved in the action May raise: - UnknownAsset, UnsupportedAsset due to the trade pair's assets - UnprocessableTradePair: If a trade's pair can't be processed """ if isinstance(action, (Trade, AMMTrade)): return list(trade_get_assets(action)) if isinstance(action, (AssetMovement, LedgerAction)): return [action.asset] if isinstance(action, DefiEvent): assets = set() if action.got_asset is not None: assets.add(action.got_asset) if action.spent_asset is not None: assets.add(action.spent_asset) if action.pnl is not None: for entry in action.pnl: assets.add(entry.asset) return list(assets) if isinstance(action, EthereumTransaction): return [A_ETH] if isinstance(action, MarginPosition): return [action.pl_currency] if isinstance(action, Loan): return [action.currency] # else raise AssertionError( f'TaxableAction of unknown type {type(action)} encountered')
def action_get_assets( action: TaxableAction, ) -> Tuple[Asset, Optional[Asset]]: if isinstance(action, Trade): return trade_get_assets(action) elif isinstance(action, (AssetMovement, DefiEvent)): return action.asset, None elif isinstance(action, EthereumTransaction): return A_ETH, None elif isinstance(action, MarginPosition): return action.pl_currency, None elif isinstance(action, Loan): return action.currency, None raise AssertionError(f'TaxableAction of unknown type {type(action)} encountered')
def test_trade_get_assets(): trade = Trade( timestamp=1546985746, location=Location.BITTREX, pair=TradePair('BTC_ETH'), trade_type=TradeType.BUY, amount=FVal(10), rate=FVal(0.05), fee=FVal(0.001), fee_currency=A_ETH, link='', notes='', ) a1, a2 = trade_get_assets(trade) assert isinstance(a1, Asset) assert a1 == A_BTC assert isinstance(a2, Asset) assert a2 == A_ETH