Coverage for src/portfolio.py: 0%
40 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-03 19:06 +0000
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-03 19:06 +0000
1import logging
2from datetime import datetime
4import pandas as pd
5from hiveengine.rpc import RPCErrorDoRetry
7from src.api import spl, peakmonsters
8from src.configuration import store
9from src.utils import store_util, land_util, token_util, collection_util, progress_util
12def update_portfolio(account, portfolio_df, list_prices_df, market_prices_df):
13 do_update = False
14 if not portfolio_df.empty:
15 date = datetime.today().strftime('%Y-%m-%d')
16 if portfolio_df.loc[(portfolio_df.account_name == account) & (portfolio_df.date == date)].empty:
17 do_update = True
18 else:
19 logging.warning("Already pulled portfolio data for this day, no need to run this too often")
20 else:
21 do_update = True
23 if do_update:
24 df1 = collection_util.get_card_edition_value(account, list_prices_df, market_prices_df)
25 df2 = token_util.get_token_value(account)
26 total_df = df1.merge(df2)
27 df3 = land_util.get_deeds_value(account)
28 total_df = total_df.merge(df3)
29 df4 = land_util.get_staked_dec_value(account)
30 total_df = total_df.merge(df4)
31 df5 = land_util.get_resources_value(account)
32 total_df = total_df.merge(df5)
33 portfolio_df = pd.concat([portfolio_df, total_df], ignore_index=True)
34 return portfolio_df
37def update_portfolios():
38 progress_util.update_daily_msg("Start update portfolios")
39 list_prices_df = spl.get_all_cards_for_sale_df()
40 market_prices_df = peakmonsters.get_market_prices_df()
42 for account in store_util.get_account_names():
43 progress_util.update_daily_msg("...update portfolio for: " + str(account))
44 try:
45 store.portfolio = update_portfolio(account, store.portfolio.copy(), list_prices_df, market_prices_df)
46 except RPCErrorDoRetry:
47 progress_util.update_daily_msg("ERROR: Hive market down stop update portfolio", error=True)
48 raise RPCErrorDoRetry("Hive market down stop update portfolio")
50 store.portfolio.fillna(0, inplace=True)
51 store_util.save_stores()