Project

General

Profile

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

calebasse / calebasse / cbv.py @ af6b9a0b

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 ModelNameMixin(object):
49
    def get_context_data(self, **kwargs):
50
        ctx = super(ModelNameMixin, self).get_context_data(**kwargs)
51
        ctx['model_verbose_name_plural'] = self.model._meta.verbose_name_plural
52
        ctx['model_verbose_name'] = self.model._meta.verbose_name
53
        return ctx
54

    
55
class ListView(ModelNameMixin, ServiceViewMixin, list_cbv.ListView):
56
    pass
57

    
58

    
59
class CreateView(ModelNameMixin, ServiceViewMixin, edit.CreateView):
60
    pass
61

    
62

    
63
class DeleteView(ModelNameMixin, ServiceViewMixin, edit.DeleteView):
64
    pass
65

    
66

    
67
class UpdateView(ModelNameMixin, ServiceViewMixin, edit.UpdateView):
68
    pass
(3-3/11)