From 6d46b4147a0a15321e855f7c9a8debc9f3fb0fc1 Mon Sep 17 00:00:00 2001 From: Grooveline <94862822+MacrayBlackhand@users.noreply.github.com> Date: Fri, 12 Jun 2026 06:24:03 -0500 Subject: [PATCH] Read warehouses in Warehouses.load_dict (symmetric with serialization) load_dict read only data["airports"], silently dropping data["warehouses"], so unit/FARP/ship warehouse state was lost on every save->load round-trip while the serializer still wrote it. Read the warehouses sub-dict symmetrically. Closes #428. --- dcs/terrain/terrain.py | 2 ++ tests/test_terrain.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/dcs/terrain/terrain.py b/dcs/terrain/terrain.py index feebf210..ff79e6a3 100644 --- a/dcs/terrain/terrain.py +++ b/dcs/terrain/terrain.py @@ -614,6 +614,8 @@ def __init__(self, terrain: Terrain): def load_dict(self, data): for x in data.get("airports", {}): self.terrain.airport_by_id(x).load_from_dict(data["airports"][x]) + for uid, wh_data in data.get("warehouses", {}).items(): + self.warehouses[int(uid)] = wh_data def __str__(self): airports = self.terrain.airports diff --git a/tests/test_terrain.py b/tests/test_terrain.py index 337acf67..2516ab21 100644 --- a/tests/test_terrain.py +++ b/tests/test_terrain.py @@ -94,6 +94,24 @@ def test_parking_slots(self): slots = m.terrain.airports["Nellis"].free_parking_slots(dcs.planes.KC_135) +class WarehousesTest(unittest.TestCase): + + def test_load_dict_reads_warehouses(self): + # __str__ serializes both "airports" and "warehouses", but load_dict + # historically read only "airports", silently dropping unit/FARP/ship + # warehouse state on every save->load round-trip. load_dict must read + # "warehouses" symmetrically with the serializer. + m = dcs.mission.Mission(terrain=dcs.terrain.Caucasus()) + m.warehouses.load_dict({ + "airports": {}, + "warehouses": {"4242": {"coalition": "BLUE", "size": 100}}, + }) + + self.assertIn(4242, m.warehouses.warehouses) + self.assertEqual(m.warehouses.warehouses[4242]["coalition"], "BLUE") + self.assertEqual(m.warehouses.warehouses[4242]["size"], 100) + + class NormandyTest(unittest.TestCase): def test_creation(self):