Coverage for  / home / runner / work / netbox-data-import-plugin / netbox-data-import-plugin / netbox-data-import-plugin / netbox_data_import / tables.py: 100%

48 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-01 12:13 +0000

1# SPDX-License-Identifier: Apache-2.0 

2# Copyright (C) 2025 Marcin Zieba <marcinpsk@gmail.com> 

3import django_tables2 as tables 

4from netbox.tables import NetBoxTable, columns 

5from .models import ImportProfile, ColumnMapping, ClassRoleMapping, DeviceTypeMapping, ColumnTransformRule 

6 

7 

8class ImportProfileTable(NetBoxTable): 

9 """Table for listing ImportProfile objects.""" 

10 

11 name = tables.Column(linkify=True) 

12 sheet_name = tables.Column() 

13 column_mappings = tables.Column( 

14 accessor="column_mappings.count", 

15 verbose_name="Columns", 

16 orderable=False, 

17 ) 

18 class_role_mappings = tables.Column( 

19 accessor="class_role_mappings.count", 

20 verbose_name="Class Mappings", 

21 orderable=False, 

22 ) 

23 device_type_mappings = tables.Column( 

24 accessor="device_type_mappings.count", 

25 verbose_name="DT Mappings", 

26 orderable=False, 

27 ) 

28 actions = columns.ActionsColumn(actions=("edit", "delete")) 

29 

30 class Meta(NetBoxTable.Meta): 

31 model = ImportProfile 

32 fields = ( 

33 "pk", 

34 "name", 

35 "sheet_name", 

36 "update_existing", 

37 "create_missing_device_types", 

38 "column_mappings", 

39 "class_role_mappings", 

40 "device_type_mappings", 

41 "actions", 

42 ) 

43 default_columns = ( 

44 "name", 

45 "sheet_name", 

46 "column_mappings", 

47 "class_role_mappings", 

48 "device_type_mappings", 

49 "actions", 

50 ) 

51 

52 

53class ColumnMappingTable(tables.Table): 

54 """Table for displaying ColumnMapping objects inline on the profile detail page.""" 

55 

56 source_column = tables.Column() 

57 target_field = tables.Column() 

58 actions = tables.TemplateColumn( 

59 template_code=""" 

60 <a href="{% url 'plugins:netbox_data_import:columnmapping_edit' record.pk %}" class="btn btn-sm btn-warning"> 

61 <i class="mdi mdi-pencil"></i> 

62 </a> 

63 <a href="{% url 'plugins:netbox_data_import:columnmapping_delete' record.pk %}" class="btn btn-sm btn-danger"> 

64 <i class="mdi mdi-trash-can-outline"></i> 

65 </a> 

66 """, 

67 verbose_name="", 

68 orderable=False, 

69 ) 

70 

71 class Meta: 

72 model = ColumnMapping 

73 fields = ("source_column", "target_field", "actions") 

74 

75 

76class ClassRoleMappingTable(tables.Table): 

77 """Table for displaying ClassRoleMapping objects inline on the profile detail page.""" 

78 

79 source_class = tables.Column() 

80 creates_rack = tables.BooleanColumn() 

81 role_slug = tables.Column() 

82 ignore = tables.BooleanColumn() 

83 actions = tables.TemplateColumn( 

84 template_code=""" 

85 <a href="{% url 'plugins:netbox_data_import:classrolemapping_edit' record.pk %}" class="btn btn-sm btn-warning"> 

86 <i class="mdi mdi-pencil"></i> 

87 </a> 

88 <a href="{% url 'plugins:netbox_data_import:classrolemapping_delete' record.pk %}" class="btn btn-sm btn-danger"> 

89 <i class="mdi mdi-trash-can-outline"></i> 

90 </a> 

91 """, 

92 verbose_name="", 

93 orderable=False, 

94 ) 

95 

96 class Meta: 

97 model = ClassRoleMapping 

98 fields = ("source_class", "creates_rack", "role_slug", "ignore", "actions") 

99 

100 

101class DeviceTypeMappingTable(tables.Table): 

102 """Table for displaying DeviceTypeMapping objects inline on the profile detail page.""" 

103 

104 source_make = tables.Column() 

105 source_model = tables.Column() 

106 netbox_manufacturer_slug = tables.Column() 

107 netbox_device_type_slug = tables.Column() 

108 actions = tables.TemplateColumn( 

109 template_code=""" 

110 <a href="{% url 'plugins:netbox_data_import:devicetypemapping_edit' record.pk %}" class="btn btn-sm btn-warning"> 

111 <i class="mdi mdi-pencil"></i> 

112 </a> 

113 <a href="{% url 'plugins:netbox_data_import:devicetypemapping_delete' record.pk %}" class="btn btn-sm btn-danger"> 

114 <i class="mdi mdi-trash-can-outline"></i> 

115 </a> 

116 """, 

117 verbose_name="", 

118 orderable=False, 

119 ) 

120 

121 class Meta: 

122 model = DeviceTypeMapping 

123 fields = ( 

124 "source_make", 

125 "source_model", 

126 "netbox_manufacturer_slug", 

127 "netbox_device_type_slug", 

128 "actions", 

129 ) 

130 

131 

132class ColumnTransformRuleTable(tables.Table): 

133 """Table for displaying ColumnTransformRule objects inline on the profile detail page.""" 

134 

135 source_column = tables.Column() 

136 pattern = tables.Column() 

137 group_1_target = tables.Column() 

138 group_2_target = tables.Column() 

139 actions = tables.TemplateColumn( 

140 template_code=""" 

141 <a href="{% url 'plugins:netbox_data_import:columntransformrule_edit' record.pk %}" class="btn btn-sm btn-warning"> 

142 <i class="mdi mdi-pencil"></i> 

143 </a> 

144 <a href="{% url 'plugins:netbox_data_import:columntransformrule_delete' record.pk %}" class="btn btn-sm btn-danger"> 

145 <i class="mdi mdi-trash-can-outline"></i> 

146 </a> 

147 """, 

148 verbose_name="", 

149 orderable=False, 

150 ) 

151 

152 class Meta: 

153 model = ColumnTransformRule 

154 fields = ("source_column", "pattern", "group_1_target", "group_2_target", "actions")