From d8fb17df9fdc6b77949022176d5d3c247661c2ef Mon Sep 17 00:00:00 2001 From: Athanasius Date: Mon, 15 Mar 2021 17:03:39 +0000 Subject: [PATCH] plugins/eddn: Add paranoia about data in is_horizons() A damaged station has `"modules": []`, so trips over modules.values(). --- plugins/eddn.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/eddn.py b/plugins/eddn.py index 22f76ec6..bbcd5b35 100644 --- a/plugins/eddn.py +++ b/plugins/eddn.py @@ -805,8 +805,19 @@ MAP_STR_ANY = Mapping[str, Any] def is_horizons(economies: MAP_STR_ANY, modules: MAP_STR_ANY, ships: MAP_STR_ANY) -> bool: - return ( - any(economy['name'] == 'Colony' for economy in economies.values()) or - any(module.get('sku') == HORIZ_SKU for module in modules.values()) or - any(ship.get('sku') == HORIZ_SKU for ship in ships.get('shipyard_list', {}).values()) - ) + economies_colony = False + modules_horizons = False + ship_horizons = False + + if isinstance(dict, economies): + economies_colony = any(economy['name'] == 'Colony' for economy in economies.values()) + + if isinstance(dict, modules): + modules_horizons = any(module.get('sku') == HORIZ_SKU for module in modules.values()) + + if isinstance(dict, ships): + if ships.get('shipyard_list') is not None: + ship_horizons = any(ship.get('sku') == HORIZ_SKU for ship in ships['shipyard_list'].values()) + + return economies_colony or modules_horizons or ship_horizons +