diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index 898be945..f486d348 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -739,7 +739,28 @@ class Project: except OSError: pass try: - topology = load_topology(path)["topology"] + project_data = load_topology(path) + + #load meta of project + keys_to_load = [ + "auto_start", + "auto_close", + "auto_open", + "scene_height", + "scene_width", + "zoom", + "show_layers", + "snap_to_grid", + "show_grid", + "show_interface_labels" + ] + + for key in keys_to_load: + val = project_data.get(key, None) + if val is not None: + setattr(self, key, val) + + topology = project_data["topology"] for compute in topology.get("computes", []): yield from self.controller.add_compute(**compute) for node in topology.get("nodes", []): diff --git a/tests/controller/test_project_open.py b/tests/controller/test_project_open.py index 87a47cf2..01536e03 100644 --- a/tests/controller/test_project_open.py +++ b/tests/controller/test_project_open.py @@ -23,6 +23,7 @@ import aiohttp from tests.utils import asyncio_patch, AsyncioMagicMock from gns3server.controller.compute import Compute +from gns3server.controller.project import Project @pytest.fixture @@ -34,6 +35,8 @@ def demo_topology(): "auto_close": True, "auto_open": False, "auto_start": False, + "scene_height": 500, + "scene_width": 700, "name": "demo", "project_id": "3c1be6f9-b4ba-4737-b209-63c47c23359f", "revision": 5, @@ -142,7 +145,7 @@ def demo_topology(): } -def test_open(controller, tmpdir, demo_topology, async_run, http_server): +def test_load_project(controller, tmpdir, demo_topology, async_run, http_server): with open(str(tmpdir / "demo.gns3"), "w+") as f: json.dump(demo_topology, f) @@ -160,6 +163,45 @@ def test_open(controller, tmpdir, demo_topology, async_run, http_server): assert len(project.drawings) == 1 assert project.name == "demo" + assert project.scene_height == 500 + assert project.scene_width == 700 + + +def test_open(controller, tmpdir, demo_topology, async_run, http_server): + simple_topology = { + "auto_close": True, + "auto_open": False, + "auto_start": False, + "scene_height": 500, + "scene_width": 700, + "name": "demo", + "project_id": "3c1be6f9-b4ba-4737-b209-63c47c23359f", + "revision": 5, + "topology": { + "computes": [], + "drawings": [], + "links": [], + "nodes": [] + }, + "type": "topology", + "version": "2.0.0" + } + + with open(str(tmpdir / "demo.gns3"), "w+") as f: + json.dump(simple_topology, f) + + project = Project( + name="demo", + project_id="64ba8408-afbf-4b66-9cdd-1fd854427478", + path=str(tmpdir), controller=controller, filename="demo.gns3", status="closed") + + async_run(project.open()) + + assert project.status == "opened" + + assert project.name == "demo" + assert project.scene_height == 500 + assert project.scene_width == 700 def test_open_missing_compute(controller, tmpdir, demo_topology, async_run, http_server):