X-Git-Url: https://git.mdrn.pl/fnpdjango.git/blobdiff_plain/3db2da0f3aecda70b20c05bcde42e30353dceb05..4db01353848079e0b4b3d0b4c0de29008b546473:/fnpdjango/middleware.py?ds=inline diff --git a/fnpdjango/middleware.py b/fnpdjango/middleware.py index fcf4c36..734e878 100644 --- a/fnpdjango/middleware.py +++ b/fnpdjango/middleware.py @@ -1,10 +1,48 @@ -from django.utils import translation -from django.conf import settings -from django.http import Http404 from . import app_settings +try: + # Django >= 1.10 + from django.utils.deprecation import MiddlewareMixin +except ImportError: + # Django <= 1.9 + MiddlewareMixin = object -class SetRemoteAddrFromXRealIP(object): + from django.conf import settings + from django.http import Http404 + from django.utils import translation + + class URLLocaleMiddleware(MiddlewareMixin): + """Decides which translation to use, based on path only.""" + def process_request(self, request): + language = translation.get_language_from_path(request.path_info) + if language: + translation.activate(language) + request.LANGUAGE_CODE = translation.get_language() + if language == settings.LANGUAGE_CODE: + raise Http404 + + def process_response(self, request, response): + language = translation.get_language() + translation.deactivate() + if 'Content-Language' not in response: + response['Content-Language'] = language + return response +else: + # Django >= 1.10 + import warnings + from django.middleware.locale import LocaleMiddleware + + class URLLocaleMiddleware(LocaleMiddleware): + def __init__(self, *args, **kwargs): + warnings.warn( + "As of Django 1.10, fnpdjango.middleware.URLLocaleMiddleware " + "is deprecated in favor of " + "django.middleware.locale.LocaleMiddleware.", + DeprecationWarning) + super(URLLocaleMiddleware, self).__init__(*args, **kwargs) + + +class SetRemoteAddrFromXRealIP(MiddlewareMixin): """Sets REMOTE_ADDR from the X-Real-IP header, as set by Nginx.""" def process_request(self, request): if app_settings.REALIP: @@ -13,22 +51,3 @@ class SetRemoteAddrFromXRealIP(object): except KeyError: pass return None - - -class URLLocaleMiddleware(object): - """Decides which translation to use, based on path only.""" - - def process_request(self, request): - language = translation.get_language_from_path(request.path_info) - if language == settings.LANGUAGE_CODE: - raise Http404 - if language: - translation.activate(language) - request.LANGUAGE_CODE = translation.get_language() - - def process_response(self, request, response): - language = translation.get_language() - translation.deactivate() - if 'Content-Language' not in response: - response['Content-Language'] = language - return response