Coverage for src / market_info.py: 0%
56 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-01 10:28 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-01 10:28 +0000
1import json
2import logging
4import pandas as pd
6from src.api import spl
7from src.configuration import config
8from src.utils import collection_util, progress_util
11def filter_df_last_season(start_date, end_date, data_frame):
12 if not data_frame.empty:
13 # make sure created_date is of type time date
14 date_field = 'created_date'
15 data_frame[date_field] = pd.to_datetime(data_frame[date_field])
17 # create mask, filter all date between season start and season end date
18 mask = (data_frame[date_field] > start_date) & (data_frame[date_field] <= end_date)
19 return data_frame.loc[mask].copy()
20 return data_frame
23def get_sold_cards(account_name, cards_df):
24 sold_cards = []
25 if not cards_df.empty:
26 # first remove duplicate card ids
27 cards_df = cards_df.drop_duplicates()
29 ids = ','.join(cards_df['card'].values.tolist())
30 cards = spl.get_cards_by_ids(ids)
31 for card in cards:
32 if card['player'] != account_name:
33 sold_cards += [card]
34 return sold_cards
37def get_purchased_sold_cards(account_name, transactions):
38 # filter purchase transactions
39 sm_market_purchase = pd.DataFrame()
40 potential_sell = pd.DataFrame()
41 for transaction in transactions:
42 trx = transaction['trx_info']
43 operation = trx['type']
44 if operation == 'market_purchase':
45 df1 = pd.DataFrame({'spl_id': json.loads(trx['data'])['items']})
46 sm_market_purchase = pd.concat([sm_market_purchase, df1])
47 elif operation == 'sell_cards':
48 card_op = json.loads(trx['data'])
49 if isinstance(card_op, dict):
50 df1 = pd.DataFrame({'card': card_op['cards']})
51 potential_sell = pd.concat([potential_sell, df1])
52 else:
53 for card in card_op:
54 df1 = pd.DataFrame({'card': card['cards']})
55 potential_sell = pd.concat([potential_sell, df1])
57 # process purchases
58 purchases = pd.DataFrame()
59 if not sm_market_purchase.empty:
60 sm_market_purchase = sm_market_purchase.reset_index(drop=True)
61 count = sm_market_purchase.count().values[0]
62 logging.info("Number card to get: " + str(count))
63 for index, row in sm_market_purchase.iterrows():
64 progress_util.update_season_msg("Collecting bought and sold cards transaction: "
65 + str(index) + "/" + str(count))
66 # TODO look into a way to parallel process
67 result = spl.get_market_transaction(row.values[0])
68 purchases = pd.concat([purchases, pd.DataFrame(result['cards'])])
70 purchases['card_name'] = purchases.apply(lambda r: config.card_details_df.loc[r.card_detail_id]['name'], axis=1)
71 purchases['bcx'] = purchases.apply(lambda r: collection_util.get_bcx(r), axis=1)
73 sold_cards = pd.DataFrame(get_sold_cards(account_name, potential_sell))
74 if not sold_cards.empty:
75 sold_cards['card_name'] = sold_cards.apply(lambda r: config.card_details_df.loc[r.card_detail_id]['name'],
76 axis=1)
77 sold_cards['bcx'] = sold_cards.apply(lambda r: collection_util.get_bcx(r), axis=1)
79 return purchases, sold_cards