From 8c5ef3aacae49a93d9cfc4869e29131a0d3107e8 Mon Sep 17 00:00:00 2001 From: Nihisil Date: Sat, 25 Aug 2018 19:00:43 +0800 Subject: [PATCH 1/3] Don't save log reproducer output to the file --- project/reproducer.py | 2 +- project/utils/logger.py | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/project/reproducer.py b/project/reproducer.py index 6492469b..b8df0107 100644 --- a/project/reproducer.py +++ b/project/reproducer.py @@ -292,7 +292,7 @@ def parse_args_and_start_reproducer(): reproducer = TenhouLogReproducer(opts.online_log, opts.tag) reproducer.reproduce(opts.dry_run) else: - set_up_logging() + set_up_logging(save_to_file=False) client = TenhouClient(SocketMock(opts.local_log)) try: diff --git a/project/utils/logger.py b/project/utils/logger.py index ce8d79da..84db42a5 100644 --- a/project/utils/logger.py +++ b/project/utils/logger.py @@ -8,7 +8,7 @@ from utils.settings_handler import settings -def set_up_logging(): +def set_up_logging(save_to_file=True): """ Logger for tenhou communication and AI output """ @@ -16,28 +16,29 @@ def set_up_logging(): if not os.path.exists(logs_directory): os.mkdir(logs_directory) - # we shouldn't be afraid about collision - # also, we need it to distinguish different bots logs (if they were run in the same time) - name_hash = hashlib.sha1(settings.USER_ID.encode('utf-8')).hexdigest()[:5] - logger = logging.getLogger('tenhou') logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) - file_name = '{}_{}.log'.format(name_hash, datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')) - fh = logging.FileHandler(os.path.join(logs_directory, file_name), encoding='utf-8') - fh.setLevel(logging.DEBUG) - formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') ch.setFormatter(formatter) - fh.setFormatter(formatter) logger.addHandler(ch) - logger.addHandler(fh) logger = logging.getLogger('ai') logger.setLevel(logging.DEBUG) logger.addHandler(ch) - logger.addHandler(fh) + + if save_to_file: + # we shouldn't be afraid about collision + # also, we need it to distinguish different bots logs (if they were run in the same time) + name_hash = hashlib.sha1(settings.USER_ID.encode('utf-8')).hexdigest()[:5] + + file_name = '{}_{}.log'.format(name_hash, datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')) + fh = logging.FileHandler(os.path.join(logs_directory, file_name), encoding='utf-8') + fh.setLevel(logging.DEBUG) + fh.setFormatter(formatter) + logger.addHandler(fh) + logger.addHandler(fh) From 4dc64995d9fbcf58bb0d4c3efe18d78f300a20bf Mon Sep 17 00:00:00 2001 From: Nihisil Date: Sat, 25 Aug 2018 19:03:16 +0800 Subject: [PATCH 2/3] Introduce log name prefix setting --- project/utils/logger.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/project/utils/logger.py b/project/utils/logger.py index 84db42a5..9d837b37 100644 --- a/project/utils/logger.py +++ b/project/utils/logger.py @@ -32,11 +32,12 @@ def set_up_logging(save_to_file=True): logger.addHandler(ch) if save_to_file: - # we shouldn't be afraid about collision - # also, we need it to distinguish different bots logs (if they were run in the same time) - name_hash = hashlib.sha1(settings.USER_ID.encode('utf-8')).hexdigest()[:5] + # we need it to distinguish different bots logs (if they were run in the same time) + log_prefix = settings.LOG_PREFIX + if not log_prefix: + log_prefix = hashlib.sha1(settings.USER_ID.encode('utf-8')).hexdigest()[:5] - file_name = '{}_{}.log'.format(name_hash, datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')) + file_name = '{}_{}.log'.format(log_prefix, datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')) fh = logging.FileHandler(os.path.join(logs_directory, file_name), encoding='utf-8') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) From 971c5f7482b24ec0abfa04494928ff23173c1a7d Mon Sep 17 00:00:00 2001 From: Nihisil Date: Sat, 25 Aug 2018 19:21:31 +0800 Subject: [PATCH 3/3] Improve tenhou reproducer output --- project/reproducer.py | 53 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/project/reproducer.py b/project/reproducer.py index b8df0107..97e1e083 100644 --- a/project/reproducer.py +++ b/project/reproducer.py @@ -41,8 +41,26 @@ def reproduce(self, dry_run=False): table = Table() for tag in self.round_content: + if player_draw_regex.match(tag) and 'UN' not in tag: + print('Player draw') + tile = self.decoder.parse_tile(tag) + table.player.draw_tile(tile) + if dry_run: - print(tag) + if self._is_draw(tag): + print('<-', TilesConverter.to_one_line_string([self._parse_tile(tag)]), tag) + elif self._is_discard(tag): + print('->', TilesConverter.to_one_line_string([self._parse_tile(tag)]), tag) + elif self._is_init_tag(tag): + hands = { + 0: [int(x) for x in self._get_attribute_content(tag, 'hai0').split(',')], + 1: [int(x) for x in self._get_attribute_content(tag, 'hai1').split(',')], + 2: [int(x) for x in self._get_attribute_content(tag, 'hai2').split(',')], + 3: [int(x) for x in self._get_attribute_content(tag, 'hai3').split(',')], + } + print('Initial hand:', TilesConverter.to_one_line_string(hands[self.player_position])) + else: + print(tag) if not dry_run and tag == self.stop_tag: break @@ -72,10 +90,6 @@ def reproduce(self, dry_run=False): table.player.init_hand(hands[self.player_position]) - if player_draw_regex.match(tag) and 'UN' not in tag: - tile = self.decoder.parse_tile(tag) - table.player.draw_tile(tile) - if discard_regex.match(tag) and 'DORA' not in tag: tile = self.decoder.parse_tile(tag) player_sign = tag.upper()[1] @@ -198,6 +212,35 @@ def _parse_rounds(self, log_content): return rounds[1:] + def _is_discard(self, tag): + skip_tags = ['