Completed
Push — master ( 9b088f...73be1b )
by Asif
01:05
created

BaseBuilder._has_crud_attr()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 2
rs 10
cc 1
1
import django
2
try:
3
    from django.apps import apps
4
except ImportError:
5
    pass
6
7
import crudbuilder
8
from six import with_metaclass
9
from django.contrib.contenttypes.models import ContentType
10
11
from crudbuilder.exceptions import NotModelException
12
13
14
class BaseBuilder(object):
15
    def __init__(
16
        self,
17
        app,
18
        model,
19
        crud
20
    ):
21
22
        self.model = model
23
        self.app = app
24
        self.crud = crud
25
26
        self.custom_modelform = self._has_crud_attr('custom_modelform')
27
        self.modelform_excludes = self._has_crud_attr('modelform_excludes')
28
        self.createupdate_forms = self._has_crud_attr('createupdate_forms')
29
30
        # django tables2
31
        self.custom_table2 = self._has_crud_attr('custom_table2')
32
        self.tables2_fields = self._has_crud_attr('tables2_fields')
33
        self.tables2_css_class = self._has_crud_attr('tables2_css_class')
34
        self.tables2_pagination = self._has_crud_attr('tables2_pagination')
35
36
        self.permission_required = self._has_crud_attr('permission_required')
37
        self.permissions = self._has_crud_attr('permissions')
38
        self.login_required = self._has_crud_attr('login_required')
39
40
        self.custom_templates = self._has_crud_attr('custom_templates')
41
        self.custom_queryset = self._has_crud_attr('custom_queryset')
42
        self.inlineformset = self.get_inlineformset
43
44
    @property
45
    def get_model_class(self):
46
        """Returns model class"""
47
        try:
48
            c = ContentType.objects.get(app_label=self.app, model=self.model)
49
        except ContentType.DoesNotExist:
50
            # try another kind of resolution
51
            # fixes a situation where a proxy model is defined in some external app.
52
            if django.VERSION >= (1, 7):
53
                return apps.get_model(self.app, self.model)
54
        else:
55
            return c.model_class()
56
57
    def _has_crud_attr(self, attr):
58
        return getattr(self.crud, attr, None)
59
60
    def view_permission(self, view_type):
61
        if self.permissions:
62
            return self.permissions.get(view_type, None)
63
        else:
64
            return '{}.{}_{}'.format(self.app, self.model, view_type)
65
66
    @property
67
    def check_login_required(self):
68
        return True if self.login_required else False
69
70
    @property
71
    def check_permission_required(self):
72
        return True if self.permission_required else False
73
74
    @property
75
    def get_inlineformset(self):
76
        if self.crud.inlineformset:
77
            return self.crud.inlineformset().construct_formset()
78
        else:
79
            return None
80
81
82
class MetaCrudRegister(type):
83
    def __new__(cls, clsname, bases, attrs):
84
        newclass = super(
85
            MetaCrudRegister, cls
86
            ).__new__(cls, clsname, bases, attrs)
87
88
        if bases:
89
            if newclass.model:
90
                crudbuilder.register(newclass.model, newclass)
91
            else:
92
                msg = "No model defined in {} class".format(newclass)
93
                raise NotModelException(msg)
94
        return newclass
95
96
97
class BaseCrudBuilder(with_metaclass(MetaCrudRegister)):
98
    model = None
99
    inlineformset = None
100