From 3aa603c16d5288dae18d0611818de411a411a79d Mon Sep 17 00:00:00 2001 From: Gus Foley Date: Sat, 24 Nov 2018 03:34:32 -0800 Subject: [PATCH] Fallback to backup files for detail loading. Anonymized replays are missing the main replay.initData and replay.details files, this will fallback to the backup versions. Add a new print statement case to the GameEvent base to cover when just the player.name is missing. --- sc2reader/events/game.py | 8 +- sc2reader/resources.py | 128 +++++++++++++++++---------- test_replays/4.1.2.60604/1.SC2Replay | Bin 0 -> 106109 bytes test_replays/test_all.py | 42 +++++++++ 4 files changed, 128 insertions(+), 50 deletions(-) create mode 100644 test_replays/4.1.2.60604/1.SC2Replay diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index bac26d94..7eadebfb 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -37,8 +37,12 @@ def __init__(self, frame, pid): self.name = self.__class__.__name__ def _str_prefix(self): - if self.player: - player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" + if getattr(self, 'pid', 16) == 16: + player_name = "Global" + elif self.player and not self.player.name: + player_name = "Player {0} - ({1})".format(self.player.pid, self.player.play_race) + elif self.player: + player_name = self.player.name else: player_name = "no name" return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 8d165670..32ac05bc 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -268,11 +268,19 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.length = self.game_length = self.real_length = utils.Length(seconds=int(self.frames/fps)) # Load basic details if requested + # .backup files are read in case the main files are missing or removed if load_level >= 1: self.load_level = 1 - for data_file in ['replay.initData', 'replay.details', 'replay.attributes.events']: + files = [ + 'replay.initData.backup', + 'replay.details.backup', + 'replay.attributes.events', + 'replay.initData', + 'replay.details' + ] + for data_file in files: self._read_data(data_file, self._get_reader(data_file)) - self.load_details() + self.load_all_details() self.datapack = self._get_datapack() # Can only be effective if map data has been loaded @@ -311,18 +319,24 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en engine.run(self) - def load_details(self): + def load_init_data(self): if 'replay.initData' in self.raw_data: initData = self.raw_data['replay.initData'] - options = initData['game_description']['game_options'] - self.amm = options['amm'] - self.ranked = options['ranked'] - self.competitive = options['competitive'] - self.practice = options['practice'] - self.cooperative = options['cooperative'] - self.battle_net = options['battle_net'] - self.hero_duplicates_allowed = options['hero_duplicates_allowed'] + elif 'replay.initData.backup' in self.raw_data: + initData = self.raw_data['replay.initData.backup'] + else: + return + options = initData['game_description']['game_options'] + self.amm = options['amm'] + self.ranked = options['ranked'] + self.competitive = options['competitive'] + self.practice = options['practice'] + self.cooperative = options['cooperative'] + self.battle_net = options['battle_net'] + self.hero_duplicates_allowed = options['hero_duplicates_allowed'] + + def load_attribute_events(self): if 'replay.attributes.events' in self.raw_data: # Organize the attribute data to be useful self.attributes = defaultdict(dict) @@ -337,57 +351,75 @@ def load_details(self): self.is_ladder = (self.category == "Ladder") self.is_private = (self.category == "Private") + def load_details(self): if 'replay.details' in self.raw_data: details = self.raw_data['replay.details'] + elif 'replay.details.backup' in self.raw_data: + details = self.raw_data['replay.details.backup'] + else: + return + + self.map_name = details['map_name'] + self.region = details['cache_handles'][0].server.lower() + self.map_hash = details['cache_handles'][-1].hash + self.map_file = details['cache_handles'][-1] + + # Expand this special case mapping + if self.region == 'sg': + self.region = 'sea' - self.map_name = details['map_name'] + dependency_hashes = [d.hash for d in details['cache_handles']] + if hashlib.sha256('Standard Data: Void.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: + self.expansion = 'LotV' + elif hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: + self.expansion = 'HotS' + elif hashlib.sha256('Standard Data: Liberty.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: + self.expansion = 'WoL' + else: + self.expansion = '' - self.region = details['cache_handles'][0].server.lower() - self.map_hash = details['cache_handles'][-1].hash - self.map_file = details['cache_handles'][-1] + self.windows_timestamp = details['file_time'] + self.unix_timestamp = utils.windows_to_unix(self.windows_timestamp) + self.end_time = datetime.utcfromtimestamp(self.unix_timestamp) - # Expand this special case mapping - if self.region == 'sg': - self.region = 'sea' + # The utc_adjustment is either the adjusted windows timestamp OR + # the value required to get the adjusted timestamp. We know the upper + # limit for any adjustment number so use that to distinguish between + # the two cases. + if details['utc_adjustment'] < 10**7*60*60*24: + self.time_zone = details['utc_adjustment']/(10**7*60*60) + else: + self.time_zone = (details['utc_adjustment']-details['file_time'])/(10**7*60*60) - dependency_hashes = [d.hash for d in details['cache_handles']] - if hashlib.sha256('Standard Data: Void.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'LotV' - elif hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'HotS' - elif hashlib.sha256('Standard Data: Liberty.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'WoL' - else: - self.expansion = '' - - self.windows_timestamp = details['file_time'] - self.unix_timestamp = utils.windows_to_unix(self.windows_timestamp) - self.end_time = datetime.utcfromtimestamp(self.unix_timestamp) - - # The utc_adjustment is either the adjusted windows timestamp OR - # the value required to get the adjusted timestamp. We know the upper - # limit for any adjustment number so use that to distinguish between - # the two cases. - if details['utc_adjustment'] < 10**7*60*60*24: - self.time_zone = details['utc_adjustment']/(10**7*60*60) - else: - self.time_zone = (details['utc_adjustment']-details['file_time'])/(10**7*60*60) + self.game_length = self.length + self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.expansion][self.speed])) + self.start_time = datetime.utcfromtimestamp(self.unix_timestamp-self.real_length.seconds) + self.date = self.end_time # backwards compatibility - self.game_length = self.length - self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.expansion][self.speed])) - self.start_time = datetime.utcfromtimestamp(self.unix_timestamp-self.real_length.seconds) - self.date = self.end_time # backwards compatibility + def load_all_details(self): + self.load_init_data() + self.load_attribute_events() + self.load_details() def load_map(self): self.map = self.factory.load_map(self.map_file, **self.opt) def load_players(self): # If we don't at least have details and attributes_events we can go no further - if 'replay.details' not in self.raw_data: + # We can use the backup detail files if the main files have been removed + if 'replay.details' in self.raw_data: + details = self.raw_data['replay.details'] + elif 'replay.details.backup' in self.raw_data: + details = self.raw_data['replay.details.backup'] + else: return if 'replay.attributes.events' not in self.raw_data: return - if 'replay.initData' not in self.raw_data: + if 'replay.initData' in self.raw_data: + initData = self.raw_data['replay.initData'] + elif 'replay.initData.backup' in self.raw_data: + initData = self.raw_data['replay.initData.backup'] + else: return self.clients = list() @@ -397,8 +429,6 @@ def load_players(self): # information. detail_id marks the current index into this data. detail_id = 0 player_id = 1 - details = self.raw_data['replay.details'] - initData = self.raw_data['replay.initData'] # Assume that the first X map slots starting at 1 are player slots # so that we can assign player ids without the map @@ -568,6 +598,8 @@ def register_default_readers(self): """Registers factory default readers.""" self.register_reader('replay.details', readers.DetailsReader(), lambda r: True) self.register_reader('replay.initData', readers.InitDataReader(), lambda r: True) + self.register_reader('replay.details.backup', readers.DetailsReader(), lambda r: True) + self.register_reader('replay.initData.backup', readers.InitDataReader(), lambda r: True) self.register_reader('replay.tracker.events', readers.TrackerEventsReader(), lambda r: True) self.register_reader('replay.message.events', readers.MessageEventsReader(), lambda r: True) self.register_reader('replay.attributes.events', readers.AttributesEventsReader(), lambda r: True) diff --git a/test_replays/4.1.2.60604/1.SC2Replay b/test_replays/4.1.2.60604/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..54693ca74f84179460a5f2442af52297d81dd42f GIT binary patch literal 106109 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 Op%9F14{Dd?#s2|XQcYO^ literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index b779e7cf..4161a0db 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -19,6 +19,8 @@ import sc2reader from sc2reader.exceptions import CorruptTrackerFileError +from sc2reader.events.game import GameEvent +from sc2reader.objects import Player sc2reader.log_utils.log_to_console("INFO") @@ -603,6 +605,41 @@ def test_70154(self): factory = sc2reader.factories.SC2Factory() replay = factory.load_replay(replayfilename) + def test_anonymous_replay(self): + replayfilename = "test_replays/4.1.2.60604/1.SC2Replay" + factory = sc2reader.factories.SC2Factory() + replay = factory.load_replay(replayfilename) + + def test_game_event_string(self): + time = "00.01" + # Global + player = MockPlayer() + player.name = "TestPlayer" + player.play_race = "TestRace" + event = GameEvent(16, 16) + event.player = player + self.assertEqual("{0}\t{1:<15} ".format(time, "Global"), event._str_prefix()) + + # Player with name + player = MockPlayer() + player.name = "TestPlayer" + player.play_race = "TestRace" + event = GameEvent(16, 1) + event.player = player + self.assertEqual("{0}\t{1:<15} ".format(time, player.name), event._str_prefix()) + + # No Player + player = MockPlayer() + event = GameEvent(16, 1) + self.assertEqual("{0}\t{1:<15} ".format(time, "no name"), event._str_prefix()) + + # Player without name + player = MockPlayer() + player.play_race = "TestRace" + player.pid = 1 + event = GameEvent(16, 1) + event.player = player + self.assertEqual("{0}\tPlayer {1} - ({2}) ".format(time, player.pid, player.play_race), event._str_prefix()) class TestGameEngine(unittest.TestCase): class TestEvent(object): @@ -658,6 +695,11 @@ def test_plugin1(self): self.assertEqual(replay.plugin_result['TestPlugin1'], (1, dict(msg="Fail!"))) self.assertEqual(replay.plugin_result['TestPlugin2'], (0, dict())) +class MockPlayer(object): + def __init__(self): + self.name = None + self.play_race = None + self.pid = None if __name__ == '__main__': unittest.main()