From f293b9cb9e24b8aeb6bd9a53b5ed4687a1d8f062 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 19 Jul 2018 08:03:37 +0200 Subject: [PATCH 1/4] Early detection of events without a player There are a class of issues like #61 where __event.player is None__ so this PR tries to detect that condition higher in the call stack. --- sc2reader/engine/engine.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 65caced1..74236cf9 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -151,6 +151,7 @@ def run(self, replay): # the front of the line for immediate processing. while len(event_queue) > 0: event = event_queue.popleft() + assert event.player, 'Event with no player: {}'.format(event) if event.name == 'PluginExit': # Remove the plugin and reset the handlers. From 3bb5577081e0e1ac13771e86886b89d9559d87d9 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 19 Jul 2018 08:29:54 +0200 Subject: [PATCH 2/4] Further down --- sc2reader/engine/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 74236cf9..46585a47 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -151,7 +151,6 @@ def run(self, replay): # the front of the line for immediate processing. while len(event_queue) > 0: event = event_queue.popleft() - assert event.player, 'Event with no player: {}'.format(event) if event.name == 'PluginExit': # Remove the plugin and reset the handlers. @@ -172,6 +171,7 @@ def run(self, replay): # which get processed after the current event finishes. The new_events # batch is constructed in reverse order because extendleft reverses # the order again with a series of appendlefts. + assert event.player, 'Event with no player: {}'.format(event) new_events = collections.deque() for event_handler in event_handlers: try: From 27a6dea6f43a358739bdc9972317f293b782fef4 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 19 Jul 2018 08:35:54 +0200 Subject: [PATCH 3/4] Detect in handleTargetUnitCommandEvent() --- sc2reader/engine/plugins/context.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 6b5362bc..5d9224ce 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -54,6 +54,7 @@ def handleCommandEvent(self, event, replay): self.logger.error("Other unit {0} not found".format(event.other_unit_id)) def handleTargetUnitCommandEvent(self, event, replay): + assert event.player, 'Event with no player: {}'.format(event) self.last_target_ability_event[event.player.pid] = event if not replay.datapack: From df92593cd6edafca7dfb0a6fe487082b29da1ce6 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 19 Jul 2018 08:37:14 +0200 Subject: [PATCH 4/4] Update engine.py --- sc2reader/engine/engine.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 46585a47..65caced1 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -171,7 +171,6 @@ def run(self, replay): # which get processed after the current event finishes. The new_events # batch is constructed in reverse order because extendleft reverses # the order again with a series of appendlefts. - assert event.player, 'Event with no player: {}'.format(event) new_events = collections.deque() for event_handler in event_handlers: try: