Ejemplo n.º 1
0
 def test_factory(self):
     occupation = Occupation.objects.create(name='Programmer')
     Person.objects.create(first_name='Bradley', last_name='Ayers', occupation=occupation)
     persons = Person.objects.all()
     Table = tables.table_factory(Person)
     table = Table(persons)
     self.assertIsInstance(table, tables.Table)
     self.assertEqual(Table.__name__, 'PersonTable')
Ejemplo n.º 2
0
 def test_factory(self):
     occupation = Occupation.objects.create(name="Programmer")
     Person.objects.create(first_name="Bradley", last_name="Ayers", occupation=occupation)
     persons = Person.objects.all()
     Table = tables.table_factory(Person)
     table = Table(persons)
     self.assertIsInstance(table, tables.Table)
     self.assertEqual(Table.__name__, "PersonTable")
Ejemplo n.º 3
0
 def test_factory(self):
     occupation = Occupation.objects.create(name="Programmer")
     Person.objects.create(first_name="Bradley", last_name="Ayers", occupation=occupation)
     persons = Person.objects.all()
     Table = tables.table_factory(Person)
     table = Table(persons)
     self.assertIsInstance(table, tables.Table)
     self.assertEqual(Table.__name__, "PersonAutogeneratedTable")
Ejemplo n.º 4
0
    def test_factory_with_meta(self):
        fields = ("first_name",)

        class TableWithMeta(tables.Table):
            first_name = tables.Column()

            class Meta:
                fields = ("first_name",)

        Table = tables.table_factory(Person, table=TableWithMeta)
        self.assertEqual(Table.Meta.fields, fields)
Ejemplo n.º 5
0
    def test_factory_with_meta(self):
        fields = ('first_name',)

        class TableWithMeta(tables.Table):
            first_name = tables.Column()

            class Meta:
                fields = ('first_name',)

        Table = tables.table_factory(Person, table=TableWithMeta)
        self.assertEqual(Table.Meta.fields, fields)
Ejemplo n.º 6
0
    def render(self, context):
        table = self.table.resolve(context)

        request = context.get('request')

        if isinstance(table, tables.TableBase):
            pass
        elif hasattr(table, 'model'):
            queryset = table

            table = tables.table_factory(model=queryset.model)(queryset,
                                                               request=request)
        else:
            klass = type(table).__name__
            raise ValueError(
                'Expected table or queryset, not {}'.format(klass))

        if self.template_name:
            template_name = self.template_name.resolve(context)
        else:
            template_name = table.template_name

        if isinstance(template_name, six.string_types):
            template = get_template(template_name)
        else:
            # assume some iterable was given
            template = select_template(template_name)

        # Contexts are basically a `MergeDict`, when you `update()`, it
        # internally just adds a dict to the list to attempt lookups from. This
        # is why we're able to `pop()` later.
        context.update({'table': table})
        try:
            # HACK:
            # TemplateColumn benefits from being able to use the context
            # that the table is rendered in. The current way this is
            # achieved is to temporarily attach the context to the table,
            # which TemplateColumn then looks for and uses.
            table.context = context
            table.before_render(request)
            return template.render(context.flatten())
        finally:
            del table.context
            context.pop()
Ejemplo n.º 7
0
    def render(self, context):
        table = self.table.resolve(context)

        request = context.get('request')

        if isinstance(table, tables.TableBase):
            pass
        elif hasattr(table, 'model'):
            queryset = table

            table = tables.table_factory(model=queryset.model)(queryset,
                                                               request=request)
        else:
            klass = type(table).__name__
            raise ValueError(
                'Expected table or queryset, not {}'.format(klass))

        if self.template_name:
            template_name = self.template_name.resolve(context)
        else:
            template_name = table.template_name

        if isinstance(template_name, six.string_types):
            template = get_template(template_name)
        else:
            # assume some iterable was given
            template = select_template(template_name)

        try:
            # HACK:
            # TemplateColumn benefits from being able to use the context
            # that the table is rendered in. The current way this is
            # achieved is to temporarily attach the context to the table,
            # which TemplateColumn then looks for and uses.
            table.context = context
            table.before_render(request)
            return template.render({
                'request': context['request'],
                'table': table
            })
        finally:
            del table.context
Ejemplo n.º 8
0
    def render(self, context):
        table = self.table.resolve(context)

        request = context.get("request")

        if isinstance(table, tables.TableBase):
            pass
        elif hasattr(table, "model"):
            queryset = table

            table = tables.table_factory(model=queryset.model)(queryset, request=request)
        else:
            klass = type(table).__name__
            raise ValueError("Expected table or queryset, not {}".format(klass))

        if self.template_name:
            template_name = self.template_name.resolve(context)
        else:
            template_name = table.template_name

        if isinstance(template_name, six.string_types):
            template = get_template(template_name)
        else:
            # assume some iterable was given
            template = select_template(template_name)

        try:
            # HACK:
            # TemplateColumn benefits from being able to use the context
            # that the table is rendered in. The current way this is
            # achieved is to temporarily attach the context to the table,
            # which TemplateColumn then looks for and uses.
            table.context = context
            table.before_render(request)

            return template.render(context={"table": table}, request=request)
        finally:
            del table.context
Ejemplo n.º 9
0
 def test_factory_localize_argument(self):
     localize = ("username",)
     Table = tables.table_factory(Person, localize=localize)
     self.assertEqual(Table.Meta.localize, localize)
     self.assertEqual(Table._meta.localize, localize)
Ejemplo n.º 10
0
 def test_factory_exclude_argument(self):
     exclude = ("username",)
     Table = tables.table_factory(Person, exclude=exclude)
     self.assertEqual(Table.Meta.exclude, exclude)
     self.assertEqual(Table._meta.exclude, exclude)
Ejemplo n.º 11
0
 def test_factory_fields_argument(self):
     fields = ("username",)
     Table = tables.table_factory(Person, fields=fields)
     self.assertEqual(Table.Meta.fields, fields)
     self.assertEqual(Table._meta.fields, fields)
Ejemplo n.º 12
0
 def test_factory_localize_argument(self):
     localize = ('username',)
     Table = tables.table_factory(Person, localize=localize)
     self.assertEqual(Table.Meta.localize, localize)
     self.assertEqual(Table._meta.localize, localize)
Ejemplo n.º 13
0
 def test_factory_exclude_argument(self):
     exclude = ('username',)
     Table = tables.table_factory(Person, exclude=exclude)
     self.assertEqual(Table.Meta.exclude, exclude)
     self.assertEqual(Table._meta.exclude, exclude)
Ejemplo n.º 14
0
 def test_factory_fields_argument(self):
     fields = ('username',)
     Table = tables.table_factory(Person, fields=fields)
     self.assertEqual(Table.Meta.fields, fields)
     self.assertEqual(Table._meta.fields, fields)
Ejemplo n.º 15
0
 def get_table(self, **kwargs) -> tables.Table:
     """Produce a generic table for a given model, excluding a couple common fields"""
     model = self.model_map.get(self.kwargs.get('model_name'), models.Institution)
     table_class = tables.table_factory(model=model, exclude=['id', 'batch'])
     return table_class(data=model.objects.filter(batch=self.object))