Handle invalid appliances files

Fix #1150
pull/1153/head
Julien Duponchelle 7 years ago
parent 2eead38cd8
commit 6996b7094f
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8

@ -78,10 +78,11 @@ class Controller:
try:
with open(path, 'r', encoding='utf-8') as f:
appliance = ApplianceTemplate(appliance_id, json.load(f), builtin=builtin)
except (ValueError, OSError) as e:
appliance.__json__() # Check if loaded without error
if appliance.status != 'broken':
self._appliance_templates[appliance.id] = appliance
except (ValueError, OSError, KeyError) as e:
log.warning("Can't load %s: %s", path, str(e))
if appliance.status != 'broken':
self._appliance_templates[appliance.id] = appliance
self._appliances = {}
vms = []

@ -481,6 +481,12 @@ def test_appliance_templates(controller, async_run, tmpdir):
}
with open(str(tmpdir / "my_appliance.gns3a"), 'w+') as f:
json.dump(my_appliance, f)
# A broken appliance
my_appliance = {
"name": "Broken"
}
with open(str(tmpdir / "my_appliance2.gns3a"), 'w+') as f:
json.dump(my_appliance, f)
with patch("gns3server.config.Config.get_section_config", return_value={"appliances_path": str(tmpdir)}):
controller.load_appliances()

Loading…
Cancel
Save