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
}