diff --git a/src/c3nav/mapdata/middleware.py b/src/c3nav/mapdata/middleware.py new file mode 100644 index 00000000..d6de2993 --- /dev/null +++ b/src/c3nav/mapdata/middleware.py @@ -0,0 +1,40 @@ +import re +from functools import wraps + + +class NoLanguageMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + response = self.get_response(request) + + if not getattr(response, 'no_language', False): + return response + + if not getattr(response, 'keep_content_language', False): + del response['Content-Language'] + + if not response.has_header('Vary'): + return response + + vary = tuple(s for s in re.split(r'\s*,\s*', response['Vary']) if s.lower() != 'accept-language') + + if vary: + response['Vary'] = ', '.join(vary) + else: + del response['Vary'] + + return response + + +def no_language(keep_content_language=False): + def decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + response = func(*args, **kwargs) + response.no_language = True + response.keep_content_language = keep_content_language + return response + return wrapper + return decorator diff --git a/src/c3nav/mapdata/views.py b/src/c3nav/mapdata/views.py index 3f886643..b4aedea8 100644 --- a/src/c3nav/mapdata/views.py +++ b/src/c3nav/mapdata/views.py @@ -10,11 +10,13 @@ from django.shortcuts import get_object_or_404 from shapely.geometry import box from c3nav.mapdata.cache import MapHistory +from c3nav.mapdata.middleware import no_language from c3nav.mapdata.models import Level, MapUpdate, Source from c3nav.mapdata.render.base import get_render_level_ids from c3nav.mapdata.render.svg import SVGRenderer +@no_language() def tile(request, level, zoom, x, y, format): zoom = int(zoom) if not (0 <= zoom <= 10):