Completed
Push — master ( 52ba0e...237257 )
by Asif
51s
created

TableBuilder.generate_table()   B

Complexity

Conditions 2

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 26
rs 8.8571
cc 2
1
import django_tables2 as tables
2
from django_tables2.utils import A
3
4
from crudbuilder.abstract import BaseBuilder
5
from crudbuilder.helpers import (
6
    model_class_form,
7
    plural,
8
    custom_postfix_url
9
)
10
11
12
class TableBuilder(BaseBuilder):
13
    """
14
    Table builder which returns django_tables2 instance
15
    app : app name
16
    model : model name for which table will be generated
17
    table_fields : display fields for tables2 class
18
    css_table : css class for generated tables2 class
19
    """
20
    def generate_table(self):
21
        model_class = self.get_model_class()
22
23
        detail_url_name = '{}-{}-detail'.format(
24
            self.app, custom_postfix_url(self.crud(), self.model)
25
        )
26
27
        main_attrs = dict(
28
            id=tables.LinkColumn(detail_url_name, args=[A('pk')])
29
        )
30
31
        meta_attrs = dict(
32
            model=model_class,
33
            fields=('id',) + self.tables2_fields if self.tables2_fields else ('id',),
34
            attrs={
35
                "class": self.tables2_css_class,
36
                "empty_text": "No {} exist".format(plural(self.model))
37
            })
38
39
        main_attrs['Meta'] = type('Meta', (), meta_attrs)
40
        klass = type(
41
            model_class_form(self.model + 'Table'),
42
            (tables.Table,),
43
            main_attrs
44
        )
45
        return klass
46