From f44b8909318241bb17cda7e5f14fc7ed2988c352 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Mon, 10 Feb 2025 09:30:55 +0000 Subject: [PATCH] Target locations are stored differently for Lacey grids --- src/murfey/client/contexts/spa_metadata.py | 16 +++++++++++++--- src/murfey/util/spa_metadata.py | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/murfey/client/contexts/spa_metadata.py b/src/murfey/client/contexts/spa_metadata.py index e5a19d56a..f60d8ee26 100644 --- a/src/murfey/client/contexts/spa_metadata.py +++ b/src/murfey/client/contexts/spa_metadata.py @@ -21,9 +21,19 @@ def _foil_hole_positions(xml_path: Path, grid_square: int) -> Dict[str, FoilHole for_parsing = xml.read() data = xmltodict.parse(for_parsing) data = data["GridSquareXml"] - serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][ - "a:m_serializationArray" - ] + if "TargetLocationsEfficient" in data["TargetLocations"].keys(): + # Grids with regular foil holes + serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][ + "a:m_serializationArray" + ] + elif "TargetLocations" in data["TargetLocations"].keys(): + # Lacey grids + serialization_array = data["TargetLocations"]["TargetLocations"][ + "a:m_serializationArray" + ] + else: + logger.warning(f"Target locations not found for {str(xml_path)}") + return {} required_key = "" for key in serialization_array.keys(): if key.startswith("b:KeyValuePairOfintTargetLocation"): diff --git a/src/murfey/util/spa_metadata.py b/src/murfey/util/spa_metadata.py index 07476694e..e471aa93d 100644 --- a/src/murfey/util/spa_metadata.py +++ b/src/murfey/util/spa_metadata.py @@ -157,9 +157,20 @@ def foil_hole_data(xml_path: Path, foil_hole: int, grid_square: int) -> FoilHole for_parsing = xml.read() data = xmltodict.parse(for_parsing) data = data["GridSquareXml"] - serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][ - "a:m_serializationArray" - ] + if "TargetLocationsEfficient" in data["TargetLocations"].keys(): + # Grids with regular foil holes + serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][ + "a:m_serializationArray" + ] + elif "TargetLocations" in data["TargetLocations"].keys(): + # Lacey grids + serialization_array = data["TargetLocations"]["TargetLocations"][ + "a:m_serializationArray" + ] + else: + logger.warning(f"Target locations not found for {str(xml_path)}") + return FoilHoleInfo(id=foil_hole, grid_square_id=grid_square) + if len(serialization_array.keys()) == 0: return FoilHoleInfo(id=foil_hole, grid_square_id=grid_square) for key in serialization_array.keys():