Coverage for tenancy/tables/contacts.py: 100%

49 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 _ 

3from django_tables2.utils import Accessor 

4 

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

6from tenancy.models import * 

7from utilities.tables import linkify_phone 

8 

9__all__ = ( 

10 'ContactAssignmentTable', 

11 'ContactGroupTable', 

12 'ContactRoleTable', 

13 'ContactTable', 

14) 

15 

16 

17class ContactGroupTable(NestedGroupModelTable): 

18 contact_count = columns.LinkedCountColumn( 

19 viewname='tenancy:contact_list', 

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

21 verbose_name=_('Contacts') 

22 ) 

23 tags = columns.TagColumn( 

24 url_name='tenancy:contactgroup_list' 

25 ) 

26 

27 class Meta(NestedGroupModelTable.Meta): 

28 model = ContactGroup 

29 fields = ( 

30 'pk', 'name', 'parent', 'contact_count', 'description', 'comments', 'slug', 'tags', 'created', 

31 'last_updated', 'actions', 

32 ) 

33 default_columns = ('pk', 'name', 'contact_count', 'description') 

34 

35 

36class ContactRoleTable(OrganizationalModelTable): 

37 name = tables.Column( 

38 verbose_name=_('Name'), 

39 linkify=True 

40 ) 

41 tags = columns.TagColumn( 

42 url_name='tenancy:contactrole_list' 

43 ) 

44 

45 class Meta(OrganizationalModelTable.Meta): 

46 model = ContactRole 

47 fields = ('pk', 'name', 'description', 'comments', 'slug', 'tags', 'created', 'last_updated', 'actions') 

48 default_columns = ('pk', 'name', 'description') 

49 

50 

51class ContactTable(PrimaryModelTable): 

52 name = tables.Column( 

53 verbose_name=_('Name'), 

54 linkify=True 

55 ) 

56 groups = columns.ManyToManyColumn( 

57 verbose_name=_('Groups'), 

58 linkify_item=('tenancy:contactgroup', {'pk': tables.A('pk')}) 

59 ) 

60 phone = tables.Column( 

61 verbose_name=_('Phone'), 

62 linkify=linkify_phone, 

63 ) 

64 assignment_count = columns.LinkedCountColumn( 

65 viewname='tenancy:contactassignment_list', 

66 url_params={'contact_id': 'pk'}, 

67 verbose_name=_('Assignments') 

68 ) 

69 tags = columns.TagColumn( 

70 url_name='tenancy:contact_list' 

71 ) 

72 

73 class Meta(PrimaryModelTable.Meta): 

74 model = Contact 

75 fields = ( 

76 'pk', 'name', 'groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments', 

77 'assignment_count', 'tags', 'created', 'last_updated', 

78 ) 

79 default_columns = ('pk', 'name', 'groups', 'assignment_count', 'title', 'phone', 'email') 

80 

81 

82class ContactAssignmentTable(NetBoxTable): 

83 object_type = columns.ContentTypeColumn( 

84 verbose_name=_('Object Type') 

85 ) 

86 object = tables.Column( 

87 verbose_name=_('Object'), 

88 linkify=True, 

89 orderable=False 

90 ) 

91 contact = tables.Column( 

92 verbose_name=_('Contact'), 

93 linkify=True 

94 ) 

95 role = tables.Column( 

96 verbose_name=_('Role'), 

97 linkify=True 

98 ) 

99 contact_groups = columns.ManyToManyColumn( 

100 accessor=Accessor('contact__groups'), 

101 verbose_name=_('Groups'), 

102 linkify_item=('tenancy:contactgroup', {'pk': tables.A('pk')}) 

103 ) 

104 contact_title = tables.Column( 

105 accessor=Accessor('contact__title'), 

106 verbose_name=_('Contact Title') 

107 ) 

108 contact_phone = tables.Column( 

109 accessor=Accessor('contact__phone'), 

110 verbose_name=_('Contact Phone'), 

111 linkify=linkify_phone, 

112 ) 

113 contact_email = tables.EmailColumn( 

114 accessor=Accessor('contact__email'), 

115 verbose_name=_('Contact Email'), 

116 ) 

117 contact_address = tables.Column( 

118 accessor=Accessor('contact__address'), 

119 verbose_name=_('Contact Address') 

120 ) 

121 contact_link = tables.Column( 

122 accessor=Accessor('contact__link'), 

123 verbose_name=_('Contact Link'), 

124 linkify=lambda value: value, 

125 ) 

126 contact_description = tables.Column( 

127 accessor=Accessor('contact__description'), 

128 verbose_name=_('Contact Description') 

129 ) 

130 tags = columns.TagColumn( 

131 url_name='tenancy:contactassignment_list' 

132 ) 

133 actions = columns.ActionsColumn( 

134 actions=('edit', 'delete') 

135 ) 

136 

137 class Meta(NetBoxTable.Meta): 

138 model = ContactAssignment 

139 fields = ( 

140 'pk', 'object_type', 'object', 'contact', 'role', 'priority', 'contact_title', 'contact_phone', 

141 'contact_email', 'contact_address', 'contact_link', 'contact_description', 'contact_groups', 'tags', 

142 'actions' 

143 ) 

144 default_columns = ( 

145 'pk', 'object_type', 'object', 'contact', 'role', 'priority', 'contact_email', 'contact_phone' 

146 )