forked from rc/aircox
		
	
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import pytz
 | 
						|
from django.db.models import Q
 | 
						|
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:
 | 
						|
            return
 |