from .data import DepoSingle, DepoGroup import dataclasses import datetime import fin_defs import logging from collections.abc import Iterator, Mapping from decimal import Decimal import kucoin.client from frozendict import frozendict from personal_data.data import DeduplicateMode, Scraper logger = logging.getLogger(__name__) class KucoinDepoFetcher: def __init__(self, kucoin_key: str, kucoin_secret: str, kucoin_pass: str): self.client = kucoin.client.Client( kucoin_key, kucoin_secret, kucoin_pass, ) def get_depo(self) -> DepoGroup: now = datetime.datetime.now(tz=datetime.UTC) assets_by_account_type: dict[str, dict[fin_defs.Asset, Decimal]] = {} for account_data in self.client.get_accounts(): asset = fin_defs.WELL_KNOWN_SYMBOLS[account_data['currency']] balance = Decimal( account_data['balance']) assets_for_account_type = assets_by_account_type.get(account_data['type'], {}) assets_for_account_type[asset] = assets_for_account_type.get(asset, Decimal(0)) +balance del account_data, asset, balance return DepoGroup("Kucoin", now, [ DepoSingle("Kucoin " + account_type, now, assets) for account_type, assets in assets_by_account_type.items() ])