netbox-plugin-dns 0.21.4__py3-none-any.whl → 1.4.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. netbox_dns/__init__.py +106 -41
  2. netbox_dns/api/field_serializers.py +25 -0
  3. netbox_dns/api/nested_serializers.py +95 -52
  4. netbox_dns/api/serializers.py +14 -296
  5. netbox_dns/api/serializers_/__init__.py +0 -0
  6. netbox_dns/api/serializers_/dnssec_key_template.py +69 -0
  7. netbox_dns/api/serializers_/dnssec_policy.py +165 -0
  8. netbox_dns/api/serializers_/nameserver.py +56 -0
  9. netbox_dns/api/serializers_/prefix.py +18 -0
  10. netbox_dns/api/serializers_/record.py +105 -0
  11. netbox_dns/api/serializers_/record_template.py +71 -0
  12. netbox_dns/api/serializers_/registrar.py +45 -0
  13. netbox_dns/api/serializers_/registration_contact.py +50 -0
  14. netbox_dns/api/serializers_/view.py +81 -0
  15. netbox_dns/api/serializers_/zone.py +247 -0
  16. netbox_dns/api/serializers_/zone_template.py +157 -0
  17. netbox_dns/api/urls.py +13 -2
  18. netbox_dns/api/views.py +96 -58
  19. netbox_dns/choices/__init__.py +4 -0
  20. netbox_dns/choices/dnssec_key_template.py +67 -0
  21. netbox_dns/choices/dnssec_policy.py +40 -0
  22. netbox_dns/choices/record.py +104 -0
  23. netbox_dns/choices/utilities.py +4 -0
  24. netbox_dns/choices/zone.py +119 -0
  25. netbox_dns/fields/__init__.py +4 -0
  26. netbox_dns/fields/address.py +22 -16
  27. netbox_dns/fields/choice_array.py +33 -0
  28. netbox_dns/fields/ipam.py +15 -0
  29. netbox_dns/fields/network.py +42 -18
  30. netbox_dns/fields/rfc2317.py +97 -0
  31. netbox_dns/fields/timeperiod.py +33 -0
  32. netbox_dns/filters.py +7 -0
  33. netbox_dns/filtersets/__init__.py +12 -0
  34. netbox_dns/filtersets/dnssec_key_template.py +57 -0
  35. netbox_dns/filtersets/dnssec_policy.py +101 -0
  36. netbox_dns/filtersets/nameserver.py +46 -0
  37. netbox_dns/filtersets/record.py +135 -0
  38. netbox_dns/filtersets/record_template.py +59 -0
  39. netbox_dns/{filters → filtersets}/registrar.py +8 -1
  40. netbox_dns/{filters/contact.py → filtersets/registration_contact.py} +9 -3
  41. netbox_dns/filtersets/view.py +45 -0
  42. netbox_dns/filtersets/zone.py +254 -0
  43. netbox_dns/filtersets/zone_template.py +165 -0
  44. netbox_dns/forms/__init__.py +5 -1
  45. netbox_dns/forms/dnssec_key_template.py +250 -0
  46. netbox_dns/forms/dnssec_policy.py +654 -0
  47. netbox_dns/forms/nameserver.py +121 -27
  48. netbox_dns/forms/record.py +215 -104
  49. netbox_dns/forms/record_template.py +285 -0
  50. netbox_dns/forms/registrar.py +108 -31
  51. netbox_dns/forms/registration_contact.py +282 -0
  52. netbox_dns/forms/view.py +331 -20
  53. netbox_dns/forms/zone.py +769 -373
  54. netbox_dns/forms/zone_template.py +463 -0
  55. netbox_dns/graphql/__init__.py +25 -22
  56. netbox_dns/graphql/enums.py +41 -0
  57. netbox_dns/graphql/filter_lookups.py +13 -0
  58. netbox_dns/graphql/filters/__init__.py +12 -0
  59. netbox_dns/graphql/filters/dnssec_key_template.py +63 -0
  60. netbox_dns/graphql/filters/dnssec_policy.py +124 -0
  61. netbox_dns/graphql/filters/nameserver.py +32 -0
  62. netbox_dns/graphql/filters/record.py +89 -0
  63. netbox_dns/graphql/filters/record_template.py +55 -0
  64. netbox_dns/graphql/filters/registrar.py +30 -0
  65. netbox_dns/graphql/filters/registration_contact.py +27 -0
  66. netbox_dns/graphql/filters/view.py +28 -0
  67. netbox_dns/graphql/filters/zone.py +147 -0
  68. netbox_dns/graphql/filters/zone_template.py +97 -0
  69. netbox_dns/graphql/schema.py +89 -7
  70. netbox_dns/graphql/types.py +355 -0
  71. netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  72. netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  73. netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
  74. netbox_dns/management/commands/cleanup_database.py +175 -156
  75. netbox_dns/management/commands/cleanup_rrset_ttl.py +64 -0
  76. netbox_dns/management/commands/rebuild_dnssync.py +23 -0
  77. netbox_dns/management/commands/setup_dnssync.py +140 -0
  78. netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -27
  79. netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +557 -0
  80. netbox_dns/migrations/{0013_add_nameserver_zone_record_description.py → 0002_contact_description_registrar_description.py} +4 -9
  81. netbox_dns/migrations/0003_default_view.py +15 -0
  82. netbox_dns/migrations/0004_create_and_assign_default_view.py +26 -0
  83. netbox_dns/migrations/0005_alter_zone_view_not_null.py +18 -0
  84. netbox_dns/migrations/0006_templating.py +172 -0
  85. netbox_dns/migrations/0007_alter_ordering_options.py +25 -0
  86. netbox_dns/migrations/0008_view_prefixes.py +18 -0
  87. netbox_dns/migrations/0009_rename_contact_registrationcontact.py +36 -0
  88. netbox_dns/migrations/0010_view_ip_address_filter.py +18 -0
  89. netbox_dns/migrations/0011_rename_related_fields.py +63 -0
  90. netbox_dns/migrations/0012_natural_ordering.py +88 -0
  91. netbox_dns/migrations/0013_zonetemplate_soa_mname_zonetemplate_soa_rname.py +30 -0
  92. netbox_dns/migrations/0014_alter_unique_constraints_lowercase.py +42 -0
  93. netbox_dns/migrations/0015_dnssec.py +168 -0
  94. netbox_dns/migrations/{0015_add_record_status.py → 0016_dnssec_policy_status.py} +5 -4
  95. netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +41 -0
  96. netbox_dns/migrations/0018_zone_domain_status_zone_expiration_date.py +23 -0
  97. netbox_dns/migrations/0019_dnssecpolicy_parental_agents.py +25 -0
  98. netbox_dns/migrations/0020_netbox_3_4.py +1 -1
  99. netbox_dns/migrations/0020_remove_dnssecpolicy_parental_agents_and_more.py +29 -0
  100. netbox_dns/migrations/0021_alter_record_ptr_record.py +25 -0
  101. netbox_dns/migrations/0021_record_ip_address.py +1 -1
  102. netbox_dns/migrations/0022_alter_record_ipam_ip_address.py +26 -0
  103. netbox_dns/migrations/0023_disable_ptr_false.py +27 -0
  104. netbox_dns/migrations/0024_zonetemplate_parental_agents.py +25 -0
  105. netbox_dns/migrations/0025_remove_zone_inline_signing_and_more.py +22 -0
  106. netbox_dns/migrations/0026_alter_dnssecpolicy_nsec3_opt_out.py +18 -0
  107. netbox_dns/migrations/0026_domain_registration.py +1 -1
  108. netbox_dns/migrations/0027_zone_comments.py +18 -0
  109. netbox_dns/migrations/0028_alter_zone_default_ttl_alter_zone_soa_minimum_and_more.py +54 -0
  110. netbox_dns/migrations/0028_rfc2317_fields.py +44 -0
  111. netbox_dns/migrations/0029_alter_registrationcontact_street.py +18 -0
  112. netbox_dns/migrations/0029_record_fqdn.py +30 -0
  113. netbox_dns/mixins/__init__.py +1 -0
  114. netbox_dns/mixins/object_modification.py +57 -0
  115. netbox_dns/models/__init__.py +5 -1
  116. netbox_dns/models/dnssec_key_template.py +114 -0
  117. netbox_dns/models/dnssec_policy.py +203 -0
  118. netbox_dns/models/nameserver.py +61 -30
  119. netbox_dns/models/record.py +781 -234
  120. netbox_dns/models/record_template.py +198 -0
  121. netbox_dns/models/registrar.py +34 -15
  122. netbox_dns/models/{contact.py → registration_contact.py} +72 -43
  123. netbox_dns/models/view.py +129 -9
  124. netbox_dns/models/zone.py +806 -242
  125. netbox_dns/models/zone_template.py +209 -0
  126. netbox_dns/navigation.py +176 -76
  127. netbox_dns/signals/__init__.py +0 -0
  128. netbox_dns/signals/dnssec.py +32 -0
  129. netbox_dns/signals/ipam_dnssync.py +216 -0
  130. netbox_dns/tables/__init__.py +5 -1
  131. netbox_dns/tables/dnssec_key_template.py +49 -0
  132. netbox_dns/tables/dnssec_policy.py +140 -0
  133. netbox_dns/tables/ipam_dnssync.py +12 -0
  134. netbox_dns/tables/nameserver.py +14 -17
  135. netbox_dns/tables/record.py +117 -59
  136. netbox_dns/tables/record_template.py +91 -0
  137. netbox_dns/tables/registrar.py +20 -10
  138. netbox_dns/tables/{contact.py → registration_contact.py} +22 -11
  139. netbox_dns/tables/view.py +47 -3
  140. netbox_dns/tables/zone.py +62 -31
  141. netbox_dns/tables/zone_template.py +78 -0
  142. netbox_dns/template_content.py +124 -38
  143. netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +70 -0
  144. netbox_dns/templates/netbox_dns/dnssecpolicy.html +163 -0
  145. netbox_dns/templates/netbox_dns/nameserver.html +31 -28
  146. netbox_dns/templates/netbox_dns/record/managed.html +2 -1
  147. netbox_dns/templates/netbox_dns/record/related.html +17 -6
  148. netbox_dns/templates/netbox_dns/record.html +140 -93
  149. netbox_dns/templates/netbox_dns/recordtemplate.html +96 -0
  150. netbox_dns/templates/netbox_dns/registrar.html +41 -34
  151. netbox_dns/templates/netbox_dns/registrationcontact.html +76 -0
  152. netbox_dns/templates/netbox_dns/view/button.html +10 -0
  153. netbox_dns/templates/netbox_dns/view/prefix.html +44 -0
  154. netbox_dns/templates/netbox_dns/view/related.html +33 -0
  155. netbox_dns/templates/netbox_dns/view.html +62 -18
  156. netbox_dns/templates/netbox_dns/zone/base.html +6 -3
  157. netbox_dns/templates/netbox_dns/zone/child.html +6 -5
  158. netbox_dns/templates/netbox_dns/zone/child_zone.html +18 -0
  159. netbox_dns/templates/netbox_dns/zone/delegation_record.html +18 -0
  160. netbox_dns/templates/netbox_dns/zone/managed_record.html +1 -1
  161. netbox_dns/templates/netbox_dns/zone/record.html +6 -5
  162. netbox_dns/templates/netbox_dns/zone/registration.html +43 -24
  163. netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +18 -0
  164. netbox_dns/templates/netbox_dns/zone.html +178 -119
  165. netbox_dns/templates/netbox_dns/zonetemplate/child.html +46 -0
  166. netbox_dns/templates/netbox_dns/zonetemplate.html +124 -0
  167. netbox_dns/templatetags/netbox_dns.py +10 -0
  168. netbox_dns/urls.py +50 -210
  169. netbox_dns/utilities/__init__.py +3 -0
  170. netbox_dns/{utilities.py → utilities/conversions.py} +55 -7
  171. netbox_dns/utilities/dns.py +11 -0
  172. netbox_dns/utilities/ipam_dnssync.py +370 -0
  173. netbox_dns/validators/__init__.py +4 -0
  174. netbox_dns/validators/dns_name.py +116 -0
  175. netbox_dns/validators/dns_value.py +147 -0
  176. netbox_dns/validators/dnssec.py +148 -0
  177. netbox_dns/validators/rfc2317.py +28 -0
  178. netbox_dns/views/__init__.py +5 -1
  179. netbox_dns/views/dnssec_key_template.py +78 -0
  180. netbox_dns/views/dnssec_policy.py +146 -0
  181. netbox_dns/views/nameserver.py +34 -15
  182. netbox_dns/views/record.py +156 -15
  183. netbox_dns/views/record_template.py +93 -0
  184. netbox_dns/views/registrar.py +32 -13
  185. netbox_dns/views/registration_contact.py +101 -0
  186. netbox_dns/views/view.py +58 -14
  187. netbox_dns/views/zone.py +130 -33
  188. netbox_dns/views/zone_template.py +82 -0
  189. netbox_plugin_dns-1.4.7.dist-info/METADATA +132 -0
  190. netbox_plugin_dns-1.4.7.dist-info/RECORD +201 -0
  191. {netbox_plugin_dns-0.21.4.dist-info → netbox_plugin_dns-1.4.7.dist-info}/WHEEL +2 -1
  192. {netbox_plugin_dns-0.21.4.dist-info → netbox_plugin_dns-1.4.7.dist-info/licenses}/LICENSE +2 -1
  193. netbox_plugin_dns-1.4.7.dist-info/top_level.txt +1 -0
  194. netbox_dns/filters/__init__.py +0 -6
  195. netbox_dns/filters/nameserver.py +0 -18
  196. netbox_dns/filters/record.py +0 -53
  197. netbox_dns/filters/view.py +0 -18
  198. netbox_dns/filters/zone.py +0 -112
  199. netbox_dns/forms/contact.py +0 -211
  200. netbox_dns/graphql/contact.py +0 -19
  201. netbox_dns/graphql/nameserver.py +0 -19
  202. netbox_dns/graphql/record.py +0 -19
  203. netbox_dns/graphql/registrar.py +0 -19
  204. netbox_dns/graphql/view.py +0 -19
  205. netbox_dns/graphql/zone.py +0 -19
  206. netbox_dns/management/commands/setup_coupling.py +0 -75
  207. netbox_dns/management/commands/update_soa.py +0 -22
  208. netbox_dns/middleware.py +0 -226
  209. netbox_dns/migrations/0001_initial.py +0 -115
  210. netbox_dns/migrations/0002_zone_default_ttl.py +0 -18
  211. netbox_dns/migrations/0003_soa_managed_records.py +0 -112
  212. netbox_dns/migrations/0004_create_ptr_for_a_aaaa_records.py +0 -80
  213. netbox_dns/migrations/0005_update_ns_records.py +0 -41
  214. netbox_dns/migrations/0006_zone_soa_serial_auto.py +0 -29
  215. netbox_dns/migrations/0007_alter_zone_soa_serial_auto.py +0 -17
  216. netbox_dns/migrations/0008_zone_status_names.py +0 -21
  217. netbox_dns/migrations/0009_netbox32.py +0 -71
  218. netbox_dns/migrations/0010_update_soa_records.py +0 -58
  219. netbox_dns/migrations/0011_add_view_model.py +0 -70
  220. netbox_dns/migrations/0012_adjust_zone_and_record.py +0 -17
  221. netbox_dns/migrations/0014_add_view_description.py +0 -16
  222. netbox_dns/migrations/0016_cleanup_ptr_records.py +0 -38
  223. netbox_dns/migrations/0017_alter_record_ttl.py +0 -17
  224. netbox_dns/migrations/0018_zone_arpa_network.py +0 -51
  225. netbox_dns/migrations/0019_update_ns_ttl.py +0 -19
  226. netbox_dns/templates/netbox_dns/contact.html +0 -71
  227. netbox_dns/templates/netbox_dns/related_dns_objects.html +0 -21
  228. netbox_dns/templatetags/view_helpers.py +0 -15
  229. netbox_dns/validators.py +0 -57
  230. netbox_dns/views/contact.py +0 -83
  231. netbox_plugin_dns-0.21.4.dist-info/METADATA +0 -101
  232. netbox_plugin_dns-0.21.4.dist-info/RECORD +0 -110
@@ -0,0 +1,285 @@
1
+ from django import forms
2
+ from django.utils.translation import gettext_lazy as _
3
+
4
+ from netbox.forms import (
5
+ NetBoxModelBulkEditForm,
6
+ NetBoxModelFilterSetForm,
7
+ NetBoxModelImportForm,
8
+ NetBoxModelForm,
9
+ )
10
+ from utilities.forms.fields import (
11
+ DynamicModelMultipleChoiceField,
12
+ TagFilterField,
13
+ CSVChoiceField,
14
+ CSVModelChoiceField,
15
+ DynamicModelChoiceField,
16
+ )
17
+ from utilities.forms.widgets import BulkEditNullBooleanSelect
18
+ from utilities.forms import add_blank_choice
19
+ from utilities.forms.rendering import FieldSet
20
+ from tenancy.models import Tenant, TenantGroup
21
+ from tenancy.forms import TenancyForm, TenancyFilterForm
22
+
23
+ from netbox_dns.models import RecordTemplate, ZoneTemplate
24
+ from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
25
+ from netbox_dns.utilities import name_to_unicode
26
+ from netbox_dns.fields import TimePeriodField
27
+
28
+
29
+ __all__ = (
30
+ "RecordTemplateForm",
31
+ "RecordTemplateFilterForm",
32
+ "RecordTemplateImportForm",
33
+ "RecordTemplateBulkEditForm",
34
+ )
35
+
36
+
37
+ class RecordTemplateForm(TenancyForm, NetBoxModelForm):
38
+ class Meta:
39
+ model = RecordTemplate
40
+
41
+ fields = (
42
+ "name",
43
+ "record_name",
44
+ "type",
45
+ "value",
46
+ "status",
47
+ "ttl",
48
+ "disable_ptr",
49
+ "description",
50
+ "tenant_group",
51
+ "tenant",
52
+ "tags",
53
+ )
54
+
55
+ fieldsets = (
56
+ FieldSet(
57
+ "name",
58
+ "record_name",
59
+ "type",
60
+ "value",
61
+ "status",
62
+ "ttl",
63
+ "disable_ptr",
64
+ "description",
65
+ name=_("Record Template"),
66
+ ),
67
+ FieldSet(
68
+ "tenant_group",
69
+ "tenant",
70
+ name=_("Tenancy"),
71
+ ),
72
+ FieldSet(
73
+ "tags",
74
+ name=_("Tags"),
75
+ ),
76
+ )
77
+
78
+ def __init__(self, *args, **kwargs):
79
+ super().__init__(*args, **kwargs)
80
+
81
+ initial_record_name = self.initial.get("record_name")
82
+ if initial_record_name:
83
+ self.initial["record_name"] = name_to_unicode(initial_record_name)
84
+
85
+ type = forms.ChoiceField(
86
+ choices=add_blank_choice(RecordSelectableTypeChoices),
87
+ required=True,
88
+ label=_("Type"),
89
+ )
90
+ disable_ptr = forms.BooleanField(
91
+ required=False,
92
+ label=_("Disable PTR"),
93
+ )
94
+ ttl = TimePeriodField(
95
+ required=False,
96
+ label=_("TTL"),
97
+ )
98
+
99
+
100
+ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
101
+ model = RecordTemplate
102
+
103
+ fieldsets = (
104
+ FieldSet(
105
+ "q",
106
+ "filter_id",
107
+ "tag",
108
+ ),
109
+ FieldSet(
110
+ "name",
111
+ "record_name",
112
+ "type",
113
+ "value",
114
+ "status",
115
+ "ttl",
116
+ "disable_ptr",
117
+ "description",
118
+ name=_("Attributes"),
119
+ ),
120
+ FieldSet(
121
+ "zone_template_id",
122
+ name=_("Zone Templates"),
123
+ ),
124
+ FieldSet(
125
+ "tenant_group_id",
126
+ "tenant_id",
127
+ name=_("Tenancy"),
128
+ ),
129
+ )
130
+
131
+ type = forms.MultipleChoiceField(
132
+ choices=RecordSelectableTypeChoices,
133
+ required=False,
134
+ label=_("Type"),
135
+ )
136
+ name = forms.CharField(
137
+ required=False,
138
+ label=_("Template Name"),
139
+ )
140
+ record_name = forms.CharField(
141
+ required=False,
142
+ label=_("Name"),
143
+ )
144
+ value = forms.CharField(
145
+ required=False,
146
+ label=_("Value"),
147
+ )
148
+ status = forms.MultipleChoiceField(
149
+ choices=RecordStatusChoices,
150
+ required=False,
151
+ label=_("Status"),
152
+ )
153
+ ttl = TimePeriodField(
154
+ required=False,
155
+ label=_("TTL"),
156
+ )
157
+ disable_ptr = forms.NullBooleanField(
158
+ required=False,
159
+ label=_("Disable PTR"),
160
+ )
161
+ description = forms.CharField(
162
+ required=False,
163
+ label=_("Description"),
164
+ )
165
+ zone_template_id = DynamicModelMultipleChoiceField(
166
+ queryset=ZoneTemplate.objects.all(),
167
+ required=False,
168
+ null_option=_("None"),
169
+ label=_("Zone Templates"),
170
+ )
171
+ tag = TagFilterField(RecordTemplate)
172
+
173
+
174
+ class RecordTemplateImportForm(NetBoxModelImportForm):
175
+ class Meta:
176
+ model = RecordTemplate
177
+
178
+ fields = (
179
+ "name",
180
+ "record_name",
181
+ "type",
182
+ "value",
183
+ "status",
184
+ "ttl",
185
+ "disable_ptr",
186
+ "description",
187
+ "tenant",
188
+ "tags",
189
+ )
190
+
191
+ type = CSVChoiceField(
192
+ choices=RecordSelectableTypeChoices,
193
+ required=True,
194
+ label=_("Type"),
195
+ )
196
+ status = CSVChoiceField(
197
+ choices=RecordStatusChoices,
198
+ required=False,
199
+ label=_("Status"),
200
+ )
201
+ ttl = TimePeriodField(
202
+ required=False,
203
+ label=_("TTL"),
204
+ )
205
+ disable_ptr = forms.BooleanField(
206
+ required=False,
207
+ label=_("Disable PTR"),
208
+ )
209
+ tenant = CSVModelChoiceField(
210
+ queryset=Tenant.objects.all(),
211
+ to_field_name="name",
212
+ required=False,
213
+ label=_("Tenant"),
214
+ )
215
+
216
+
217
+ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
218
+ model = RecordTemplate
219
+
220
+ fieldsets = (
221
+ FieldSet(
222
+ "record_name",
223
+ "type",
224
+ "value",
225
+ "status",
226
+ "ttl",
227
+ "disable_ptr",
228
+ "description",
229
+ name=_("Attributes"),
230
+ ),
231
+ FieldSet(
232
+ "tenant_group",
233
+ "tenant",
234
+ name=_("Tenancy"),
235
+ ),
236
+ )
237
+
238
+ nullable_fields = (
239
+ "description",
240
+ "ttl",
241
+ "tenant",
242
+ )
243
+
244
+ record_name = forms.CharField(
245
+ required=False,
246
+ label=_("Record Name"),
247
+ )
248
+ type = forms.ChoiceField(
249
+ choices=add_blank_choice(RecordSelectableTypeChoices),
250
+ required=False,
251
+ label=_("Type"),
252
+ )
253
+ value = forms.CharField(
254
+ required=False,
255
+ label=_("Value"),
256
+ )
257
+ status = forms.ChoiceField(
258
+ choices=add_blank_choice(RecordStatusChoices),
259
+ required=False,
260
+ label=_("Status"),
261
+ )
262
+ ttl = TimePeriodField(
263
+ required=False,
264
+ label=_("TTL"),
265
+ )
266
+ disable_ptr = forms.NullBooleanField(
267
+ required=False,
268
+ widget=BulkEditNullBooleanSelect(),
269
+ label=_("Disable PTR"),
270
+ )
271
+ description = forms.CharField(
272
+ max_length=200,
273
+ required=False,
274
+ label=_("Description"),
275
+ )
276
+ tenant_group = DynamicModelChoiceField(
277
+ queryset=TenantGroup.objects.all(),
278
+ required=False,
279
+ label=_("Tenant Group"),
280
+ )
281
+ tenant = DynamicModelChoiceField(
282
+ queryset=Tenant.objects.all(),
283
+ required=False,
284
+ label=_("Tenant"),
285
+ )
@@ -1,4 +1,5 @@
1
1
  from django import forms
2
+ from django.utils.translation import gettext_lazy as _
2
3
 
3
4
  from netbox.forms import (
4
5
  NetBoxModelBulkEditForm,
@@ -7,16 +8,28 @@ from netbox.forms import (
7
8
  NetBoxModelForm,
8
9
  )
9
10
  from utilities.forms.fields import TagFilterField
11
+ from utilities.forms.rendering import FieldSet
10
12
 
11
13
  from netbox_dns.models import Registrar
12
14
 
13
15
 
16
+ __all__ = (
17
+ "RegistrarForm",
18
+ "RegistrarFilterForm",
19
+ "RegistrarImportForm",
20
+ "RegistrarBulkEditForm",
21
+ )
22
+
23
+
14
24
  class RegistrarForm(NetBoxModelForm):
15
25
  class Meta:
16
26
  model = Registrar
27
+
17
28
  fields = (
18
29
  "name",
19
30
  "iana_id",
31
+ "description",
32
+ "address",
20
33
  "referral_url",
21
34
  "whois_server",
22
35
  "abuse_email",
@@ -24,46 +37,94 @@ class RegistrarForm(NetBoxModelForm):
24
37
  "tags",
25
38
  )
26
39
 
40
+ fieldsets = (
41
+ FieldSet(
42
+ "name",
43
+ "iana_id",
44
+ "description",
45
+ "address",
46
+ "referral_url",
47
+ "whois_server",
48
+ "abuse_email",
49
+ "abuse_phone",
50
+ name=_("Registrar"),
51
+ ),
52
+ FieldSet(
53
+ "tags",
54
+ name=_("Tags"),
55
+ ),
56
+ )
57
+
27
58
 
28
59
  class RegistrarFilterForm(NetBoxModelFilterSetForm):
29
60
  model = Registrar
61
+
30
62
  fieldsets = (
31
- (None, ("q", "name", "iana_id", "tags")),
32
- ("Contact", ("referral_url", "whois_server", "abuse_email", "abuse_phone")),
63
+ FieldSet(
64
+ "q",
65
+ "filter_id",
66
+ "tag",
67
+ ),
68
+ FieldSet(
69
+ "name",
70
+ "iana_id",
71
+ "description",
72
+ name=_("Attributes"),
73
+ ),
74
+ FieldSet(
75
+ "address",
76
+ "referral_url",
77
+ "whois_server",
78
+ "abuse_email",
79
+ "abuse_phone",
80
+ name=_("Contact"),
81
+ ),
33
82
  )
34
83
 
35
84
  name = forms.CharField(
36
85
  required=False,
86
+ label=_("Name"),
87
+ )
88
+ address = forms.CharField(
89
+ required=False,
90
+ label=_("Address"),
91
+ )
92
+ description = forms.CharField(
93
+ required=False,
94
+ label=_("Description"),
37
95
  )
38
96
  iana_id = forms.IntegerField(
39
97
  required=False,
40
- label="IANA ID",
98
+ label=_("IANA ID"),
41
99
  )
42
100
  referral_url = forms.CharField(
43
101
  required=False,
44
- label="Referral URL",
102
+ label=_("Referral URL"),
45
103
  )
46
104
  whois_server = forms.CharField(
47
105
  required=False,
48
- label="WHOIS Server",
106
+ label=_("WHOIS Server"),
49
107
  )
50
108
  abuse_email = forms.CharField(
51
109
  required=False,
52
- label="Abuse Email",
110
+ label=_("Abuse Email"),
53
111
  )
54
112
  abuse_phone = forms.CharField(
55
113
  required=False,
56
- label="Abuse Phone",
114
+ label=_("Abuse Phone"),
57
115
  )
58
- tags = TagFilterField(Registrar)
116
+ tag = TagFilterField(Registrar)
59
117
 
60
118
 
61
119
  class RegistrarImportForm(NetBoxModelImportForm):
62
120
  class Meta:
63
121
  model = Registrar
122
+
64
123
  fields = (
65
124
  "name",
66
125
  "iana_id",
126
+ "description",
127
+ "address",
67
128
  "referral_url",
68
129
  "whois_server",
69
130
  "abuse_email",
@@ -75,38 +136,54 @@ class RegistrarImportForm(NetBoxModelImportForm):
75
136
  class RegistrarBulkEditForm(NetBoxModelBulkEditForm):
76
137
  model = Registrar
77
138
 
139
+ fieldsets = (
140
+ FieldSet(
141
+ "iana_id",
142
+ "description",
143
+ "address",
144
+ "referral_url",
145
+ "whois_server",
146
+ "abuse_email",
147
+ "abuse_phone",
148
+ name=_("Attributes"),
149
+ ),
150
+ )
151
+
152
+ nullable_fields = (
153
+ "iana_id",
154
+ "description",
155
+ "address",
156
+ "referral_url",
157
+ "whois_server",
158
+ "abuse_email",
159
+ "abuse_phone",
160
+ )
161
+
162
+ iana_id = forms.IntegerField(
163
+ required=False,
164
+ label=_("IANA ID"),
165
+ )
166
+ description = forms.CharField(
167
+ required=False,
168
+ label=_("Description"),
169
+ )
170
+ address = forms.CharField(
171
+ required=False,
172
+ label=_("Address"),
173
+ )
78
174
  referral_url = forms.CharField(
79
175
  required=False,
80
- label="Referral URL",
176
+ label=_("Referral URL"),
81
177
  )
82
178
  whois_server = forms.CharField(
83
179
  required=False,
84
- label="WHOIS Server",
180
+ label=_("WHOIS Server"),
85
181
  )
86
182
  abuse_email = forms.CharField(
87
183
  required=False,
88
- label="Abuse Email",
184
+ label=_("Abuse Email"),
89
185
  )
90
186
  abuse_phone = forms.CharField(
91
187
  required=False,
92
- label="Abuse Phone",
93
- )
94
-
95
- fieldsets = (
96
- (
97
- None,
98
- (
99
- "referral_url",
100
- "whois_server",
101
- "abuse_email",
102
- "abuse_phone",
103
- ),
104
- ),
105
- )
106
-
107
- nullable_fields = (
108
- "referral_url",
109
- "whois_server",
110
- "abuse_email",
111
- "abuse_phone",
188
+ label=_("Abuse Phone"),
112
189
  )