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

1import json 

2import logging 

3 

4import pandas as pd 

5 

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 

10 

11 

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

17 

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 

22 

23 

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

29 

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 

36 

37 

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

57 

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

70 

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) 

74 

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) 

81 

82 return purchases, sold_cards