try to further improve api performance
This commit is contained in:
parent
cc8b1dfa55
commit
e751991585
2 changed files with 21 additions and 7 deletions
|
@ -1,7 +1,9 @@
|
|||
from rest_framework.renderers import JSONRenderer
|
||||
from c3nav.mapdata.utils import json_encoder_reindent
|
||||
from functools import wraps
|
||||
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
|
||||
from c3nav.mapdata.utils import json_encoder_reindent
|
||||
|
||||
orig_render = JSONRenderer.render
|
||||
|
||||
|
||||
|
|
|
@ -47,27 +47,39 @@ class GeometryViewSet(ViewSet):
|
|||
packages = request.GET.getlist('package')
|
||||
names = request.GET.getlist('name')
|
||||
|
||||
if levels:
|
||||
levels = tuple(Level.objects.filter(name__in=levels))
|
||||
if packages:
|
||||
packages = tuple(Package.objects.filter(name__in=packages))
|
||||
|
||||
results = []
|
||||
for t in types:
|
||||
mapitemtype = GEOMETRY_MAPITEM_TYPES[t]
|
||||
queryset = mapitemtype.objects.all()
|
||||
if packages:
|
||||
queryset = queryset.filter(package__name__in=packages)
|
||||
queryset = queryset.filter(package__in=packages)
|
||||
if levels:
|
||||
if hasattr(mapitemtype, 'level'):
|
||||
queryset = queryset.filter(level__name__in=levels)
|
||||
queryset = queryset.filter(level__in=levels)
|
||||
elif hasattr(mapitemtype, 'levels'):
|
||||
queryset = queryset.filter(levels__name__in=levels)
|
||||
queryset = queryset.filter(levels__in=levels)
|
||||
else:
|
||||
queryset = queryset.none()
|
||||
if names:
|
||||
queryset = queryset.filter(name__in=names)
|
||||
queryset = filter_queryset_by_package_access(request, queryset)
|
||||
queryset = queryset.order_by('name')
|
||||
for field_name in ('package', 'level', 'levels', 'crop_to_level', 'elevator'):
|
||||
|
||||
for field_name in ('package', 'level', 'crop_to_level', 'elevator'):
|
||||
if hasattr(mapitemtype, field_name):
|
||||
queryset = queryset.prefetch_related(field_name)
|
||||
queryset = queryset.select_related(field_name)
|
||||
|
||||
for field_name in ('levels', ):
|
||||
if hasattr(mapitemtype, field_name):
|
||||
queryset.prefetch_related(field_name)
|
||||
|
||||
results.extend(sum((obj.to_geojson() for obj in queryset), []))
|
||||
|
||||
return Response(results)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue