netbox-plugin-dns 1.2b1__py3-none-any.whl → 1.2.2__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.

Potentially problematic release.


This version of netbox-plugin-dns might be problematic. Click here for more details.

netbox_dns/__init__.py CHANGED
@@ -7,7 +7,7 @@ from ipam.choices import IPAddressStatusChoices
7
7
 
8
8
  from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices, ZoneStatusChoices
9
9
 
10
- __version__ = "1.2b1"
10
+ __version__ = "1.2.2"
11
11
 
12
12
 
13
13
  def _check_list(setting):
@@ -36,6 +36,7 @@ class DNSConfig(PluginConfig):
36
36
  ZoneStatusChoices.STATUS_ACTIVE,
37
37
  ZoneStatusChoices.STATUS_DYNAMIC,
38
38
  ],
39
+ "filter_record_types": [],
39
40
  "record_active_status": [
40
41
  RecordStatusChoices.STATUS_ACTIVE,
41
42
  ],
@@ -49,9 +50,11 @@ class DNSConfig(PluginConfig):
49
50
  "dnssync_minimum_zone_labels": 2,
50
51
  "tolerate_characters_in_zone_labels": "",
51
52
  "tolerate_underscores_in_labels": False,
52
- "tolerate_underscores_in_hostnames": False, # Deprecated, will be removed in 1.2.0
53
53
  "tolerate_leading_underscore_types": [
54
+ RecordTypeChoices.CNAME,
55
+ RecordTypeChoices.DNAME,
54
56
  RecordTypeChoices.SRV,
57
+ RecordTypeChoices.SVCB,
55
58
  RecordTypeChoices.TLSA,
56
59
  RecordTypeChoices.TXT,
57
60
  ],
@@ -75,6 +75,7 @@ class RecordSerializer(NetBoxModelSerializer):
75
75
  "custom_fields",
76
76
  "tenant",
77
77
  "ipam_ip_address",
78
+ "absolute_value",
78
79
  )
79
80
  brief_fields = (
80
81
  "id",
@@ -1,24 +1,44 @@
1
1
  from dns import rdatatype, rdataclass
2
2
 
3
3
  from django.utils.translation import gettext_lazy as _
4
+ from django.core.exceptions import ImproperlyConfigured
4
5
 
6
+ from netbox.plugins.utils import get_plugin_config
5
7
  from utilities.choices import ChoiceSet
6
8
 
7
9
 
8
- def initialize_choice_names(cls):
9
- for choice in cls.CHOICES:
10
- setattr(cls, choice[0], choice[0])
11
- return cls
12
-
13
-
14
10
  __all__ = (
15
11
  "RecordTypeChoices",
12
+ "RecordSelectableTypeChoices",
16
13
  "RecordClassChoices",
17
14
  "RecordStatusChoices",
18
15
  )
19
16
 
20
17
 
21
- @initialize_choice_names
18
+ def define_choice_attributes(filter_name=None):
19
+ try:
20
+ if filter_name is not None:
21
+ filter_choices = get_plugin_config("netbox_dns", filter_name, [])
22
+ else:
23
+ filter_choices = []
24
+ except ImproperlyConfigured:
25
+ filter_choices = []
26
+
27
+ def decorator(cls):
28
+ choices = []
29
+ for choice in cls._choices:
30
+ if choice[0] not in filter_choices:
31
+ setattr(cls, choice[0], choice[0])
32
+ choices.append(choice)
33
+ cls._choices = choices
34
+ cls.CHOICES = choices
35
+
36
+ return cls
37
+
38
+ return decorator
39
+
40
+
41
+ @define_choice_attributes()
22
42
  class RecordTypeChoices(ChoiceSet):
23
43
  CHOICES = [
24
44
  (rdtype.name, rdtype.name)
@@ -30,7 +50,16 @@ class RecordTypeChoices(ChoiceSet):
30
50
  ]
31
51
 
32
52
 
33
- @initialize_choice_names
53
+ @define_choice_attributes(filter_name="filter_record_types")
54
+ class RecordSelectableTypeChoices(ChoiceSet):
55
+ CHOICES = [
56
+ (rdtype.name, rdtype.name)
57
+ for rdtype in sorted(rdatatype.RdataType, key=lambda a: a.name)
58
+ if not rdatatype.is_metatype(rdtype)
59
+ ]
60
+
61
+
62
+ @define_choice_attributes()
34
63
  class RecordClassChoices(ChoiceSet):
35
64
  CHOICES = [
36
65
  (rdclass.name, rdclass.name)
@@ -29,20 +29,6 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
29
29
  to_field_name="name",
30
30
  label=_("View"),
31
31
  )
32
- # DEPRECATED: Remove in 1.1
33
- name_server_id = django_filters.ModelMultipleChoiceFilter(
34
- queryset=NameServer.objects.all(),
35
- field_name="nameservers",
36
- to_field_name="id",
37
- label=_("Nameserver IDs"),
38
- )
39
- # DEPRECATED: Remove in 1.1
40
- name_server = django_filters.ModelMultipleChoiceFilter(
41
- queryset=NameServer.objects.all(),
42
- field_name="nameservers__name",
43
- to_field_name="name",
44
- label=_("Nameservers"),
45
- )
46
32
  nameserver_id = django_filters.ModelMultipleChoiceFilter(
47
33
  queryset=NameServer.objects.all(),
48
34
  field_name="nameservers",
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
21
21
  from tenancy.forms import TenancyForm, TenancyFilterForm
22
22
 
23
23
  from netbox_dns.models import View, Zone, Record
24
- from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
24
+ from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
25
25
  from netbox_dns.utilities import name_to_unicode
26
26
 
27
27
 
@@ -57,6 +57,11 @@ class RecordForm(TenancyForm, NetBoxModelForm):
57
57
  },
58
58
  label=_("Zone"),
59
59
  )
60
+ type = forms.ChoiceField(
61
+ choices=add_blank_choice(RecordSelectableTypeChoices),
62
+ required=True,
63
+ label=_("Type"),
64
+ )
60
65
 
61
66
  disable_ptr = forms.BooleanField(
62
67
  required=False,
@@ -123,7 +128,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
123
128
  )
124
129
 
125
130
  type = forms.MultipleChoiceField(
126
- choices=RecordTypeChoices,
131
+ choices=RecordSelectableTypeChoices,
127
132
  required=False,
128
133
  label=_("Type"),
129
134
  )
@@ -210,7 +215,7 @@ class RecordImportForm(NetBoxModelImportForm):
210
215
  help_text=_("This field is required if the zone is not in the default view"),
211
216
  )
212
217
  type = CSVChoiceField(
213
- choices=RecordTypeChoices,
218
+ choices=RecordSelectableTypeChoices,
214
219
  required=True,
215
220
  label=_("Type"),
216
221
  )
@@ -268,7 +273,7 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
268
273
  label=_("Zone"),
269
274
  )
270
275
  type = forms.ChoiceField(
271
- choices=add_blank_choice(RecordTypeChoices),
276
+ choices=add_blank_choice(RecordSelectableTypeChoices),
272
277
  required=False,
273
278
  label=_("Type"),
274
279
  )
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
21
21
  from tenancy.forms import TenancyForm, TenancyFilterForm
22
22
 
23
23
  from netbox_dns.models import RecordTemplate, ZoneTemplate
24
- from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
24
+ from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
25
25
  from netbox_dns.utilities import name_to_unicode
26
26
 
27
27
 
@@ -41,6 +41,11 @@ class RecordTemplateForm(TenancyForm, NetBoxModelForm):
41
41
  if initial_record_name:
42
42
  self.initial["record_name"] = name_to_unicode(initial_record_name)
43
43
 
44
+ type = forms.ChoiceField(
45
+ choices=add_blank_choice(RecordSelectableTypeChoices),
46
+ required=True,
47
+ label=_("Type"),
48
+ )
44
49
  disable_ptr = forms.BooleanField(
45
50
  required=False,
46
51
  label=_("Disable PTR"),
@@ -103,7 +108,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
103
108
  )
104
109
 
105
110
  type = forms.MultipleChoiceField(
106
- choices=RecordTypeChoices,
111
+ choices=RecordSelectableTypeChoices,
107
112
  required=False,
108
113
  label=_("Type"),
109
114
  )
@@ -142,7 +147,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
142
147
 
143
148
  class RecordTemplateImportForm(NetBoxModelImportForm):
144
149
  type = CSVChoiceField(
145
- choices=RecordTypeChoices,
150
+ choices=RecordSelectableTypeChoices,
146
151
  required=True,
147
152
  label=_("Type"),
148
153
  )
@@ -187,7 +192,7 @@ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
187
192
  model = RecordTemplate
188
193
 
189
194
  type = forms.ChoiceField(
190
- choices=add_blank_choice(RecordTypeChoices),
195
+ choices=add_blank_choice(RecordSelectableTypeChoices),
191
196
  required=False,
192
197
  label=_("Type"),
193
198
  )
@@ -134,6 +134,7 @@ class NetBoxDNSRecordType(NetBoxObjectType):
134
134
  zone: Annotated["NetBoxDNSZoneType", strawberry.lazy("netbox_dns.graphql.types")]
135
135
  type: str
136
136
  value: str
137
+ absolute_value: str
137
138
  status: str
138
139
  ttl: BigInt | None
139
140
  managed: bool
@@ -50,6 +50,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
50
50
  clone_fields = (
51
51
  "name",
52
52
  "description",
53
+ "tenant",
53
54
  )
54
55
 
55
56
  class Meta:
@@ -3,6 +3,7 @@ import netaddr
3
3
 
4
4
  import dns
5
5
  from dns import name as dns_name
6
+ from dns import rdata
6
7
 
7
8
  from django.core.exceptions import ValidationError
8
9
  from django.db import transaction, models
@@ -22,7 +23,11 @@ from netbox_dns.fields import AddressField
22
23
  from netbox_dns.utilities import arpa_to_prefix, name_to_unicode, get_query_from_filter
23
24
  from netbox_dns.validators import validate_generic_name, validate_record_value
24
25
  from netbox_dns.mixins import ObjectModificationMixin
25
- from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
26
+ from netbox_dns.choices import (
27
+ RecordTypeChoices,
28
+ RecordStatusChoices,
29
+ RecordClassChoices,
30
+ )
26
31
 
27
32
 
28
33
  __all__ = (
@@ -222,6 +227,7 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
222
227
  "ttl",
223
228
  "disable_ptr",
224
229
  "description",
230
+ "tenant",
225
231
  )
226
232
 
227
233
  class Meta:
@@ -634,6 +640,43 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
634
640
  }
635
641
  )
636
642
 
643
+ @property
644
+ def absolute_value(self):
645
+ zone = dns_name.from_text(self.zone.name)
646
+ rr = rdata.from_text(RecordClassChoices.IN, self.type, self.value)
647
+
648
+ match self.type:
649
+ case (
650
+ RecordTypeChoices.CNAME
651
+ | RecordTypeChoices.DNAME
652
+ | RecordTypeChoices.NS
653
+ | RecordTypeChoices.HTTPS
654
+ | RecordTypeChoices.SRV
655
+ | RecordTypeChoices.SVCB
656
+ ):
657
+ return rr.replace(target=rr.target.derelativize(zone)).to_text()
658
+
659
+ case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
660
+ return rr.replace(exchange=rr.exchange.derelativize(zone)).to_text()
661
+
662
+ case RecordTypeChoices.RP:
663
+ return rr.replace(
664
+ mbox=rr.mbox.derelativize(zone), txt=rr.txt.derelativize(zone)
665
+ ).to_text()
666
+
667
+ case RecordTypeChoices.NAPTR:
668
+ return rr.replace(
669
+ replacement=rr.replacement.derelativize(zone)
670
+ ).to_text()
671
+
672
+ case RecordTypeChoices.PX:
673
+ return rr.replace(
674
+ map822=rr.map822.derelativize(zone),
675
+ mapx400=rr.mapx400.derelativize(zone),
676
+ ).to_text()
677
+
678
+ return self.value
679
+
637
680
  def handle_conflicting_address_records(self):
638
681
  if self.ipam_ip_address is None or not self.is_active:
639
682
  return
netbox_dns/models/view.py CHANGED
@@ -64,6 +64,7 @@ class View(ObjectModificationMixin, ContactsMixin, NetBoxModel):
64
64
  clone_fields = (
65
65
  "name",
66
66
  "description",
67
+ "tenant",
67
68
  )
68
69
 
69
70
  @classmethod
netbox_dns/models/zone.py CHANGED
@@ -271,6 +271,7 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
271
271
  "soa_expire",
272
272
  "soa_minimum",
273
273
  "description",
274
+ "tenant",
274
275
  )
275
276
 
276
277
  class Meta:
@@ -1,6 +1,8 @@
1
1
  {% extends 'netbox_dns/zone/base.html' %}
2
2
  {% load helpers %}
3
3
  {% load i18n %}
4
+ {% load netbox_dns %}
5
+ {% load tz %}
4
6
 
5
7
  {% block content %}
6
8
  <div class="row">
@@ -118,7 +120,14 @@
118
120
  {% if object.soa_serial_auto %}
119
121
  <tr>
120
122
  <th scope="row">{% trans "Serial (auto-generated)" %}</th>
121
- <td>{{ object.soa_serial }}</td>
123
+ <td>
124
+ <table style="width: 100%;">
125
+ <tr>
126
+ <td>{{ object.soa_serial }}</td>
127
+ <td align="right" class="text-muted">{{ object.soa_serial|epoch_to_utc|isodatetime }}</td>
128
+ </tr>
129
+ </table>
130
+ </td>
122
131
  </tr>
123
132
  {% else %}
124
133
  <tr>
File without changes
@@ -0,0 +1,10 @@
1
+ from datetime import datetime, timezone
2
+
3
+ from django import template
4
+
5
+ register = template.Library()
6
+
7
+
8
+ @register.filter(name="epoch_to_utc")
9
+ def epoch_to_utc(epoch):
10
+ return datetime.fromtimestamp(epoch, tz=timezone.utc)
@@ -28,7 +28,7 @@ def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
28
28
 
29
29
  tolerate_underscores = get_plugin_config(
30
30
  "netbox_dns", "tolerate_underscores_in_labels"
31
- ) or get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames")
31
+ )
32
32
 
33
33
  if tolerate_leading_underscores:
34
34
  if tolerate_underscores:
@@ -7,6 +7,8 @@ from dns.exception import SyntaxError
7
7
  from django.core.exceptions import ValidationError
8
8
  from django.utils.translation import gettext as _
9
9
 
10
+ from netbox.plugins.utils import get_plugin_config
11
+
10
12
  from netbox_dns.choices import RecordClassChoices, RecordTypeChoices
11
13
  from netbox_dns.validators import (
12
14
  validate_fqdn,
@@ -76,14 +78,19 @@ def validate_record_value(record):
76
78
  ).format(value=record.value, type=record.type, error=exc)
77
79
  )
78
80
 
81
+ skip_name_validation = record.type in get_plugin_config(
82
+ "netbox_dns", "tolerate_non_rfc1035_types", default=[]
83
+ )
84
+
79
85
  match record.type:
80
86
  case RecordTypeChoices.CNAME:
81
87
  _validate_idn(rr.target)
82
- validate_domain_name(
83
- rr.target.to_text(),
84
- always_tolerant=True,
85
- allow_empty_label=True,
86
- )
88
+ if not skip_name_validation:
89
+ validate_domain_name(
90
+ rr.target.to_text(),
91
+ always_tolerant=True,
92
+ allow_empty_label=True,
93
+ )
87
94
 
88
95
  case (
89
96
  RecordTypeChoices.NS
@@ -92,38 +99,46 @@ def validate_record_value(record):
92
99
  | RecordTypeChoices.SVCB
93
100
  ):
94
101
  _validate_idn(rr.target)
95
- validate_domain_name(rr.target.to_text(), always_tolerant=True)
102
+ if not skip_name_validation:
103
+ validate_domain_name(rr.target.to_text(), always_tolerant=True)
96
104
 
97
105
  case RecordTypeChoices.DNAME:
98
106
  _validate_idn(rr.target)
99
- validate_domain_name(
100
- rr.target.to_text(), always_tolerant=True, zone_name=True
101
- )
107
+ if not skip_name_validation:
108
+ validate_domain_name(
109
+ rr.target.to_text(), always_tolerant=True, zone_name=True
110
+ )
102
111
 
103
112
  case RecordTypeChoices.PTR | RecordTypeChoices.NSAP_PTR:
104
113
  _validate_idn(rr.target)
105
- validate_fqdn(rr.target.to_text(), always_tolerant=True)
114
+ if not skip_name_validation:
115
+ validate_fqdn(rr.target.to_text(), always_tolerant=True)
106
116
 
107
117
  case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
108
118
  _validate_idn(rr.exchange)
109
- validate_domain_name(rr.exchange.to_text(), always_tolerant=True)
119
+ if not skip_name_validation:
120
+ validate_domain_name(rr.exchange.to_text(), always_tolerant=True)
110
121
 
111
122
  case RecordTypeChoices.NSEC:
112
123
  _validate_idn(rr.next)
113
- validate_domain_name(rr.next.to_text(), always_tolerant=True)
124
+ if not skip_name_validation:
125
+ validate_domain_name(rr.next.to_text(), always_tolerant=True)
114
126
 
115
127
  case RecordTypeChoices.RP:
116
128
  _validate_idn(rr.mbox)
117
- validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
118
129
  _validate_idn(rr.txt)
119
- validate_domain_name(rr.txt.to_text(), always_tolerant=True)
130
+ if not skip_name_validation:
131
+ validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
132
+ validate_domain_name(rr.txt.to_text(), always_tolerant=True)
120
133
 
121
134
  case RecordTypeChoices.NAPTR:
122
135
  _validate_idn(rr.replacement)
123
- validate_generic_name(rr.replacement.to_text(), always_tolerant=True)
136
+ if not skip_name_validation:
137
+ validate_generic_name(rr.replacement.to_text(), always_tolerant=True)
124
138
 
125
139
  case RecordTypeChoices.PX:
126
140
  _validate_idn(rr.map822)
127
- validate_domain_name(rr.map822.to_text(), always_tolerant=True)
128
141
  _validate_idn(rr.mapx400)
129
- validate_domain_name(rr.mapx400.to_text(), always_tolerant=True)
142
+ if not skip_name_validation:
143
+ validate_domain_name(rr.map822.to_text(), always_tolerant=True)
144
+ validate_domain_name(rr.mapx400.to_text(), always_tolerant=True)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: netbox-plugin-dns
3
- Version: 1.2b1
3
+ Version: 1.2.2
4
4
  Summary: NetBox DNS is a NetBox plugin for managing DNS data.
5
5
  Author-email: Peter Eckel <pete@netbox-dns.org>
6
6
  Project-URL: Homepage, https://github.com/peteeckel/netbox-plugin-dns
@@ -8,7 +8,7 @@ Project-URL: Documentation, https://github.com/peteeckel/netbox-plugin-dns/blob/
8
8
  Project-URL: Repository, https://github.com/peteeckel/netbox-plugin-dns
9
9
  Project-URL: Issues, https://github.com/peteeckel/netbox-plugin-dns/issues
10
10
  Keywords: netbox,netbox-plugin,dns
11
- Classifier: Development Status :: 4 - Beta
11
+ Classifier: Development Status :: 5 - Production/Stable
12
12
  Requires-Python: >=3.10
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
@@ -66,9 +66,19 @@ For integration with a large number of DNS server implementations integration to
66
66
 
67
67
  ## Requirements
68
68
 
69
- * NetBox 4.0.0 or higher
69
+ * NetBox 4.2.0 or higher
70
70
  * Python 3.10 or higher
71
71
 
72
+ ## Compatibility with earlier NetBox Versions
73
+
74
+ NetBox Version | NetBox DNS Version | Comment
75
+ -------------- | ------------------ | -------
76
+ 3.5 | 0.22 |
77
+ 3.6 | 0.22 |
78
+ 3.7 | 0.22 |
79
+ 4.0 - 4.1 | 1.0 | Supports legacy IPAM Coupling
80
+ 4.0 - 4.1 | 1.1 | Supports IPAM DNSsync
81
+
72
82
  ## Installation & Configuration
73
83
 
74
84
  ### Installation
@@ -1,4 +1,4 @@
1
- netbox_dns/__init__.py,sha256=l39Hu_zZEZ1n15O9AzQx0Kr3s8U2EiRDyFIK91e2ErM,3000
1
+ netbox_dns/__init__.py,sha256=WLiNzOodcLZS1ifW8vje3J16M5o4dDYyPmtG8GcMbpY,3053
2
2
  netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
3
3
  netbox_dns/navigation.py,sha256=36clAzlWftW94_VZ3EHu8_btzzA_dah50CLTfoov-O4,6226
4
4
  netbox_dns/template_content.py,sha256=T06L7-m4eGrLMeGsCvPpQLAGfn3S2FL7z0Cd1hhbisY,4225
@@ -10,7 +10,7 @@ netbox_dns/api/views.py,sha256=QtA5OQtIDGZoZSSaFTua1TtqARQPSVxLYy8b28CAf0s,3979
10
10
  netbox_dns/api/serializers_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  netbox_dns/api/serializers_/nameserver.py,sha256=DMkUaLNDt3UtpAD6JDHfo1NMngHWRqHh2-xQeOPlfFM,1171
12
12
  netbox_dns/api/serializers_/prefix.py,sha256=kZ1DjDly6VFZamXSxGa57YC6MfZZcI5S7jmGBkVB2_I,551
13
- netbox_dns/api/serializers_/record.py,sha256=U3B2KhblgLzfiNbMJvYBdogU-JDyVzOlXq-O2RXjVQ8,2378
13
+ netbox_dns/api/serializers_/record.py,sha256=gpfANXhAcPylFWmWpCfwSEHrYy3b9Wl07PIyM4sPKM0,2408
14
14
  netbox_dns/api/serializers_/record_template.py,sha256=WAHua_O7v8IB7QL_hOPWjItMtAjWIUZace2rebwjSJA,1519
15
15
  netbox_dns/api/serializers_/registrar.py,sha256=xLIaeBJ5ckV1Jf-uyCTFcvsLlsRMlpDtIg6q79vXZic,842
16
16
  netbox_dns/api/serializers_/registration_contact.py,sha256=3IGWW5xB9XEBGApCGZCZIxpCmy1Y5jQUbA4GzmtaCik,1024
@@ -18,7 +18,7 @@ netbox_dns/api/serializers_/view.py,sha256=nnWeQugoqMdn-NGGC7ykbVPwmBrcBma_ZKwdD
18
18
  netbox_dns/api/serializers_/zone.py,sha256=ELAis8nj9PZlge6zqTQ23P0vC4IJBDa3hh5kZ9T8G_4,5003
19
19
  netbox_dns/api/serializers_/zone_template.py,sha256=w0TsrqS_DgIIAUozCC-gc9lsQ67lpVkvbyphyuRzq6Q,3847
20
20
  netbox_dns/choices/__init__.py,sha256=jOVs2VGV5SVADRlqVnrFeAy26i8BIeEAbGpiX7K8bL8,42
21
- netbox_dns/choices/record.py,sha256=wFS44WRyUwiN2ocx-A8ZzVXKpaD9Thb0MrOiMHiqNzU,1175
21
+ netbox_dns/choices/record.py,sha256=ZSpyiZE2YCsF2wF53A5DFWgwCIhkFhgOKt__RJ0KxSk,2084
22
22
  netbox_dns/choices/zone.py,sha256=Vblm5RUtNtPNkULh8U1NxBMme1iHPllD6B6LkQkWZW4,621
23
23
  netbox_dns/fields/__init__.py,sha256=U1nbFIwwtvr10pp3Sk91jEZeWkVQBSJtr0BVWYgOfiA,89
24
24
  netbox_dns/fields/address.py,sha256=qNLHmpwwJ3TevljG1QsUr_f2h6NrPsK6wr-R-Ti8eZI,1262
@@ -32,12 +32,12 @@ netbox_dns/filtersets/record_template.py,sha256=wir5s2QWfDnw0M1wWnzJs9im5ok4l5cT
32
32
  netbox_dns/filtersets/registrar.py,sha256=Wh_l-IXRHnJhW7Pyokp3czQZISDKzXnWeSQKp512Drc,977
33
33
  netbox_dns/filtersets/registration_contact.py,sha256=903sOcHPRCI0dVzqn1i0pn5VPr_4YpHPh5QE2-akR-Y,1139
34
34
  netbox_dns/filtersets/view.py,sha256=IlQz3k2J_N6eSbT9op0KOu3sKLrn-HTsJCcrIqoYgyY,1047
35
- netbox_dns/filtersets/zone.py,sha256=KjF8oUOIaDkW98pw-OuGNofA4muA922wcDOx3pm6kTc,6818
35
+ netbox_dns/filtersets/zone.py,sha256=zl39SOiYIZxAi3G1wx0s9UEIgh8hG9Bdb46qIXLwMr8,6334
36
36
  netbox_dns/filtersets/zone_template.py,sha256=Sm40P33IhN0sOqtjz4JzoBbEK-dTLpfQqYGcM_Xb7KM,3870
37
37
  netbox_dns/forms/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
38
38
  netbox_dns/forms/nameserver.py,sha256=GJe3ece4yIGwMtLZ6wQihBrJu1dk_ZSiwX-vSU0fRa0,3397
39
- netbox_dns/forms/record.py,sha256=KctB0Qm62j3FKYj9gqzxEtQypwxpIhnJz4JnxejoI7o,8065
40
- netbox_dns/forms/record_template.py,sha256=iGlBOOsjkXnyLuRyA5DzSXe4syosxzgdWuACtmDq1Vs,6053
39
+ netbox_dns/forms/record.py,sha256=QNGLqWprhsGFTSlH2YAe-SHmCx1K1QbT_osAhCegyJg,8252
40
+ netbox_dns/forms/record_template.py,sha256=uN6ZSepNilQuqyfPpW-pMfmTRWo0IrDxp1LdOrlAo5A,6240
41
41
  netbox_dns/forms/registrar.py,sha256=GaRH3w5zlhrpwy_U0pxlrl1DrAEaMB78MUlnGxBRwZI,3949
42
42
  netbox_dns/forms/registration_contact.py,sha256=IhNAqElY7hOdpDG0jwWMdy3y2mB43xmjUhj3lsgJ3SE,5906
43
43
  netbox_dns/forms/view.py,sha256=GacwKHXSDvxQEs-d3ys7rietqA_MzpSd0XjWaSsIbU0,10339
@@ -46,7 +46,7 @@ netbox_dns/forms/zone_template.py,sha256=49vhM-Lc4JAGZD-al4QpPDLfwmpu82JNuX-bxpw
46
46
  netbox_dns/graphql/__init__.py,sha256=jghYD6uOSAis6YyLbtI3YJGZfwPw1uL2FBRsHs1EhNk,514
47
47
  netbox_dns/graphql/filters.py,sha256=fHCjFIwbPBJJMk2W7HI8LhrfFhCtQtCM9IE8ZMgVafc,1766
48
48
  netbox_dns/graphql/schema.py,sha256=q9DQ_hfRB0e6Znq4-IS6UEeTOfMkZmrWkwxcAql1uOA,2270
49
- netbox_dns/graphql/types.py,sha256=akSquN1AIFbGAVhofioPwVUM__B605PjNj3z4nmMl3c,8068
49
+ netbox_dns/graphql/types.py,sha256=8DjYxWOfjmS5HFW-eaQLl9E12pbg2xlWNwV5CH6ptdY,8092
50
50
  netbox_dns/locale/de/LC_MESSAGES/django.mo,sha256=0ij8AzrkWdwtUejXTOTdJJcIRweZfQT3iWjAXrf6hyM,20335
51
51
  netbox_dns/locale/en/LC_MESSAGES/django.mo,sha256=GDnSZkfHs3yjtTsll7dksEEej4B50F8pc9RGytZNubM,393
52
52
  netbox_dns/management/commands/cleanup_database.py,sha256=1-tAl0Sht80qaNZyfFyUW19Eh9gBUuc7GdbHN4aemGU,5935
@@ -81,13 +81,13 @@ netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
81
81
  netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
82
82
  netbox_dns/mixins/object_modification.py,sha256=AR64fU5f7g-scNAj9b54eSoS9dpjyOpqrxXVXPcOhY8,1807
83
83
  netbox_dns/models/__init__.py,sha256=5Ns9RaemTe5L0L3c6a38RxembWhV-sX9cqfjl05aPQw,313
84
- netbox_dns/models/nameserver.py,sha256=RmUubF05_K1GMOM7e_geoxXIrS8Xbs1al_xsfwmfd0Q,3389
85
- netbox_dns/models/record.py,sha256=21jhppbRlVlHd4HJNUtitF4uES09PyvtXqCppbD9SfI,28008
84
+ netbox_dns/models/nameserver.py,sha256=GKCWPKqg8WLVQS6UYRUyTdVb_865p2io06yYp5Z9b80,3407
85
+ netbox_dns/models/record.py,sha256=7LCLc3mLbgHx5yCMzIItQTB5Jzg8P-1uWGhfYeGpN4U,29415
86
86
  netbox_dns/models/record_template.py,sha256=PC4369q_LIJkImp1_jhiTTwy083MXIGpGADnbDHMbqI,5104
87
87
  netbox_dns/models/registrar.py,sha256=bjgYgeUtWGg_seDRN1-VV4Pe450ZK85lbALo4J_Zuic,1890
88
88
  netbox_dns/models/registration_contact.py,sha256=AkpNy9KbFV9YrISdepqZA1ZfckZSA9u_vfPUAf5Z4H8,3773
89
- netbox_dns/models/view.py,sha256=SbBsP-WYrJXBJG65PMmXE61uo0VvdLXPOuG1VxWziEs,4738
90
- netbox_dns/models/zone.py,sha256=iPjiZRpuxeFXqYDINBcjWYQTyJHjRk5UCs9Ap69HZG8,32249
89
+ netbox_dns/models/view.py,sha256=1OGbol3Ekg1G7c6kPRLwTaLW_ugzNozewnaN2SpyOqc,4756
90
+ netbox_dns/models/zone.py,sha256=gq2gnF_ykzZ9kLtiHSm1Lwku-uWU_iFv-0HPlH54JzI,32267
91
91
  netbox_dns/models/zone_template.py,sha256=kH16CdFk7OpjSiKfJb3bsBi--Shp2V1Fd7jVRJtbl_4,3945
92
92
  netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  netbox_dns/signals/ipam_dnssync.py,sha256=1zhlf4cMcJLlFosX7YzyqVYdFFHV4MFwTz5KCdL8xQc,7730
@@ -107,7 +107,7 @@ netbox_dns/templates/netbox_dns/recordtemplate.html,sha256=jQB42mBNlSt-Tq_uQFIyy
107
107
  netbox_dns/templates/netbox_dns/registrar.html,sha256=4kJuj3biiDxQrIMQEQUEmF4iGRE4psr6Fh0CBP1evz8,2308
108
108
  netbox_dns/templates/netbox_dns/registrationcontact.html,sha256=sljVp_MrPSJRc2vJCPFXq9MiWOw4wjbr1kI_YStBntw,3094
109
109
  netbox_dns/templates/netbox_dns/view.html,sha256=TslfDC0ZzGU59iO_OcaX8jvt6fTjWot-wYRqRGRYvLE,3245
110
- netbox_dns/templates/netbox_dns/zone.html,sha256=9tMvBuZ0hyAIHJB4-tbKmLLHAJ00OzQIIvajqn3uu5s,6619
110
+ netbox_dns/templates/netbox_dns/zone.html,sha256=BushtUbicj9zK6s50LKiaJhs25J0JY3-QHYCnUu8fKY,6991
111
111
  netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=z_VJEkf_yNjL9xoVMHG4VHQvuXwBSarA_SoPbjutBgA,3667
112
112
  netbox_dns/templates/netbox_dns/record/managed.html,sha256=uwpxQTxyfAXkWqThLT-T2ZssKNUhXTDDMnLWJSVuDNU,119
113
113
  netbox_dns/templates/netbox_dns/record/related.html,sha256=R59aPhE4CyIZtTH0ncwDyS6_wAe_Y-oZjuN_j4qk8iA,1158
@@ -122,13 +122,15 @@ netbox_dns/templates/netbox_dns/zone/managed_record.html,sha256=LOchMAJyfMZIICE6
122
122
  netbox_dns/templates/netbox_dns/zone/record.html,sha256=Y_gg9EUIqjSYxmIZKufAK8jyg9A54J-BoewNxUBoO1Y,2238
123
123
  netbox_dns/templates/netbox_dns/zone/registration.html,sha256=PqniHrO-LnXstIKyjn3fJk69ysjfrrt3U4kZAJqidXI,1265
124
124
  netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html,sha256=rWlmb3zRQbLYQ_1dsa0twwu6y1dRj2tfFVEERH07p-s,517
125
+ netbox_dns/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ netbox_dns/templatetags/netbox_dns.py,sha256=DND1DMPzv636Rak3M6Hor_Vw6pjqUfSTquofIw4dIsA,223
125
127
  netbox_dns/utilities/__init__.py,sha256=cSGf-nGaRWx9b-Xrh3dLMJYoWNsZ6FF-qdmV4F1uOgg,74
126
128
  netbox_dns/utilities/conversions.py,sha256=NS37SoMqXc13wNWRkKnLfyQbVi6QKD33fu5ovTKRo74,1979
127
129
  netbox_dns/utilities/dns.py,sha256=QKST49UkCw7n2GyrN3wU5ap6Cw98t1SZxFYJlyG2x70,315
128
130
  netbox_dns/utilities/ipam_dnssync.py,sha256=tFphPVluDUS3-4NsUW1_D1dDksA3AgIozf7JAoTIE_w,9533
129
131
  netbox_dns/validators/__init__.py,sha256=Mr8TvmcJTa8Pubj8TzbFBKfbHhEmGcr5JdQvczEJ39A,72
130
- netbox_dns/validators/dns_name.py,sha256=D2SVUHkDAdENspDTzvW4qeWdKC_2KcueqNioqgoHrfA,3628
131
- netbox_dns/validators/dns_value.py,sha256=9zCbSLfSYEebn9brcA3Q0vVK2qnvZwlv0HxDoge6Yfs,4586
132
+ netbox_dns/validators/dns_name.py,sha256=XC8yv_PeInKtya8FyPnzmazSe7BJcPw_2iK3A5A3ws0,3556
133
+ netbox_dns/validators/dns_value.py,sha256=-mc62mth-hlbPUPe_RlCR7vo1KSD6_gQDXiE8rjB-Cc,5206
132
134
  netbox_dns/validators/rfc2317.py,sha256=uKkwxpakiFFKdYA0qy8WSlEnbFwJD4MDw6gGV4F6skg,706
133
135
  netbox_dns/views/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
134
136
  netbox_dns/views/nameserver.py,sha256=2PaOHtcjaZm0FQMYTmiys-uqQsCBP_RKamW2Jj3rJOY,3896
@@ -139,8 +141,8 @@ netbox_dns/views/registration_contact.py,sha256=u__0w4Nm1_5lnAeFXfTY-cD86facWxIo
139
141
  netbox_dns/views/view.py,sha256=a6-wdMyTWoZekiR2VnM3VNSOjX-8L3Qjqqi973UobAA,3391
140
142
  netbox_dns/views/zone.py,sha256=H7UPN4T_sn_3ijvXi7t8iteJFs6qqEtVzhvchKOOzCM,7133
141
143
  netbox_dns/views/zone_template.py,sha256=vNXG96D6uZJo4KRdsgsTL3d9JzRtiDJg4_h4_3gjAfk,2667
142
- netbox_plugin_dns-1.2b1.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
143
- netbox_plugin_dns-1.2b1.dist-info/METADATA,sha256=h9Zr7ncCUaMmqBVt9XTUlsOI9-VjJagU4S6FUBC8yBA,7210
144
- netbox_plugin_dns-1.2b1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
145
- netbox_plugin_dns-1.2b1.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
146
- netbox_plugin_dns-1.2b1.dist-info/RECORD,,
144
+ netbox_plugin_dns-1.2.2.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
145
+ netbox_plugin_dns-1.2.2.dist-info/METADATA,sha256=Ef4CV4H2DEOAvT4lQAGFJ21ik_nfeRwEJmFFKXwwmMs,7605
146
+ netbox_plugin_dns-1.2.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
147
+ netbox_plugin_dns-1.2.2.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
148
+ netbox_plugin_dns-1.2.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5