Coverage for tenancy/forms/bulk_import.py: 100%

40 statements  

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

1from django import forms 

2from django.contrib.contenttypes.models import ContentType 

3from django.utils.translation import gettext_lazy as _ 

4 

5from netbox.forms import ( 

6 NestedGroupModelImportForm, 

7 NetBoxModelImportForm, 

8 OrganizationalModelImportForm, 

9 PrimaryModelImportForm, 

10) 

11from utilities.forms.fields import CSVContentTypeField, CSVModelChoiceField, CSVModelMultipleChoiceField, SlugField 

12 

13from ..models import * 

14 

15__all__ = ( 

16 'ContactAssignmentImportForm', 

17 'ContactGroupImportForm', 

18 'ContactImportForm', 

19 'ContactRoleImportForm', 

20 'TenantGroupImportForm', 

21 'TenantImportForm', 

22) 

23 

24 

25# 

26# Tenants 

27# 

28 

29class TenantGroupImportForm(NestedGroupModelImportForm): 

30 parent = CSVModelChoiceField( 

31 label=_('Parent'), 

32 queryset=TenantGroup.objects.all(), 

33 required=False, 

34 to_field_name='name', 

35 help_text=_('Parent group'), 

36 ) 

37 

38 class Meta: 

39 model = TenantGroup 

40 fields = ('name', 'slug', 'parent', 'description', 'owner', 'comments', 'tags') 

41 

42 

43class TenantImportForm(PrimaryModelImportForm): 

44 slug = SlugField() 

45 group = CSVModelChoiceField( 

46 label=_('Group'), 

47 queryset=TenantGroup.objects.all(), 

48 required=False, 

49 to_field_name='name', 

50 help_text=_('Assigned group'), 

51 ) 

52 

53 class Meta: 

54 model = Tenant 

55 fields = ('name', 'slug', 'group', 'description', 'owner', 'comments', 'tags') 

56 

57 

58# 

59# Contacts 

60# 

61 

62class ContactGroupImportForm(NestedGroupModelImportForm): 

63 parent = CSVModelChoiceField( 

64 label=_('Parent'), 

65 queryset=ContactGroup.objects.all(), 

66 required=False, 

67 to_field_name='name', 

68 help_text=_('Parent group'), 

69 ) 

70 

71 class Meta: 

72 model = ContactGroup 

73 fields = ('name', 'slug', 'parent', 'description', 'owner', 'comments', 'tags') 

74 

75 

76class ContactRoleImportForm(OrganizationalModelImportForm): 

77 

78 class Meta: 

79 model = ContactRole 

80 fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags') 

81 

82 

83class ContactImportForm(PrimaryModelImportForm): 

84 groups = CSVModelMultipleChoiceField( 

85 queryset=ContactGroup.objects.all(), 

86 required=False, 

87 to_field_name='name', 

88 help_text=_('Group names separated by commas, encased with double quotes (e.g. "Group 1,Group 2")'), 

89 ) 

90 link = forms.URLField( 

91 label=_('Link'), 

92 assume_scheme='https', 

93 required=False, 

94 ) 

95 

96 class Meta: 

97 model = Contact 

98 fields = ( 

99 'name', 'title', 'phone', 'email', 'address', 'link', 'groups', 'description', 'owner', 'comments', 'tags', 

100 ) 

101 

102 

103class ContactAssignmentImportForm(NetBoxModelImportForm): 

104 object_type = CSVContentTypeField( 

105 queryset=ContentType.objects.all(), 

106 help_text=_("One or more assigned object types") 

107 ) 

108 contact = CSVModelChoiceField( 

109 queryset=Contact.objects.all(), 

110 to_field_name='name', 

111 help_text=_('Assigned contact') 

112 ) 

113 role = CSVModelChoiceField( 

114 queryset=ContactRole.objects.all(), 

115 to_field_name='name', 

116 help_text=_('Assigned role') 

117 ) 

118 

119 class Meta: 

120 model = ContactAssignment 

121 fields = ('object_type', 'object_id', 'contact', 'priority', 'role')