Completed
Push — master ( aa0d85...69736b )
by Asif
01:01
created

crudbuilder.BaseBuilder   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 59
Duplicated Lines 0 %
Metric Value
dl 0
loc 59
rs 10
wmc 11

7 Methods

Rating   Name   Duplication   Size   Complexity  
A check_login_required() 0 3 2
A check_permission_required() 0 3 2
A get_model_class() 0 5 1
A _has_crud_attr() 0 2 1
A get_inlineformset() 0 6 2
B __init__() 0 28 1
A view_permission() 0 5 2
1
import crudbuilder
2
from six import with_metaclass
3
from django.contrib.contenttypes.models import ContentType
4
5
from crudbuilder.exceptions import NotModelException
6
7
8
class BaseBuilder(object):
9
    def __init__(
10
        self,
11
        app,
12
        model,
13
        crud
14
    ):
15
16
        self.model = model
17
        self.app = app
18
        self.crud = crud
19
20
        self.custom_modelform = self._has_crud_attr('custom_modelform')
21
        self.modelform_excludes = self._has_crud_attr('modelform_excludes')
22
        self.createupdate_forms = self._has_crud_attr('createupdate_forms')
23
24
        # django tables2
25
        self.custom_table2 = self._has_crud_attr('custom_table2')
26
        self.tables2_fields = self._has_crud_attr('tables2_fields')
27
        self.tables2_css_class = self._has_crud_attr('tables2_css_class')
28
        self.tables2_pagination = self._has_crud_attr('tables2_pagination')
29
30
        self.permission_required = self._has_crud_attr('permission_required')
31
        self.permissions = self._has_crud_attr('permissions')
32
        self.login_required = self._has_crud_attr('login_required')
33
34
        self.custom_templates = self._has_crud_attr('custom_templates')
35
        self.custom_queryset = self._has_crud_attr('custom_queryset')
36
        self.inlineformset = self.get_inlineformset
37
38
    @property
39
    def get_model_class(self):
40
        """Returns model class"""
41
        c = ContentType.objects.get(app_label=self.app, model=self.model)
42
        return c.model_class()
43
44
    def _has_crud_attr(self, attr):
45
        return getattr(self.crud, attr, None)
46
47
    def view_permission(self, view_type):
48
        if self.permissions:
49
            return self.permissions.get(view_type, None)
50
        else:
51
            return '{}.{}_{}'.format(self.app, self.model, view_type)
52
53
    @property
54
    def check_login_required(self):
55
        return True if self.login_required else False
56
57
    @property
58
    def check_permission_required(self):
59
        return True if self.permission_required else False
60
61
    @property
62
    def get_inlineformset(self):
63
        if self.crud.inlineformset:
64
            return self.crud.inlineformset().construct_formset()
65
        else:
66
            return None
67
68
69
class MetaCrudRegister(type):
70
    def __new__(cls, clsname, bases, attrs):
71
        newclass = super(
72
            MetaCrudRegister, cls
73
            ).__new__(cls, clsname, bases, attrs)
74
75
        if bases:
76
            if newclass.model:
77
                crudbuilder.register(newclass.model, newclass)
78
            else:
79
                msg = "No model defined in {} class".format(newclass)
80
                raise NotModelException(msg)
81
        return newclass
82
83
84
class BaseCrudBuilder(with_metaclass(MetaCrudRegister)):
85
    model = None
86
    inlineformset = None
87