improve route serialization
@@ -3,6 +3,7 @@ import copy
from collections import OrderedDict, deque
import numpy as np
+from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
@@ -37,13 +38,36 @@ class RouteItem:
self.edge = edge
self.last_item = last_item
+ @cached_property
+ def waytype(self):
+ if self.edge and self.edge.waytype:
+ return self.route.router.waytypes[self.edge.waytype]
+
+ @cached_property
+ def space(self):
+ return self.route.router.spaces[self.node.space]
+
+ @cached_property
+ def level(self):
+ return self.route.router.levels[self.space.level_id]
+
def serialize(self):
- return OrderedDict((
+ result = OrderedDict((
('id', self.node.pk),
('coords', (self.node.x, self.node.y, self.node.altitude)),
('waytype', (self.route.router.waytypes[self.edge.waytype].serialize(detailed=False)
if self.edge and self.edge.waytype else None)),
))
+ if self.waytype:
+ result['waytype'] = self.waytype.serialize(detailed=False)
+
+ if not self.last_item or self.space.pk != self.last_item.space.pk:
+ result['space'] = self.space.serialize(detailed=False)
+
+ if not self.last_item or self.level.pk != self.last_item.level.pk:
+ result['level'] = self.level.serialize(detailed=False)
+ return result
+
class NoRoute:
