diff --git a/gns3server/controller/shape.py b/gns3server/controller/shape.py index 14db7394..71de96cf 100644 --- a/gns3server/controller/shape.py +++ b/gns3server/controller/shape.py @@ -24,7 +24,7 @@ class Shape: Shape are visual element not used by the network emulation. Like text, images, rectangle... They are pure SVG elements. """ - def __init__(self, project, shape_id=None, svg="", x=0, y=0, z=0): + def __init__(self, project, shape_id=None, svg="", x=0, y=0, z=0, rotation=0): self.svg = svg self._project = project if shape_id is None: @@ -34,6 +34,7 @@ class Shape: self._x = x self._y = y self._z = z + self._rotation = rotation @property def id(self): @@ -71,6 +72,14 @@ class Shape: def z(self, val): self._z = val + @property + def rotation(self): + return self._rotation + + @rotation.setter + def rotation(self, val): + self._rotation = val + @asyncio.coroutine def update(self, **kwargs): """ @@ -96,6 +105,7 @@ class Shape: "x": self._x, "y": self._y, "z": self._z, + "rotation": self._rotation, "svg": self._svg } return { @@ -104,6 +114,7 @@ class Shape: "x": self._x, "y": self._y, "z": self._z, + "rotation": self._rotation, "svg": self._svg } diff --git a/gns3server/schemas/shape.py b/gns3server/schemas/shape.py index ae955343..cac29d16 100644 --- a/gns3server/schemas/shape.py +++ b/gns3server/schemas/shape.py @@ -47,6 +47,12 @@ SHAPE_OBJECT_SCHEMA = { "description": "Z property", "type": "integer" }, + "rotation": { + "description": "Rotation of the element", + "type": "integer", + "minimum": 0, + "maximum": 360 + }, "svg": { "description": "SVG content of the shape", "type": "string", diff --git a/tests/controller/test_shape.py b/tests/controller/test_shape.py index 441e937a..aa9b069a 100644 --- a/tests/controller/test_shape.py +++ b/tests/controller/test_shape.py @@ -55,13 +55,15 @@ def test_json(project): "x": i.x, "y": i.y, "z": i.z, - "svg": i.svg + "svg": i.svg, + "rotation": i.rotation } assert i.__json__(topology_dump=True) == { "shape_id": i.id, "x": i.x, "y": i.y, "z": i.z, + "rotation": i.rotation, "svg": i.svg }