improve location api caching again and improve subtitles/descriptions

This commit is contained in:
Laura Klünder 2017-10-28 20:50:02 +02:00
parent 8beb6f9e8b
commit f83b77ed8b
4 changed files with 38 additions and 1 deletions

View file

@ -284,6 +284,18 @@ class LocationViewSet(RetrieveModelMixin, GenericViewSet):
if group is not None:
group.locations.append(obj)
# add levels to spaces
levels = {obj.pk: obj for obj in queryset if isinstance(obj, Level)}
for obj in queryset:
if isinstance(obj, LevelGeometryMixin):
obj.level_cache = levels.get(obj.level_id, None)
# add spaces to areas and POIs
spaces = {obj.pk: obj for obj in queryset if isinstance(obj, Space)}
for obj in queryset:
if isinstance(obj, SpaceGeometryMixin):
obj.space_cache = spaces.get(obj.space_id, None)
# precache cached properties
for obj in queryset:
# noinspection PyStatementEffect

View file

@ -4,6 +4,7 @@ from operator import attrgetter, itemgetter
import numpy as np
from django.db import models
from django.db.models import F
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _
from scipy.sparse.csgraph._shortest_path import dijkstra
from shapely.affinity import scale
@ -42,6 +43,15 @@ class LevelGeometryMixin(GeometryMixin):
result['level'] = self.level_id
return result
@property
def subtitle(self):
base_subtitle = super().subtitle
if self.level_cache is not None:
return format_lazy(_('{category}, {level}'),
category=base_subtitle,
level=self.level_cache.title)
return base_subtitle
def register_change(self, force=False):
if force or self.geometry_changed:
changed_geometries.register(self.level_id, self.geometry if force else self.get_changed_geometry())

View file

@ -1,4 +1,5 @@
from django.db import models
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
@ -29,6 +30,20 @@ class SpaceGeometryMixin(GeometryMixin):
result['color'] = color
return result
@property
def subtitle(self):
base_subtitle = super().subtitle
if self.space_cache is not None:
if self.space_cache.level_cache is not None:
return format_lazy(_('{category}, {space}, {level}'),
category=base_subtitle,
space=self.space_cache.title,
level=self.space_cache.level_cache.title)
return format_lazy(_('{category}, {space}'),
category=base_subtitle,
level=self.space_cache.title)
return base_subtitle
def register_change(self, force=True):
space = self.space
if force or self.geometry_changed:

View file

@ -166,7 +166,7 @@ class SpecificLocation(Location, models.Model):
@property
def subtitle(self):
groups = tuple(self.groups.all())
return groups[0].title if groups else str(self.__class__._meta.verbose_name)
return groups[0].title if groups else self.__class__._meta.verbose_name
@cached_property
def order(self):