Project

General

Profile

Download (2.03 KB) Statistics
| Branch: | Tag: | Revision:

calebasse / calebasse / cbv.py @ a5a20700

1
from datetime import datetime, timedelta
2
from dateutil.relativedelta import relativedelta
3

    
4
from django.views.generic import list as list_cbv, edit, base # ListView
5
# from django.views.generic.edit import # CreateView, DeleteView, UpdateView
6
from django.shortcuts import get_object_or_404
7
from django.http import Http404
8
from django.core.urlresolvers import resolve
9

    
10
from calebasse.ressources.models import Service
11

    
12
class ServiceViewMixin(object):
13
    service = None
14
    date = None
15
    popup = False
16

    
17
    def dispatch(self, request, **kwargs):
18
        self.popup = request.GET.get('popup')
19
        if 'service' in kwargs:
20
            self.service = get_object_or_404(Service, slug=kwargs['service'])
21
        if 'date' in kwargs:
22
            try:
23
                self.date = datetime.strptime(kwargs.get('date'),
24
                        '%Y-%m-%d').date()
25
            except (TypeError, ValueError):
26
                raise Http404
27
        return super(ServiceViewMixin, self).dispatch(request, **kwargs)
28

    
29
    def get_context_data(self, **kwargs):
30
        context = super(ServiceViewMixin, self).get_context_data(**kwargs)
31
        context['url_name'] = resolve(self.request.path).url_name
32
        context['popup'] = self.popup
33
        if self.service is not None:
34
            context['service'] = self.service.slug
35
            context['service_name'] = self.service.name
36

    
37
        if self.date is not None:
38
            context['date'] = self.date
39
            context['previous_day'] = self.date + relativedelta(days=-1)
40
            context['next_day'] = self.date + relativedelta(days=1)
41
            context['previous_month'] = self.date + relativedelta(months=-1)
42
            context['next_month'] = self.date + relativedelta(months=1)
43
        return context
44

    
45
class TemplateView(ServiceViewMixin, base.TemplateView):
46
    pass
47

    
48
class ListView(ServiceViewMixin, list_cbv.ListView):
49
    pass
50

    
51
class CreateView(ServiceViewMixin, edit.CreateView):
52
    pass
53

    
54
class DeleteView(ServiceViewMixin, edit.DeleteView):
55
    pass
56

    
57
class UpdateView(ServiceViewMixin, edit.UpdateView):
58
    pass
(3-3/11)