aircox-radiocampus/aircox/middleware.py

57 lines
1.7 KiB
Python

import pytz
from django import shortcuts
from django.db.models import Q, Case, Value, When
from django.utils import timezone as tz
from .models import Station
from .utils import Redirect
__all__ = ['AircoxMiddleware']
class AircoxMiddleware(object):
"""
Middleware used to get default info for the given website. Theses
This middleware must be set after the middleware
'django.contrib.auth.middleware.AuthenticationMiddleware',
"""
def __init__(self, get_response):
self.get_response = get_response
def get_station(self, request):
""" Return station for the provided request """
expr = Q(default=True) | Q(hosts__contains=request.get_host())
#case = Case(When(hosts__contains=request.get_host(), then=Value(0)),
# When(default=True, then=Value(32)))
return Station.objects.filter(expr).order_by('default').first()
# .annotate(resolve_priority=case) \
#.order_by('resolve_priority').first()
def init_timezone(self, request):
# note: later we can use http://freegeoip.net/ on user side if
# required
timezone = None
try:
timezone = request.session.get('aircox.timezone')
if timezone:
timezone = pytz.timezone(timezone)
except:
pass
if not timezone:
timezone = tz.get_current_timezone()
tz.activate(timezone)
def __call__(self, request):
self.init_timezone(request)
request.station = self.get_station(request)
try:
return self.get_response(request)
except Redirect as redirect:
return