Coverage for circuits/tables/circuits.py: 100%

67 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1import django_tables2 as tables 

2from django.utils.translation import gettext_lazy as _ 

3 

4from circuits.models import * 

5from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns 

6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin 

7 

8from .columns import CommitRateColumn 

9 

10__all__ = ( 

11 'CircuitGroupAssignmentTable', 

12 'CircuitGroupTable', 

13 'CircuitTable', 

14 'CircuitTerminationTable', 

15 'CircuitTypeTable', 

16) 

17 

18 

19CIRCUITTERMINATION_LINK = """ 

20{% if value.termination %} 

21 <a href="{{ value.termination.get_absolute_url }}">{{ value.termination }}</a> 

22{% endif %} 

23""" 

24 

25 

26class CircuitTypeTable(OrganizationalModelTable): 

27 name = tables.Column( 

28 linkify=True, 

29 verbose_name=_('Name'), 

30 ) 

31 color = columns.ColorColumn() 

32 tags = columns.TagColumn( 

33 url_name='circuits:circuittype_list' 

34 ) 

35 circuit_count = columns.LinkedCountColumn( 

36 viewname='circuits:circuit_list', 

37 url_params={'type_id': 'pk'}, 

38 verbose_name=_('Circuits') 

39 ) 

40 

41 class Meta(OrganizationalModelTable.Meta): 

42 model = CircuitType 

43 fields = ( 

44 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'comments', 'tags', 'created', 

45 'last_updated', 'actions', 

46 ) 

47 default_columns = ('pk', 'name', 'circuit_count', 'color', 'description') 

48 

49 

50class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable): 

51 cid = tables.Column( 

52 linkify=True, 

53 verbose_name=_('Circuit ID') 

54 ) 

55 provider = tables.Column( 

56 verbose_name=_('Provider'), 

57 linkify=True 

58 ) 

59 provider_account = tables.Column( 

60 linkify=True, 

61 verbose_name=_('Account') 

62 ) 

63 type = columns.ColoredLabelColumn( 

64 verbose_name=_('Type'), 

65 ) 

66 status = columns.ChoiceFieldColumn() 

67 termination_a = columns.TemplateColumn( 

68 template_code=CIRCUITTERMINATION_LINK, 

69 orderable=False, 

70 verbose_name=_('Side A') 

71 ) 

72 termination_z = columns.TemplateColumn( 

73 template_code=CIRCUITTERMINATION_LINK, 

74 orderable=False, 

75 verbose_name=_('Side Z') 

76 ) 

77 commit_rate = CommitRateColumn( 

78 verbose_name=_('Commit Rate') 

79 ) 

80 distance = columns.DistanceColumn() 

81 tags = columns.TagColumn( 

82 url_name='circuits:circuit_list' 

83 ) 

84 assignments = columns.ManyToManyColumn( 

85 verbose_name=_('Assignments'), 

86 linkify_item=True 

87 ) 

88 

89 class Meta(PrimaryModelTable.Meta): 

90 model = Circuit 

91 fields = ( 

92 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group', 

93 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description', 

94 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments', 

95 ) 

96 default_columns = ( 

97 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description', 

98 ) 

99 

100 

101class CircuitTerminationTable(NetBoxTable): 

102 circuit = tables.Column( 

103 verbose_name=_('Circuit'), 

104 linkify=True 

105 ) 

106 provider = tables.Column( 

107 verbose_name=_('Provider'), 

108 linkify=True, 

109 accessor='circuit__provider' 

110 ) 

111 term_side = tables.Column( 

112 verbose_name=_('Side') 

113 ) 

114 termination_type = columns.ContentTypeColumn( 

115 verbose_name=_('Termination Type'), 

116 ) 

117 termination = tables.Column( 

118 verbose_name=_('Termination Point'), 

119 linkify=True, 

120 orderable=False, 

121 ) 

122 

123 # Termination types 

124 site = tables.Column( 

125 verbose_name=_('Site'), 

126 linkify=True, 

127 accessor='_site' 

128 ) 

129 site_group = tables.Column( 

130 verbose_name=_('Site Group'), 

131 linkify=True, 

132 accessor='_site_group' 

133 ) 

134 region = tables.Column( 

135 verbose_name=_('Region'), 

136 linkify=True, 

137 accessor='_region' 

138 ) 

139 location = tables.Column( 

140 verbose_name=_('Location'), 

141 linkify=True, 

142 accessor='_location' 

143 ) 

144 provider_network = tables.Column( 

145 verbose_name=_('Provider Network'), 

146 linkify=True, 

147 accessor='_provider_network' 

148 ) 

149 

150 class Meta(NetBoxTable.Meta): 

151 model = CircuitTermination 

152 fields = ( 

153 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'site_group', 'region', 

154 'site', 'location', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 

155 'description', 'created', 'last_updated', 'actions', 

156 ) 

157 default_columns = ( 

158 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'description', 

159 ) 

160 

161 

162class CircuitGroupTable(TenancyColumnsMixin, OrganizationalModelTable): 

163 name = tables.Column( 

164 verbose_name=_('Name'), 

165 linkify=True 

166 ) 

167 circuit_group_assignment_count = columns.LinkedCountColumn( 

168 viewname='circuits:circuitgroupassignment_list', 

169 url_params={'group_id': 'pk'}, 

170 verbose_name=_('Circuits') 

171 ) 

172 tags = columns.TagColumn( 

173 url_name='circuits:circuitgroup_list' 

174 ) 

175 

176 class Meta(OrganizationalModelTable.Meta): 

177 model = CircuitGroup 

178 fields = ( 

179 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tenant', 'tenant_group', 'comments', 

180 'tags', 'created', 'last_updated', 'actions', 

181 ) 

182 default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count') 

183 

184 

185class CircuitGroupAssignmentTable(NetBoxTable): 

186 group = tables.Column( 

187 verbose_name=_('Group'), 

188 linkify=True 

189 ) 

190 provider = tables.Column( 

191 accessor='member__provider', 

192 verbose_name=_('Provider'), 

193 orderable=False, 

194 linkify=True, 

195 ) 

196 member_type = columns.ContentTypeColumn( 

197 verbose_name=_('Type') 

198 ) 

199 member = tables.Column( 

200 verbose_name=_('Circuit'), 

201 orderable=False, 

202 linkify=True, 

203 ) 

204 priority = tables.Column( 

205 verbose_name=_('Priority'), 

206 ) 

207 tags = columns.TagColumn( 

208 url_name='circuits:circuitgroupassignment_list' 

209 ) 

210 

211 class Meta(NetBoxTable.Meta): 

212 model = CircuitGroupAssignment 

213 fields = ( 

214 'pk', 'id', 'group', 'provider', 'member_type', 'member', 'priority', 'created', 'last_updated', 'actions', 

215 'tags', 

216 ) 

217 default_columns = ('pk', 'group', 'provider', 'member_type', 'member', 'priority')