Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1import json 

2import logging 

3from copy import deepcopy 

4 

5from mahjong.meld import Meld 

6from mahjong.tile import TilesConverter 

7from utils.settings_handler import settings 

8 

9 

10class DecisionsLogger: 

11 logger = logging.getLogger() 

12 

13 def debug(self, message_id, message="", context=None): 

14 if not settings.PRINT_LOGS: 

15 return None 

16 

17 self.logger.debug(f"id={message_id}") 

18 

19 if message: 

20 self.logger.debug(f"msg={message}") 

21 

22 if context: 

23 if isinstance(context, list): 

24 for x in context: 

25 self.log_message(x) 

26 else: 

27 self.log_message(context) 

28 

29 def log_message(self, message): 

30 if hasattr(message, "serialize"): 

31 message = message.serialize() 

32 

33 if isinstance(message, dict): 

34 message = deepcopy(message) 

35 self.serialize_dict_objects(message) 

36 self.logger.debug(json.dumps(message)) 

37 else: 

38 self.logger.debug(message) 

39 

40 def serialize_dict_objects(self, d): 

41 for k, v in d.items(): 

42 if isinstance(v, dict): 

43 self.serialize_dict_objects(v) 

44 elif isinstance(v, list): 

45 for i in range(len(v)): 

46 if isinstance(v, dict): 

47 self.serialize_dict_objects(v) 

48 elif hasattr(v[i], "serialize"): 

49 v[i] = v[i].serialize() 

50 elif hasattr(v, "serialize"): 

51 d[k] = v.serialize() 

52 

53 

54class MeldPrint(Meld): 

55 """ 

56 Wrapper to be able use mahjong package MeldPrint object in our loggers. 

57 """ 

58 

59 def __str__(self): 

60 meld_type_str = self.type 

61 if meld_type_str == self.KAN: 

62 meld_type_str += f" open={self.opened}" 

63 return f"Type: {meld_type_str}, Tiles: {TilesConverter.to_one_line_string(self.tiles)} {self.tiles}" 

64 

65 def serialize(self): 

66 return { 

67 "type": self.type, 

68 "tiles_string": TilesConverter.to_one_line_string(self.tiles), 

69 "tiles": self.tiles, 

70 }