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

1import json 

2import logging 

3 

4import pandas as pd 

5 

6from src.api import spl 

7from src.configuration import config 

8from src.utils import collection_util, progress_util 

9 

10 

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]) 

16 

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 

21 

22 

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() 

28 

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 

35 

36 

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]) 

56 

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'])]) 

69 

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) 

72 

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) 

78 

79 return purchases, sold_cards