diff --git a/blockapi/test/v2/api/debank/data/bio_pools.json b/blockapi/test/v2/api/debank/data/bio_pools.json new file mode 100644 index 00000000..71a58375 --- /dev/null +++ b/blockapi/test/v2/api/debank/data/bio_pools.json @@ -0,0 +1,356 @@ +{ + "chain":"eth", + "has_supported_portfolio":true, + "id":"bio", + "logo_url":"https://static.debank.com/image/project/logo_url/bio/138f7e72ba601d514c6543d9108e4604.png", + "name":"BIO", + "portfolio_item_list":[ + { + "asset_dict":{ + "0xcb1592591996765ec0efc1f92599a19767ee5ffa":893969.7604210452 + }, + "asset_token_list":[ + { + "amount":893969.7604210452, + "chain":"eth", + "claimable_amount":4432.939797313738, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + ], + "detail":{ + "end_at":1755594000.0, + "token":{ + "amount":893969.7604210452, + "chain":"eth", + "claimable_amount":4432.939797313738, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + }, + "detail_types":[ + "vesting" + ], + "name":"Vesting", + "pool":{ + "adapter_id":"bio_vesting", + "chain":"eth", + "controller":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "id":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "index":"None", + "project_id":"bio", + "time_at":1717682351 + }, + "position_index":"5", + "proxy_detail":{ + + }, + "stats":{ + "asset_usd_value":203111.7366137077, + "debt_usd_value":0, + "net_usd_value":203111.7366137077 + }, + "update_at":1738058980.0 + }, + { + "asset_dict":{ + "0xcb1592591996765ec0efc1f92599a19767ee5ffa":2289481.847994097 + }, + "asset_token_list":[ + { + "amount":2289481.847994097, + "chain":"eth", + "claimable_amount":11354.432984270807, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + ], + "detail":{ + "end_at":1755594000.0, + "token":{ + "amount":2289481.847994097, + "chain":"eth", + "claimable_amount":11354.432984270807, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + }, + "detail_types":[ + "vesting" + ], + "name":"Vesting", + "pool":{ + "adapter_id":"bio_vesting", + "chain":"eth", + "controller":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "id":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "index":"None", + "project_id":"bio", + "time_at":1717682351 + }, + "position_index":"1", + "proxy_detail":{ + + }, + "stats":{ + "asset_usd_value":520174.9037603069, + "debt_usd_value":0, + "net_usd_value":520174.9037603069 + }, + "update_at":1738058980.0 + }, + { + "asset_dict":{ + "0xcb1592591996765ec0efc1f92599a19767ee5ffa":46611.25210183086 + }, + "asset_token_list":[ + { + "amount":46611.25210183086, + "chain":"eth", + "claimable_amount":231.1318386737295, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + ], + "detail":{ + "end_at":1755594000.0, + "token":{ + "amount":46611.25210183086, + "chain":"eth", + "claimable_amount":231.1318386737295, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + }, + "detail_types":[ + "vesting" + ], + "name":"Vesting", + "pool":{ + "adapter_id":"bio_vesting", + "chain":"eth", + "controller":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "id":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "index":"None", + "project_id":"bio", + "time_at":1717682351 + }, + "position_index":"4", + "proxy_detail":{ + + }, + "stats":{ + "asset_usd_value":10590.170696247329, + "debt_usd_value":0, + "net_usd_value":10590.170696247329 + }, + "update_at":1738058980.0 + }, + { + "asset_dict":{ + "0xcb1592591996765ec0efc1f92599a19767ee5ffa":988622.9649515124 + }, + "asset_token_list":[ + { + "amount":988622.9649515124, + "chain":"eth", + "claimable_amount":4902.29790749049, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + ], + "detail":{ + "end_at":1755594000.0, + "token":{ + "amount":988622.9649515124, + "chain":"eth", + "claimable_amount":4902.29790749049, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + }, + "detail_types":[ + "vesting" + ], + "name":"Vesting", + "pool":{ + "adapter_id":"bio_vesting", + "chain":"eth", + "controller":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "id":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "index":"None", + "project_id":"bio", + "time_at":1717682351 + }, + "position_index":"3", + "proxy_detail":{ + + }, + "stats":{ + "asset_usd_value":224617.1360124311, + "debt_usd_value":0, + "net_usd_value":224617.1360124311 + }, + "update_at":1738058980.0 + }, + { + "asset_dict":{ + "0xcb1592591996765ec0efc1f92599a19767ee5ffa":137150.99062916404 + }, + "asset_token_list":[ + { + "amount":137150.99062916404, + "chain":"eth", + "claimable_amount":680.1852275830804, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + ], + "detail":{ + "end_at":1755594000.0, + "token":{ + "amount":137150.99062916404, + "chain":"eth", + "claimable_amount":680.1852275830804, + "decimals":18, + "display_symbol":"BIO (bio.xyz)", + "id":"0xcb1592591996765ec0efc1f92599a19767ee5ffa", + "is_core":true, + "is_verified":false, + "is_wallet":true, + "logo_url":"https://static.debank.com/image/eth_token/logo_url/0xcb1592591996765ec0efc1f92599a19767ee5ffa/33f811558c01651b11a7e8999d440d8c.png", + "name":"BIO", + "optimized_symbol":"BIO (bio.xyz)", + "price":0.22720202137267526, + "protocol_id":"bio", + "symbol":"BIO", + "time_at":1715961803.0 + } + }, + "detail_types":[ + "vesting" + ], + "name":"Vesting", + "pool":{ + "adapter_id":"bio_vesting", + "chain":"eth", + "controller":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "id":"0x0d2adb4af57cdac02d553e7601456739857d2ef4", + "index":"None", + "project_id":"bio", + "time_at":1717682351 + }, + "position_index":"2", + "proxy_detail":{ + + }, + "stats":{ + "asset_usd_value":31160.982304210913, + "debt_usd_value":0, + "net_usd_value":31160.982304210913 + }, + "update_at":1738058980.0 + } + ], + "site_url":"https://www.bio.xyz", + "tvl":280068522.49297273 +} \ No newline at end of file diff --git a/blockapi/test/v2/api/debank/test_debank_portfolio_parser.py b/blockapi/test/v2/api/debank/test_debank_portfolio_parser.py index 8794960f..54472066 100644 --- a/blockapi/test/v2/api/debank/test_debank_portfolio_parser.py +++ b/blockapi/test/v2/api/debank/test_debank_portfolio_parser.py @@ -4,6 +4,7 @@ import pytest +from blockapi.test.v2.api.conftest import read_json_file from blockapi.v2.api.debank import DebankModelPoolItemDetail, DebankModelPortfolioItem from blockapi.v2.models import AssetType, FetchResult @@ -149,3 +150,16 @@ def test_parse_no_error(debank_api): debank_api._protocol_cache.update({}) parsed = debank_api.parse_pools(FetchResult(data={})) assert not parsed.errors + + +@pytest.fixture +def bio_polls(): + return read_json_file("debank/data/bio_pools.json") + + +def test_parse_pools(debank_api, bio_polls): + debank_api._protocol_cache.update({}) + parsed = debank_api.parse_pools(FetchResult(data=[bio_polls])) + assert parsed + for data_item in parsed.data: + assert data_item.items diff --git a/blockapi/v2/api/debank.py b/blockapi/v2/api/debank.py index 87b40ffb..f4189637 100644 --- a/blockapi/v2/api/debank.py +++ b/blockapi/v2/api/debank.py @@ -78,6 +78,7 @@ class DebankModelPoolItem(BaseModel): class DebankModelPortfolioItem(BaseModel): name: str detail: DebankModelPoolItemDetail + asset_token_list: Optional[list[dict]] = None pool_id: Optional[str] = None pool: Optional[DebankModelPoolItem] = None position_index: Optional[str] = None @@ -502,6 +503,10 @@ def _parse_balances(self, detail, item, pool_info) -> Iterable[BalanceItem]: detail.token_list, asset_type, pool_info=pool_info ) + yield from self._parse_token_list( + item.asset_token_list, asset_type, pool_info=pool_info + ) + def _get_tokens(self, raw_balances: list[dict]): symbols = [ self._balance_parser.get_symbol(DebankModelBalanceItem(**b))