bornhack-website/src/camps/views.py

67 lines
2.1 KiB
Python
Raw Normal View History

from django.views.generic import ListView, DetailView
from django.utils import timezone
2017-06-04 11:08:59 +00:00
from .models import Camp
2017-02-19 20:20:19 +00:00
from django.shortcuts import redirect
from .mixins import CampViewMixin
from django.views import View
from django.conf import settings
2017-03-23 17:32:13 +00:00
import logging
logger = logging.getLogger("bornhack.%s" % __name__)
2017-02-19 20:20:19 +00:00
class CampRedirectView(CampViewMixin, View):
2017-06-04 11:08:59 +00:00
2017-02-19 20:20:19 +00:00
def dispatch(self, request, *args, **kwargs):
now = timezone.now()
try:
camp = Camp.objects.get(
camp__contains=now
)
logger.debug("Redirecting to camp '%s' for page '%s' because it is now!" % (camp.slug, kwargs['page']))
except Camp.DoesNotExist:
# find the closest camp in the past
prevcamp = Camp.objects.filter(
camp__endswith__lt=now
).order_by('-camp')[0]
# find the closest upcoming camp
nextcamp = Camp.objects.filter(
camp__startswith__gt=now
2017-08-17 19:16:49 +00:00
).order_by('camp')[0]
2017-03-23 17:32:13 +00:00
# find the number of days between the two camps
daysbetween = (nextcamp.camp.lower - prevcamp.camp.upper).days
# find the number of days since the last camp ended
dayssinceprevcamp = (timezone.now() - prevcamp.camp.lower).days
2017-03-23 17:32:13 +00:00
# find the percentage of time passed
percentpassed = (dayssinceprevcamp / daysbetween) * 100
2017-03-23 17:32:13 +00:00
# do the redirect
if percentpassed > settings.CAMP_REDIRECT_PERCENT:
camp = nextcamp
else:
camp = prevcamp
2017-03-23 17:32:13 +00:00
logger.debug("Redirecting to camp '%s' for page '%s' because %s%% of the time between the camps passed" % (camp.slug, kwargs['page'], int(percentpassed)))
2017-03-23 17:32:13 +00:00
return redirect(kwargs['page'], camp_slug=camp.slug)
2015-10-03 01:07:05 +00:00
class CampDetailView(DetailView):
model = Camp
slug_url_kwarg = 'camp_slug'
def get_template_names(self):
return '%s_camp_detail.html' % self.get_object().slug
2017-01-25 00:49:13 +00:00
class CampListView(ListView):
model = Camp
template_name = 'camp_list.html'
2017-07-09 14:16:21 +00:00
queryset = Camp.objects.all().order_by('camp')
2017-01-25 00:49:13 +00:00