continue migration: make website working

This commit is contained in:
bkfox
2019-08-05 23:45:20 +02:00
parent 432467ec8d
commit 324cf2ef0f
54 changed files with 8658 additions and 115 deletions

View File

@ -1,25 +1,13 @@
import pytz
import django.utils.timezone as tz
from django import shortcuts
from django.db.models import Q, Case, Value, When
from django.utils import timezone as tz
import aircox.models as models
from .models import Station
from .utils import Redirect
class AircoxInfo:
"""
Used to store informations about Aircox on a request. Some of theses
information are None when user is anonymous.
"""
station = None
"""
Current station
"""
default_station = False
"""
Default station is used as the current station
"""
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
__all__ = ['AircoxMiddleware']
class AircoxMiddleware(object):
@ -31,37 +19,19 @@ class AircoxMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def update_station(self, request):
station = request.GET.get('aircox.station')
pk = None
try:
if station is not None:
pk = request.GET['aircox.station']
if station:
pk = int(pk)
if models.Station.objects.filter(pk = station).exists():
request.session['aircox.station'] = pk
except:
pass
def init_station(self, request, aircox):
self.update_station(request)
try:
pk = request.session.get('aircox.station')
pk = int(pk) if pk else None
except:
pk = None
aircox.station = models.Station.objects.default(pk)
aircox.default_station = (pk is None)
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, aircox):
def init_timezone(self, request):
# note: later we can use http://freegeoip.net/ on user side if
# required
# TODO: add to request's session
timezone = None
try:
timezone = request.session.get('aircox.timezone')
@ -76,14 +46,11 @@ class AircoxMiddleware(object):
def __call__(self, request):
tz.activate(pytz.timezone('Europe/Brussels'))
aircox = AircoxInfo()
if request.user.is_authenticated:
self.init_station(request, aircox)
self.init_timezone(request, aircox)
request.aircox = aircox
return self.get_response(request)
self.init_timezone(request)
request.station = self.get_station(request)
try:
return self.get_response(request)
except Redirect as redirect:
return