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')
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")
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")
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)
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)
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()
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
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
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)
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)
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)
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)
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)
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)
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))