コード例 #1
0
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')
コード例 #2
0
ファイル: accounting.py プロジェクト: tiemonl/rotki
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')
コード例 #3
0
ファイル: test_trades.py プロジェクト: zhiiker/rotki
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