Coverage for apis_core/history/tables.py: 87%

38 statements  

« prev     ^ index     » next       coverage.py v7.5.3, created at 2026-03-06 11:42 +0000

1import django_tables2 as tables 

2from django.apps import apps 

3 

4from apis_core.generic.tables import ActionColumn, CustomTemplateColumn 

5 

6 

7class DescriptionColumnHistory(CustomTemplateColumn): 

8 """ 

9 A column showing a model description 

10 """ 

11 

12 template_name = "history/columns/description.html" 

13 orderable = False 

14 

15 

16class OriginalIDColumn(CustomTemplateColumn): 

17 """ 

18 A column showing the original id of a model instance 

19 """ 

20 

21 template_name = "history/columns/original_id.html" 

22 orderable = False 

23 verbose_name = "Original ID" 

24 

25 

26class ResetColumn(ActionColumn): 

27 """ 

28 A column showing a reset button 

29 """ 

30 

31 template_name = "history/columns/reset.html" 

32 permission = "change" 

33 

34 

35class ViewColumn(ActionColumn): 

36 """ 

37 A column showing a view button 

38 """ 

39 

40 template_name = "columns/view.html" 

41 permission = "view" 

42 

43 

44class APISHistoryTableBaseTable(tables.Table): 

45 history_id = tables.Column(verbose_name="ID") 

46 original_id = OriginalIDColumn() 

47 desc = DescriptionColumnHistory() 

48 view = ViewColumn() 

49 

50 class Meta: 

51 fields = ["history_id", "desc", "most_recent", "view"] 

52 

53 

54class HistoryGenericTable(tables.Table): 

55 model = tables.Column(empty_values=()) 

56 fields_changed = tables.Column(empty_values=()) 

57 instance = tables.Column(linkify=lambda record: record.get_absolute_url()) 

58 fields_changed = tables.TemplateColumn( 

59 template_name="history/columns/fields_changed.html" 

60 ) 

61 reset = ResetColumn() 

62 

63 class Meta: 

64 fields = [ 

65 "model", 

66 "instance", 

67 "fields_changed", 

68 "history_type", 

69 "history_date", 

70 "history_user", 

71 ] 

72 

73 def render_model(self, record): 

74 return record.instance.__class__.__name__ 

75 

76 def __init__(self, *args, **kwargs): 

77 if apps.is_installed("apis_core.collections"): 

78 from apis_core.collections.columns import CollectionsColumn 

79 

80 kwargs["extra_columns"] = [("collections", CollectionsColumn())] 

81 super().__init__(*args, **kwargs)