netbox-ddns 1.4.0__py3-none-any.whl → 1.5.0__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.
netbox_ddns/views.py CHANGED
@@ -1,116 +1,203 @@
1
1
  from django.contrib import messages
2
2
  from django.contrib.auth.mixins import PermissionRequiredMixin
3
- from django.http import Http404
4
- from django.shortcuts import get_object_or_404, redirect, render
5
- from django.urls import reverse
3
+ from django.shortcuts import get_object_or_404, redirect
6
4
  from django.utils.translation import gettext as _
7
- from django.views import View
8
5
 
9
6
  from ipam.models import IPAddress
7
+ from ipam.tables import IPAddressTable
10
8
  from netbox_ddns.background_tasks import dns_create
11
- from netbox_ddns.forms import ExtraDNSNameEditForm
12
- from netbox_ddns.models import DNSStatus, ExtraDNSName
9
+ from netbox_ddns.filtersets import ServerFilterSet, ZoneFilterSet, ReverseZoneFilterSet, ExtraDNSNameFilterSet
10
+ from netbox_ddns.forms import ServerForm, ZoneForm, ReverseZoneForm, ExtraDNSNameIPAddressForm, ExtraDNSNameForm
11
+ from netbox_ddns.models import DNSStatus, ExtraDNSName, Server, Zone, ReverseZone
12
+ from netbox_ddns.tables import ServerTable, ZoneTable, ReverseZoneTable, ExtraDNSNameTable
13
13
  from netbox_ddns.utils import normalize_fqdn
14
14
 
15
- from utilities.forms import ConfirmationForm
16
- from utilities.htmx import htmx_partial
17
- from utilities.views import get_viewname
15
+ from netbox.views.generic import ObjectDeleteView, ObjectEditView, ObjectView, ObjectListView, BulkDeleteView
18
16
 
19
- try:
20
- # NetBox <= 2.9
21
- from utilities.views import ObjectDeleteView, ObjectEditView
22
- except ImportError:
23
- # NetBox >= 2.10
24
- from netbox.views.generic import ObjectDeleteView, ObjectEditView, ObjectView
17
+ from django.views.generic import View
25
18
 
19
+ from utilities.views import register_model_view, GetRelatedModelsMixin
26
20
 
27
- # noinspection PyMethodMayBeStatic
28
- class ExtraDNSNameObjectMixin:
29
- def get_object(self, *args, **kwargs):
30
- # NetBox < 3.2.0
31
- if not kwargs and len(args) == 1:
32
- kwargs = args[0]
33
- elif len(args) > 1:
34
- raise TypeError('Method takes 1 positional argument but more were given')
35
21
 
36
- if 'ipaddress_pk' not in kwargs:
37
- raise Http404
22
+ # ReverseZone
23
+ @register_model_view(ReverseZone)
24
+ class ReverseZoneView(ObjectView):
25
+ queryset = ReverseZone.objects.all()
38
26
 
39
- ip_address = get_object_or_404(IPAddress, pk=kwargs['ipaddress_pk'])
27
+ def get_extra_context(self, request, instance):
28
+ ip_address_table = IPAddressTable(instance.get_managed_ip_address().restrict(request.user, 'view'))
29
+ ip_address_table.configure(request)
30
+ return {
31
+ 'ip_address_table': ip_address_table,
32
+ }
40
33
 
41
- if 'pk' in kwargs:
42
- return get_object_or_404(ExtraDNSName, ip_address=ip_address, pk=kwargs['pk'])
43
34
 
44
- return ExtraDNSName(ip_address=ip_address)
35
+ @register_model_view(ReverseZone, 'list', path='', detail=False)
36
+ class ReverseZoneListView(ObjectListView):
37
+ queryset = ReverseZone.objects.all()
38
+ table = ReverseZoneTable
45
39
 
46
- def get_return_url(self, request, obj=None):
47
- # First, see if `return_url` was specified as a query parameter or form data. Use this URL only if it's
48
- # considered safe.
49
- return_url = request.GET.get('return_url') or request.POST.get('return_url')
50
- if return_url and return_url.startswith('/'):
51
- return return_url
52
-
53
- # Otherwise check we have an object and can return to its ip-address
54
- elif obj is not None and obj.ip_address is not None:
55
- return obj.ip_address.get_absolute_url()
56
40
 
57
- # If all else fails, return home. Ideally this should never happen.
58
- return reverse('home')
41
+ @register_model_view(ReverseZone, 'add', detail=False)
42
+ @register_model_view(ReverseZone, 'edit')
43
+ class ReverseZoneEditView(ObjectEditView):
44
+ queryset = ReverseZone.objects.all()
45
+ form = ReverseZoneForm
59
46
 
60
47
 
61
- class ExtraDNSNameCreateView(PermissionRequiredMixin, ExtraDNSNameObjectMixin, ObjectEditView):
62
- permission_required = 'netbox_ddns.add_extradnsname'
48
+ @register_model_view(ReverseZone, 'delete')
49
+ class ReverseZoneDeleteView(ObjectDeleteView):
50
+ queryset = ReverseZone.objects.all()
51
+
52
+
53
+ @register_model_view(ReverseZone, 'bulk_delete', path='delete', detail=False)
54
+ class ReverseZoneBulkDeleteView(BulkDeleteView):
55
+ queryset = ReverseZone.objects.all()
56
+ filterset = ReverseZoneFilterSet
57
+ table = ReverseZoneTable
58
+
59
+
60
+ # Zone
61
+ @register_model_view(Zone)
62
+ class ZoneView(ObjectView):
63
+ queryset = Zone.objects.all()
64
+
65
+ def get_extra_context(self, request, instance):
66
+ ip_address_table = IPAddressTable(instance.get_managed_ip_address().restrict(request.user, 'view'))
67
+ ip_address_table.configure(request)
68
+
69
+ extra_dns_name_table = ExtraDNSNameTable(instance.get_managed_extra_dns_name().restrict(request.user, 'view'))
70
+ extra_dns_name_table.configure(request)
71
+ return {
72
+ 'ip_address_table': ip_address_table,
73
+ 'extra_dns_name_table': extra_dns_name_table,
74
+ }
75
+
76
+
77
+ @register_model_view(Zone, 'list', path='', detail=False)
78
+ class ZoneListView(ObjectListView):
79
+ queryset = Zone.objects.all()
80
+ table = ZoneTable
81
+ filterset = ZoneFilterSet
82
+
83
+
84
+ @register_model_view(Zone, 'add', detail=False)
85
+ @register_model_view(Zone, 'edit')
86
+ class ZoneEditView(ObjectEditView):
87
+ queryset = Zone.objects.all()
88
+ form = ZoneForm
89
+
90
+
91
+ @register_model_view(Zone, 'delete')
92
+ class ZoneDeleteView(ObjectDeleteView):
93
+ queryset = Zone.objects.all()
94
+
95
+
96
+ @register_model_view(Zone, 'bulk_delete', path='delete', detail=False)
97
+ class ZoneBulkDeleteView(BulkDeleteView):
98
+ queryset = Zone.objects.all()
99
+ filterset = ZoneFilterSet
100
+ table = ZoneTable
101
+
102
+
103
+ # Server
104
+ @register_model_view(Server)
105
+ class ServerView(ObjectView):
106
+ queryset = Server.objects.all()
107
+
108
+ def get_extra_context(self, request, instance):
109
+ zone_table = ZoneTable(instance.zone_set.all(), exclude=["server"])
110
+ zone_table.configure(request)
111
+ reversezone_table = ZoneTable(instance.reversezone_set.all(), exclude=["server"])
112
+ reversezone_table.configure(request)
113
+ return {
114
+ 'zone_table': zone_table,
115
+ 'reversezone_table': reversezone_table,
116
+ }
117
+
118
+
119
+ @register_model_view(Server, 'list', path='', detail=False)
120
+ class ServerListView(ObjectListView):
121
+ queryset = Server.objects.all()
122
+ table = ServerTable
123
+ filterset = ServerFilterSet
124
+
125
+
126
+ @register_model_view(Server, 'add', detail=False)
127
+ @register_model_view(Server, 'edit')
128
+ class ServerEditView(ObjectEditView):
129
+ queryset = Server.objects.all()
130
+ form = ServerForm
131
+
132
+
133
+ @register_model_view(Server, 'delete')
134
+ class ServerDeleteView(ObjectDeleteView):
135
+ queryset = Server.objects.all()
136
+
137
+
138
+ @register_model_view(Server, 'bulk_delete', path='delete', detail=False)
139
+ class ServerBulkDeleteView(BulkDeleteView):
140
+ queryset = Server.objects.all()
141
+ filterset = ServerFilterSet
142
+ table = ServerTable
143
+
144
+
145
+ # ExtraDNSName
146
+ @register_model_view(ExtraDNSName)
147
+ class ExtraDNSNameView(ObjectView):
148
+ queryset = ExtraDNSName.objects.all()
149
+ def get_extra_context(self, request, instance):
150
+ zone = Zone.objects.find_for_dns_name(instance.name)
151
+ server = zone.server if zone else None
152
+ return {
153
+ 'zone': zone,
154
+ 'server': server,
155
+ }
156
+
157
+ @register_model_view(ExtraDNSName, 'list', path='', detail=False)
158
+ class ExtraDNSNameListView(ObjectListView):
159
+ queryset = ExtraDNSName.objects.all()
160
+ table = ExtraDNSNameTable
161
+ filterset = ExtraDNSNameFilterSet
162
+
163
+
164
+ @register_model_view(ExtraDNSName, 'add', detail=False)
165
+ class ExtraDNSNameEditView(ObjectEditView):
166
+ queryset = ExtraDNSName.objects.all()
167
+ form = ExtraDNSNameForm
168
+
169
+
170
+ @register_model_view(ExtraDNSName, 'edit')
171
+ class ExtraDNSNameEditView(ObjectEditView):
63
172
  queryset = ExtraDNSName.objects.all()
64
- form = ExtraDNSNameEditForm
65
- # NetBox < 3.2.0
66
- @property
67
- def model_form(self):
68
- return self.form
173
+ form = ExtraDNSNameIPAddressForm
69
174
 
70
175
 
71
- class ExtraDNSNameView(PermissionRequiredMixin,ExtraDNSNameObjectMixin,ObjectView):
72
- permission_required = 'netbox_ddns.view_extradnsname'
176
+ @register_model_view(ExtraDNSName, 'delete')
177
+ class ExtraDNSNameDeleteView(ObjectDeleteView):
73
178
  queryset = ExtraDNSName.objects.all()
74
179
 
75
- class ExtraDNSNameEditView(ExtraDNSNameCreateView):
76
- permission_required = 'netbox_ddns.change_extradnsname'
180
+ def get_return_url(self, request, obj=None):
181
+ if obj and obj.ip_address:
182
+ return obj.ip_address.get_absolute_url()
183
+ return super().get_return_url(request, obj)
77
184
 
78
185
 
79
- class ExtraDNSNameDeleteView(PermissionRequiredMixin, ExtraDNSNameObjectMixin, ObjectDeleteView):
80
- permission_required = 'netbox_ddns.delete_extradnsname'
186
+ @register_model_view(ExtraDNSName, 'bulk_delete', path='delete', detail=False)
187
+ class ExtraDNSNameBulkDeleteView(BulkDeleteView):
81
188
  queryset = ExtraDNSName.objects.all()
189
+ filterset = ExtraDNSNameFilterSet
190
+ table = ExtraDNSNameTable
82
191
 
83
- # Override request handler to fix the error on delete GET due to missing reverse route argument
84
- def get(self, request, *args, **kwargs):
85
- """
86
- GET request handler.
87
-
88
- Args:
89
- request: The current request
90
- """
91
- obj = self.get_object(**kwargs)
92
- form = ConfirmationForm(initial=request.GET)
93
-
94
- try:
95
- dependent_objects = self._get_dependent_objects(obj)
96
- except ProtectedError as e:
97
- return self._handle_protected_objects(obj, e.protected_objects, request, e)
98
- except RestrictedError as e:
99
- return self._handle_protected_objects(obj, e.restricted_objects, request, e)
100
-
101
- # If this is an HTMX request, return only the rendered deletion form as modal content
102
- if htmx_partial(request):
103
- viewname = get_viewname(self.queryset.model, action='delete')
104
- form_url = reverse(viewname, kwargs={'pk': obj.pk, 'ipaddress_pk': obj.ip_address.pk})
105
- return render(request, 'htmx/delete_form.html', {
106
- 'object': obj,
107
- 'object_type': self.queryset.model._meta.verbose_name,
108
- 'form': form,
109
- 'form_url': form_url,
110
- 'dependent_objects': dependent_objects,
111
- **self.get_extra_context(request, obj),
112
- })
113
192
 
193
+ class ExtraDNSNameCreateView(PermissionRequiredMixin, ObjectEditView):
194
+ permission_required = 'netbox_ddns.add_extradnsname'
195
+ queryset = ExtraDNSName.objects.all()
196
+ form = ExtraDNSNameIPAddressForm
197
+
198
+ def get_object(self, *args, **kwargs):
199
+ ip_address = get_object_or_404(IPAddress, pk=kwargs['ipaddress_pk'])
200
+ return ExtraDNSName(ip_address=ip_address)
114
201
 
115
202
 
116
203
  class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
@@ -153,3 +240,82 @@ class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
153
240
  messages.info(request, _("Updating DNS for {names}").format(names=', '.join(updated_names)))
154
241
 
155
242
  return redirect('ipam:ipaddress', pk=ip_address.pk)
243
+
244
+
245
+ class UpdateForwardZone(PermissionRequiredMixin, View):
246
+ permission_required = 'ipam.change_ipaddress'
247
+
248
+ def post(self, request, pk):
249
+ zone = get_object_or_404(Zone, pk=pk)
250
+ counter = 0
251
+
252
+ ip_addresses = zone.get_managed_ip_address()
253
+ for ip_address in ip_addresses:
254
+ new_address = ip_address.address.ip
255
+ new_dns_name = normalize_fqdn(ip_address.dns_name)
256
+
257
+ if new_dns_name:
258
+ status, created = DNSStatus.objects.get_or_create(ip_address=ip_address)
259
+
260
+ dns_create.delay(
261
+ dns_name=new_dns_name,
262
+ address=new_address,
263
+ status=status,
264
+ reverse=False,
265
+ )
266
+ counter += 1
267
+
268
+ extra_names = zone.get_managed_extra_dns_name()
269
+ for extra in extra_names:
270
+ new_address = extra.ip_address.address.ip
271
+ new_dns_name = extra.name
272
+
273
+ dns_create.delay(
274
+ dns_name=new_dns_name,
275
+ address=new_address,
276
+ status=extra,
277
+ reverse=False,
278
+ )
279
+ counter += 1
280
+
281
+ messages.info(
282
+ request, _("Updating {count} forward records in {name}").format(
283
+ count=counter,
284
+ name=zone.name
285
+ )
286
+ )
287
+ return redirect(zone.get_absolute_url())
288
+
289
+
290
+ class UpdateReverseZone(PermissionRequiredMixin, View):
291
+ permission_required = 'ipam.change_ipaddress'
292
+
293
+ def post(self, request, pk):
294
+ reversezone = get_object_or_404(ReverseZone, pk=pk)
295
+
296
+ counter = 0
297
+
298
+ ip_addresses = reversezone.get_managed_ip_address()
299
+
300
+ for ip_address in ip_addresses:
301
+ new_address = ip_address.address.ip
302
+ new_dns_name = normalize_fqdn(ip_address.dns_name)
303
+
304
+ if new_dns_name:
305
+ status, created = DNSStatus.objects.get_or_create(ip_address=ip_address)
306
+
307
+ dns_create.delay(
308
+ dns_name=new_dns_name,
309
+ address=new_address,
310
+ status=status,
311
+ forward=False,
312
+ )
313
+ counter += 1
314
+
315
+ messages.info(
316
+ request, _("Updating {count} reverse records in {name}").format(
317
+ count=counter,
318
+ name=reversezone.name
319
+ )
320
+ )
321
+ return redirect(reversezone.get_absolute_url())
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: netbox-ddns
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: Dynamic DNS Connector for NetBox
5
5
  Home-page: https://github.com/sjm-steffann/netbox-ddns
6
6
  Author: Sander Steffann
@@ -0,0 +1,47 @@
1
+ netbox_ddns/__init__.py,sha256=UtIar40H5eO-n802D0-MRAAFeqQouOTjB0aaaZvA9qU,652
2
+ netbox_ddns/admin.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ netbox_ddns/background_tasks.py,sha256=oCw6V3aas1Q1C8ftsn1TisrJ0JU51sdDt_iTlm-ZNmk,7070
4
+ netbox_ddns/filtersets.py,sha256=nhHgkef7IqUA9ljyFn5rTuFYl4wKHzMkPfbLMCeHMtk,828
5
+ netbox_ddns/forms.py,sha256=ERHgLdmEyJfHLp1R4PxOEmmWNKNeZUSImTChjuftxW8,1520
6
+ netbox_ddns/models.py,sha256=C5XcotUzYHLFbdffr1mdM3p6XFT_WvjOr70g-vFoReg,13926
7
+ netbox_ddns/navigation.py,sha256=PiDri64dpW2MCiFZBst_YDEhKfeYwG58BvxIfzhQDFc,1899
8
+ netbox_ddns/search.py,sha256=G07DBvjOzKNjbtm9d6_n___GKXQyJ2aCfSDjPRdRzGs,212
9
+ netbox_ddns/signals.py,sha256=yHkgZImnyTqRwPXAr2W9bd4rJof7YblkylJnDn1_FDc,4185
10
+ netbox_ddns/tables.py,sha256=yKZq_yo8RtqDGrTxQdQ1UVTDAWCcJvB_S36o74NLPSQ,1376
11
+ netbox_ddns/template_content.py,sha256=eHFkkH5X5JcKLA1d7Qj_ooG1zD84ebI43mKqGzhafgs,2122
12
+ netbox_ddns/urls.py,sha256=gBHvHlfWwQfQPBkl47v73PDDuIhgjGs4hUkCkCJSQbA,1543
13
+ netbox_ddns/utils.py,sha256=qAomseFWGL_VvL0sPF3Zmb6taMl3P9eEASqbMunmoyA,901
14
+ netbox_ddns/validators.py,sha256=K8EzI6D-Mm_H3Es6LzzXx5ntBDsr8tY79_DHZmbamWM,851
15
+ netbox_ddns/views.py,sha256=X01Hc6chcrPyVWYwWsx8nrXMfsx10_OU3GVB3XtNbDE,10275
16
+ netbox_ddns/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ netbox_ddns/api/serializers.py,sha256=8rQUNLIIoUOz2M7AHKxdedDIS7QAMUSdrnMcTWuwG78,1098
18
+ netbox_ddns/api/urls.py,sha256=eoDxcu9tvR31xtTu0QebvTPqsCpckJfTqFj6Pm6-EyY,204
19
+ netbox_ddns/api/views.py,sha256=9P5vqubPTd0MYOrApnmDYSzjdEo9kmq0BcjVqUFtIA8,362
20
+ netbox_ddns/migrations/0001_initial.py,sha256=pYwGDj9C3mPUuc8lfiXqTOYEhZ-MpGhLywGRulHcZQA,2461
21
+ netbox_ddns/migrations/0002_add_ttl.py,sha256=HP_lzWLZeSzgkIFFiGUgdzkPDRYt48uNwNTdAFwEwdg,617
22
+ netbox_ddns/migrations/0003_dnsstatus.py,sha256=TBQltrJeyk9q24_WdFpnUfMbV2-1VDt3ADuXN65bVJw,1200
23
+ netbox_ddns/migrations/0004_ensure_trailing_dot.py,sha256=SxKzmMC8IaO9ZDGRPzI3tWWt6AT0q01Dg1tY60mc1Mc,1243
24
+ netbox_ddns/migrations/0005_extradnsname.py,sha256=80f8OANyKpOa5LMZPQgRBdFQQ7ELjUeE0AU4fw5p114,1429
25
+ netbox_ddns/migrations/0006_extradns_cname.py,sha256=-To2qntWjzhnn3eTUX0JZRtf79NU06hkTJKs3CmTJiM,456
26
+ netbox_ddns/migrations/0007_zone_meta.py,sha256=iKHEk-KUJYbaAvuXL6YrsZsMcEPCYqs0EoEb6hRr_m8,416
27
+ netbox_ddns/migrations/0008_server_server_port.py,sha256=qqCMbOVJgxNmoEd2WofNy6QT6QbsiiML_ZzAaXuo0WI,530
28
+ netbox_ddns/migrations/0009_alter_dnsstatus_id_alter_extradnsname_id_and_more.py,sha256=3pjw6MqigeunuaHX011a2-yzxhwG3cELmtp4pmTx_BQ,1204
29
+ netbox_ddns/migrations/0010_extradnsname_created_extradnsname_custom_field_data_and_more.py,sha256=4bpm4nZLCHU0CqnCF6qWGtZd5x9flKrhJYRuAGFycwA,1157
30
+ netbox_ddns/migrations/0011_server_created_server_custom_field_data_and_more.py,sha256=D0resBMdiy7JEznlq1Fcw018CPFZFIn7lEBp5sC6frU,1133
31
+ netbox_ddns/migrations/0012_zone_created_zone_custom_field_data_and_more.py,sha256=5Rx21TsOxbb-bFRWceRTzBWVuw2b9p70w9yha7SfizE,1113
32
+ netbox_ddns/migrations/0013_reversezone_created_reversezone_custom_field_data_and_more.py,sha256=BTo5lpO9NZMwHOCiOhINMfp4aFeIQXkXLQ5HKTARIk0,1137
33
+ netbox_ddns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ netbox_ddns/templates/netbox_ddns/extradnsname.html,sha256=noeIxirmaaxBFCCbhCloIfctGQGY7JRi92z19by7e8s,2630
35
+ netbox_ddns/templates/netbox_ddns/reversezone.html,sha256=Ez5su5iqpbwZbRP8LUS0qcojWrnukyTtWBSLVGjI8MQ,1787
36
+ netbox_ddns/templates/netbox_ddns/server.html,sha256=C1MdMk-d3PRjdgEhUngqGVv5MDiYjayrdFOnJTsozxg,2449
37
+ netbox_ddns/templates/netbox_ddns/update_reverse_zone.html,sha256=oF01zNC5sDJVhoWzoj7jQxZqaBE9xvZRsJ-JmI5zonI,429
38
+ netbox_ddns/templates/netbox_ddns/update_zone.html,sha256=76o3CI7CbaJh6VDtAq2SgeW-kLGmY8SjYlkTfLDE8hw,422
39
+ netbox_ddns/templates/netbox_ddns/zone.html,sha256=j1xHfagwx7hEuOWT5h4YIwGkKD9KM3guYtzZsdYhi8o,1912
40
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html,sha256=8lk_HTcDiXugbHMq2hsOdjRB3gv-HX9XnrvZJVHnpoA,724
41
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_info.html,sha256=x4cpUovY3ZxmFoJeTLeqNUIw4ezoBkNfsYaRA6abUh4,1714
42
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html,sha256=BBFwn2AP9PHfaU1ieYoB6X2eX84pPrUYYILbwYiKApc,430
43
+ netbox_ddns-1.5.0.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
44
+ netbox_ddns-1.5.0.dist-info/METADATA,sha256=z9VdpNI1Xw62cffAK0eGaWyavsKQw5oikYpD-XoCVUA,2266
45
+ netbox_ddns-1.5.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
46
+ netbox_ddns-1.5.0.dist-info/top_level.txt,sha256=nSPx7dwqPj2hyzG2H0ohzHt0kkyzA-6M3zYRL6qAm-s,12
47
+ netbox_ddns-1.5.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,38 +0,0 @@
1
- netbox_ddns/__init__.py,sha256=IZOC5tt2ftbeV5deUVxlZZ_W19rc-sjm4PpGcEtqb8s,652
2
- netbox_ddns/admin.py,sha256=cCi0PnfuNv9PSygWbjFCh0ah6F0m3Ty0C3L-VtQYkFg,5658
3
- netbox_ddns/background_tasks.py,sha256=oCw6V3aas1Q1C8ftsn1TisrJ0JU51sdDt_iTlm-ZNmk,7070
4
- netbox_ddns/filtersets.py,sha256=dv2jGdhtBVeDu2sSxO9E8tJI6byhQcLdFGrK8XTvxXc,245
5
- netbox_ddns/forms.py,sha256=zxj7IDk6kLxb-Z4HBcPH_-VuHP8bxfy2eEeKuYuf6Gg,188
6
- netbox_ddns/models.py,sha256=me_0d4F3U0CEDNZAuhDNh9PaYY6IwIweo68INzDoTJE,12048
7
- netbox_ddns/search.py,sha256=G07DBvjOzKNjbtm9d6_n___GKXQyJ2aCfSDjPRdRzGs,212
8
- netbox_ddns/signals.py,sha256=yHkgZImnyTqRwPXAr2W9bd4rJof7YblkylJnDn1_FDc,4185
9
- netbox_ddns/tables.py,sha256=v3VVoVc6Nscu46QZeptewroof40U_9T_a5yrvuaATIQ,1682
10
- netbox_ddns/template_content.py,sha256=cnv3dOUd1LiidpSH2bMtYCs15sDcHLlqRv4cwfoeKNQ,1228
11
- netbox_ddns/urls.py,sha256=m7Y86NHch-dNBOt_vn-3CEIiWyoEqReAfTHYRjLsFsk,946
12
- netbox_ddns/utils.py,sha256=qAomseFWGL_VvL0sPF3Zmb6taMl3P9eEASqbMunmoyA,901
13
- netbox_ddns/validators.py,sha256=K8EzI6D-Mm_H3Es6LzzXx5ntBDsr8tY79_DHZmbamWM,851
14
- netbox_ddns/views.py,sha256=We1hUOmj9WH78BV-IKYO1OArXeCJaJoCrKD3XY5H6oo,5622
15
- netbox_ddns/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- netbox_ddns/api/serializers.py,sha256=JtLoVrd7PB5DS-FGwKuOU393QMKbWEzqze31rLXInw8,616
17
- netbox_ddns/api/urls.py,sha256=eoDxcu9tvR31xtTu0QebvTPqsCpckJfTqFj6Pm6-EyY,204
18
- netbox_ddns/api/views.py,sha256=gaIYp6fKOkvmgdeWo7qrRYKOG6Fzs95uqnwQ1YjHd4w,361
19
- netbox_ddns/migrations/0001_initial.py,sha256=pYwGDj9C3mPUuc8lfiXqTOYEhZ-MpGhLywGRulHcZQA,2461
20
- netbox_ddns/migrations/0002_add_ttl.py,sha256=HP_lzWLZeSzgkIFFiGUgdzkPDRYt48uNwNTdAFwEwdg,617
21
- netbox_ddns/migrations/0003_dnsstatus.py,sha256=TBQltrJeyk9q24_WdFpnUfMbV2-1VDt3ADuXN65bVJw,1200
22
- netbox_ddns/migrations/0004_ensure_trailing_dot.py,sha256=SxKzmMC8IaO9ZDGRPzI3tWWt6AT0q01Dg1tY60mc1Mc,1243
23
- netbox_ddns/migrations/0005_extradnsname.py,sha256=80f8OANyKpOa5LMZPQgRBdFQQ7ELjUeE0AU4fw5p114,1429
24
- netbox_ddns/migrations/0006_extradns_cname.py,sha256=-To2qntWjzhnn3eTUX0JZRtf79NU06hkTJKs3CmTJiM,456
25
- netbox_ddns/migrations/0007_zone_meta.py,sha256=iKHEk-KUJYbaAvuXL6YrsZsMcEPCYqs0EoEb6hRr_m8,416
26
- netbox_ddns/migrations/0008_server_server_port.py,sha256=qqCMbOVJgxNmoEd2WofNy6QT6QbsiiML_ZzAaXuo0WI,530
27
- netbox_ddns/migrations/0009_alter_dnsstatus_id_alter_extradnsname_id_and_more.py,sha256=3pjw6MqigeunuaHX011a2-yzxhwG3cELmtp4pmTx_BQ,1204
28
- netbox_ddns/migrations/0010_extradnsname_created_extradnsname_custom_field_data_and_more.py,sha256=4bpm4nZLCHU0CqnCF6qWGtZd5x9flKrhJYRuAGFycwA,1157
29
- netbox_ddns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- netbox_ddns/templates/netbox_ddns/extradnsname.html,sha256=yWxangwanerD-poPxCLql3y-ojzoFCFRVGzVEwfzMNk,6234
31
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html,sha256=80fVzSSQUY1b5wfN_fLqbp_oCpByOlVsEQx5ezj2F_w,713
32
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_info.html,sha256=x4cpUovY3ZxmFoJeTLeqNUIw4ezoBkNfsYaRA6abUh4,1714
33
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html,sha256=BBFwn2AP9PHfaU1ieYoB6X2eX84pPrUYYILbwYiKApc,430
34
- netbox_ddns-1.4.0.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
35
- netbox_ddns-1.4.0.dist-info/METADATA,sha256=t8W8fHcCq9L2BnReAtSVgeuzLEIRV2OWuoGVZJnQAns,2266
36
- netbox_ddns-1.4.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
37
- netbox_ddns-1.4.0.dist-info/top_level.txt,sha256=nSPx7dwqPj2hyzG2H0ohzHt0kkyzA-6M3zYRL6qAm-s,12
38
- netbox_ddns-1.4.0.dist-info/RECORD,,