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