levels_by_short_label_for_request
This commit is contained in:
parent
dc46173668
commit
9b2b70f46f
2 changed files with 19 additions and 10 deletions
|
@ -158,6 +158,22 @@ def locations_by_slug_for_request(request) -> Mapping[str, LocationSlug]:
|
|||
return locations
|
||||
|
||||
|
||||
def levels_by_short_label_for_request(request) -> Mapping[str, LocationSlug]:
|
||||
cache_key = 'mapdata:levels:by_short_label:%s' % AccessPermission.cache_key_for_request(request)
|
||||
levels = cache.get(cache_key, None)
|
||||
if levels is not None:
|
||||
return levels
|
||||
|
||||
levels = OrderedDict(
|
||||
(level.short_label, level)
|
||||
for level in Level.qs_for_request(request).filter(on_top_of_id__isnull=True).order_by('base_altitude')
|
||||
)
|
||||
|
||||
cache.set(cache_key, levels, 300)
|
||||
|
||||
return levels
|
||||
|
||||
|
||||
def get_location_by_id_for_request(pk, request):
|
||||
if isinstance(pk, str):
|
||||
if pk.isdigit():
|
||||
|
@ -203,7 +219,7 @@ def get_custom_location_for_request(slug: str, request):
|
|||
match = re.match(r'^c:(?P<level>[a-z0-9-_]+):(?P<x>-?\d+(\.\d\d?)?):(?P<y>-?\d+(\.\d\d?)?)$', slug)
|
||||
if match is None:
|
||||
return None
|
||||
level = locations_by_slug_for_request(request).get(match.group('level'))
|
||||
level = levels_by_short_label_for_request(request).get(match.group('level'))
|
||||
if not isinstance(level, Level):
|
||||
return None
|
||||
return CustomLocation(level, float(match.group('x')), float(match.group('y')))
|
||||
|
|
|
@ -14,7 +14,7 @@ from c3nav.mapdata.models import Location, Source
|
|||
from c3nav.mapdata.models.access import AccessPermission
|
||||
from c3nav.mapdata.models.level import Level
|
||||
from c3nav.mapdata.models.locations import LocationRedirect, SpecificLocation
|
||||
from c3nav.mapdata.utils.locations import get_location_by_slug_for_request
|
||||
from c3nav.mapdata.utils.locations import get_location_by_slug_for_request, levels_by_short_label_for_request
|
||||
from c3nav.mapdata.views import set_tile_access_cookie
|
||||
|
||||
ctype_mapping = {
|
||||
|
@ -110,14 +110,7 @@ def map_index(request, mode=None, slug=None, slug2=None, details=None, level=Non
|
|||
'details': True if details else False,
|
||||
}
|
||||
|
||||
levels_cache_key = 'mapdata:levels:%s' % AccessPermission.cache_key_for_request(request)
|
||||
levels = cache.get(levels_cache_key, None)
|
||||
if levels is None:
|
||||
levels = OrderedDict(
|
||||
(level.slug, (level.pk, level.slug, level.short_label))
|
||||
for level in Level.qs_for_request(request).filter(on_top_of_id__isnull=True).order_by('base_altitude')
|
||||
)
|
||||
cache.set(levels_cache_key, levels, 300)
|
||||
levels = levels_by_short_label_for_request(request)
|
||||
|
||||
level = levels.get(level, None) if level else None
|
||||
if level is not None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue