ipfabric_netbox 4.2.2b2__py3-none-any.whl → 4.2.2b3__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 ipfabric_netbox might be problematic. Click here for more details.
- ipfabric_netbox/__init__.py +1 -1
- ipfabric_netbox/forms.py +2 -2
- ipfabric_netbox/models.py +13 -0
- ipfabric_netbox/template_content.py +8 -5
- ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html +1 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html +1 -1
- ipfabric_netbox/tests/test_views.py +2153 -0
- ipfabric_netbox/urls.py +15 -14
- ipfabric_netbox/views.py +100 -70
- {ipfabric_netbox-4.2.2b2.dist-info → ipfabric_netbox-4.2.2b3.dist-info}/METADATA +1 -1
- {ipfabric_netbox-4.2.2b2.dist-info → ipfabric_netbox-4.2.2b3.dist-info}/RECORD +12 -11
- {ipfabric_netbox-4.2.2b2.dist-info → ipfabric_netbox-4.2.2b3.dist-info}/WHEEL +0 -0
ipfabric_netbox/urls.py
CHANGED
|
@@ -15,18 +15,13 @@ urlpatterns = (
|
|
|
15
15
|
views.IPFabricSourceBulkDeleteView.as_view(),
|
|
16
16
|
name="ipfabricsource_bulk_delete",
|
|
17
17
|
),
|
|
18
|
-
path(
|
|
19
|
-
"source/<int:pk>/delete/",
|
|
20
|
-
views.IPFabricSourceDeleteView.as_view(),
|
|
21
|
-
name="ipfabricsource_delete",
|
|
22
|
-
),
|
|
23
18
|
path(
|
|
24
19
|
"source/<int:pk>/", include(get_model_urls("ipfabric_netbox", "ipfabricsource"))
|
|
25
20
|
),
|
|
26
21
|
path(
|
|
27
|
-
"source
|
|
28
|
-
views.
|
|
29
|
-
name="
|
|
22
|
+
"source/<int:pk>/delete/",
|
|
23
|
+
views.IPFabricSourceDeleteView.as_view(),
|
|
24
|
+
name="ipfabricsource_delete",
|
|
30
25
|
),
|
|
31
26
|
# Snapshot
|
|
32
27
|
path(
|
|
@@ -48,20 +43,26 @@ urlpatterns = (
|
|
|
48
43
|
views.IPFabricSnapshotDeleteView.as_view(),
|
|
49
44
|
name="ipfabricsnapshot_delete",
|
|
50
45
|
),
|
|
51
|
-
|
|
52
|
-
"data/<int:pk>/delete",
|
|
53
|
-
views.IPFabricSnapshotDataDeleteView.as_view(),
|
|
54
|
-
name="ipfabricdata_delete",
|
|
55
|
-
),
|
|
56
|
-
path("data/<int:pk>/", include(get_model_urls("ipfabric_netbox", "ipfabricdata"))),
|
|
46
|
+
# Snapshot Data
|
|
57
47
|
path(
|
|
58
48
|
"data/delete",
|
|
59
49
|
views.IPFabricSnapshotDataBulkDeleteView.as_view(),
|
|
60
50
|
name="ipfabricdata_bulk_delete",
|
|
61
51
|
),
|
|
52
|
+
path("data/<int:pk>/", include(get_model_urls("ipfabric_netbox", "ipfabricdata"))),
|
|
53
|
+
path(
|
|
54
|
+
"data/<int:pk>/delete",
|
|
55
|
+
views.IPFabricSnapshotDataDeleteView.as_view(),
|
|
56
|
+
name="ipfabricdata_delete",
|
|
57
|
+
),
|
|
62
58
|
# Sync
|
|
63
59
|
path("sync/", views.IPFabricSyncListView.as_view(), name="ipfabricsync_list"),
|
|
64
60
|
path("sync/add/", views.IPFabricSyncEditView.as_view(), name="ipfabricsync_add"),
|
|
61
|
+
path(
|
|
62
|
+
"sync/delete/",
|
|
63
|
+
views.IPFabricSyncBulkDeleteView.as_view(),
|
|
64
|
+
name="ipfabricsync_bulk_delete",
|
|
65
|
+
),
|
|
65
66
|
path("sync/<int:pk>/", include(get_model_urls("ipfabric_netbox", "ipfabricsync"))),
|
|
66
67
|
path(
|
|
67
68
|
"sync/<int:pk>/delete/",
|
ipfabric_netbox/views.py
CHANGED
|
@@ -170,7 +170,7 @@ class IPFabricTransformMapRestoreView(generic.ObjectListView):
|
|
|
170
170
|
table = IPFabricTransformMapTable
|
|
171
171
|
|
|
172
172
|
def get_required_permission(self):
|
|
173
|
-
return "ipfabric_netbox.
|
|
173
|
+
return "ipfabric_netbox.restore_ipfabrictransformmap"
|
|
174
174
|
|
|
175
175
|
def get(self, request):
|
|
176
176
|
if request.htmx:
|
|
@@ -197,6 +197,7 @@ class IPFabricTransformMapRestoreView(generic.ObjectListView):
|
|
|
197
197
|
"dependent_objects": dependent_objects,
|
|
198
198
|
},
|
|
199
199
|
)
|
|
200
|
+
return redirect(reverse("plugins:ipfabric_netbox:ipfabrictransformmap_list"))
|
|
200
201
|
|
|
201
202
|
def post(self, request):
|
|
202
203
|
IPFabricTransformMap.objects.filter(group__isnull=True).delete()
|
|
@@ -218,7 +219,7 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
218
219
|
form = IPFabricTransformMapCloneForm
|
|
219
220
|
|
|
220
221
|
def get_required_permission(self):
|
|
221
|
-
return "ipfabric_netbox.
|
|
222
|
+
return "ipfabric_netbox.clone_ipfabrictransformmap"
|
|
222
223
|
|
|
223
224
|
def get(self, request, pk):
|
|
224
225
|
obj = get_object_or_404(self.queryset, pk=pk)
|
|
@@ -252,36 +253,40 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
252
253
|
relationships = IPFabricRelationshipField.objects.filter(
|
|
253
254
|
transform_map=obj
|
|
254
255
|
)
|
|
255
|
-
# Clone the transform map
|
|
256
|
-
new_map =
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
256
|
+
# Clone the transform map - create a proper copy using Django model copying
|
|
257
|
+
new_map = IPFabricTransformMap(
|
|
258
|
+
name=form.cleaned_data["name"],
|
|
259
|
+
source_model=obj.source_model,
|
|
260
|
+
target_model=obj.target_model,
|
|
261
|
+
group=form.cleaned_data["group"],
|
|
262
|
+
)
|
|
261
263
|
new_map.full_clean()
|
|
262
264
|
new_map.save()
|
|
263
|
-
new_map.refresh_from_db()
|
|
264
265
|
|
|
265
266
|
# Clone related transform fields
|
|
266
267
|
if form.cleaned_data["clone_fields"]:
|
|
267
268
|
for field in fields:
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
269
|
+
IPFabricTransformField.objects.create(
|
|
270
|
+
transform_map=new_map,
|
|
271
|
+
source_field=field.source_field,
|
|
272
|
+
target_field=field.target_field,
|
|
273
|
+
coalesce=field.coalesce,
|
|
274
|
+
template=field.template,
|
|
275
|
+
)
|
|
273
276
|
|
|
274
277
|
# Clone related relationship fields
|
|
275
278
|
if form.cleaned_data["clone_relationships"]:
|
|
276
279
|
for rel in relationships:
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
IPFabricRelationshipField.objects.create(
|
|
281
|
+
transform_map=new_map,
|
|
282
|
+
source_model=rel.source_model,
|
|
283
|
+
target_field=rel.target_field,
|
|
284
|
+
coalesce=rel.coalesce,
|
|
285
|
+
template=rel.template,
|
|
286
|
+
)
|
|
282
287
|
|
|
283
288
|
return_url = reverse(
|
|
284
|
-
"plugins:ipfabric_netbox:ipfabrictransformmap", args=[
|
|
289
|
+
"plugins:ipfabric_netbox:ipfabrictransformmap", args=[new_map.pk]
|
|
285
290
|
)
|
|
286
291
|
if request.htmx:
|
|
287
292
|
response = HttpResponse()
|
|
@@ -289,7 +294,7 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
289
294
|
return response
|
|
290
295
|
return redirect(return_url)
|
|
291
296
|
except ValidationError as err:
|
|
292
|
-
if not err.error_dict:
|
|
297
|
+
if not hasattr(err, "error_dict") or not err.error_dict:
|
|
293
298
|
form.add_error(None, err)
|
|
294
299
|
else:
|
|
295
300
|
# This serves to show errors in the form directly
|
|
@@ -299,6 +304,8 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
299
304
|
else:
|
|
300
305
|
form.add_error(None, error)
|
|
301
306
|
if request.htmx:
|
|
307
|
+
viewname = get_viewname(self.queryset.model, action="clone")
|
|
308
|
+
form_url = reverse(viewname, kwargs={"pk": obj.pk})
|
|
302
309
|
response = render(
|
|
303
310
|
request,
|
|
304
311
|
"ipfabric_netbox/inc/clone_form.html",
|
|
@@ -306,6 +313,7 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
306
313
|
"form": form,
|
|
307
314
|
"object": obj,
|
|
308
315
|
"pk": pk,
|
|
316
|
+
"form_url": form_url,
|
|
309
317
|
},
|
|
310
318
|
)
|
|
311
319
|
response["X-Debug-HTMX-Partial"] = "true"
|
|
@@ -316,6 +324,7 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
316
324
|
{
|
|
317
325
|
"form": form,
|
|
318
326
|
"object": obj,
|
|
327
|
+
"pk": pk,
|
|
319
328
|
},
|
|
320
329
|
)
|
|
321
330
|
|
|
@@ -429,15 +438,13 @@ class IPFabricSnapshotDataBulkDeleteView(generic.BulkDeleteView):
|
|
|
429
438
|
path="json",
|
|
430
439
|
kwargs={},
|
|
431
440
|
)
|
|
432
|
-
class IPFabricSnapshotDataJSONView(
|
|
441
|
+
class IPFabricSnapshotDataJSONView(generic.ObjectView):
|
|
442
|
+
queryset = IPFabricData.objects.all()
|
|
433
443
|
template_name = "ipfabric_netbox/inc/json.html"
|
|
434
444
|
|
|
435
445
|
def get(self, request, **kwargs):
|
|
436
|
-
|
|
437
|
-
# change_id = kwargs.get("change_pk", None)
|
|
438
|
-
|
|
446
|
+
data = get_object_or_404(IPFabricData, pk=kwargs.get("pk"))
|
|
439
447
|
if request.htmx:
|
|
440
|
-
data = get_object_or_404(IPFabricData, pk=kwargs.get("pk"))
|
|
441
448
|
return render(
|
|
442
449
|
request,
|
|
443
450
|
self.template_name,
|
|
@@ -445,19 +452,13 @@ class IPFabricSnapshotDataJSONView(LoginRequiredMixin, View):
|
|
|
445
452
|
"object": data,
|
|
446
453
|
},
|
|
447
454
|
)
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
# "postchange_data": postchange_data,
|
|
456
|
-
# "diff_added": diff_added,
|
|
457
|
-
# "diff_removed": diff_removed,
|
|
458
|
-
# "size": "lg",
|
|
459
|
-
# },
|
|
460
|
-
# )
|
|
455
|
+
return render(
|
|
456
|
+
request,
|
|
457
|
+
self.template_name,
|
|
458
|
+
{
|
|
459
|
+
"object": data,
|
|
460
|
+
},
|
|
461
|
+
)
|
|
461
462
|
|
|
462
463
|
|
|
463
464
|
# Source
|
|
@@ -498,7 +499,7 @@ class IPFabricSourceSyncView(BaseObjectView):
|
|
|
498
499
|
queryset = IPFabricSource.objects.all()
|
|
499
500
|
|
|
500
501
|
def get_required_permission(self):
|
|
501
|
-
return "ipfabric_netbox.
|
|
502
|
+
return "ipfabric_netbox.sync_ipfabricsource"
|
|
502
503
|
|
|
503
504
|
def get(self, request, pk):
|
|
504
505
|
ipfabricsource = get_object_or_404(self.queryset, pk=pk)
|
|
@@ -594,7 +595,7 @@ class IPFabricStartSyncView(BaseObjectView):
|
|
|
594
595
|
queryset = IPFabricSync.objects.all()
|
|
595
596
|
|
|
596
597
|
def get_required_permission(self):
|
|
597
|
-
return "ipfabric_netbox.
|
|
598
|
+
return "ipfabric_netbox.start_ipfabricsync"
|
|
598
599
|
|
|
599
600
|
def get(self, request, pk):
|
|
600
601
|
ipfabric = get_object_or_404(self.queryset, pk=pk)
|
|
@@ -617,7 +618,7 @@ class IPFabricSyncDeleteView(generic.ObjectDeleteView):
|
|
|
617
618
|
class IPFabricSyncBulkDeleteView(generic.BulkDeleteView):
|
|
618
619
|
queryset = IPFabricSync.objects.all()
|
|
619
620
|
filterset = IPFabricSnapshotFilterSet
|
|
620
|
-
table =
|
|
621
|
+
table = IPFabricSyncTable
|
|
621
622
|
|
|
622
623
|
|
|
623
624
|
@register_model_view(IPFabricSync, "transformmaps")
|
|
@@ -691,13 +692,12 @@ class IPFabricIngestionLogView(LoginRequiredMixin, View):
|
|
|
691
692
|
|
|
692
693
|
def get(self, request, **kwargs):
|
|
693
694
|
ingestion_id = kwargs.get("pk")
|
|
695
|
+
ingestion = annotate_statistics(IPFabricIngestion.objects).get(pk=ingestion_id)
|
|
696
|
+
data = ingestion.get_statistics()
|
|
697
|
+
data["object"] = ingestion
|
|
698
|
+
data["job"] = ingestion.jobs.first()
|
|
699
|
+
|
|
694
700
|
if request.htmx:
|
|
695
|
-
ingestion = annotate_statistics(IPFabricIngestion.objects).get(
|
|
696
|
-
pk=ingestion_id
|
|
697
|
-
)
|
|
698
|
-
data = ingestion.get_statistics()
|
|
699
|
-
data["object"] = ingestion
|
|
700
|
-
data["job"] = ingestion.jobs.first()
|
|
701
701
|
response = render(
|
|
702
702
|
request,
|
|
703
703
|
self.template_name,
|
|
@@ -706,7 +706,7 @@ class IPFabricIngestionLogView(LoginRequiredMixin, View):
|
|
|
706
706
|
if ingestion.job.completed:
|
|
707
707
|
response["HX-Refresh"] = "true"
|
|
708
708
|
return response
|
|
709
|
-
return render(request, self.template_name)
|
|
709
|
+
return render(request, self.template_name, data)
|
|
710
710
|
|
|
711
711
|
|
|
712
712
|
@register_model_view(IPFabricIngestion)
|
|
@@ -729,7 +729,7 @@ class IPFabricIngestionMergeView(BaseObjectView):
|
|
|
729
729
|
form = IPFabricIngestionMergeForm
|
|
730
730
|
|
|
731
731
|
def get_required_permission(self):
|
|
732
|
-
return "ipfabric_netbox.
|
|
732
|
+
return "ipfabric_netbox.merge_ipfabricingestion"
|
|
733
733
|
|
|
734
734
|
def get(self, request, pk):
|
|
735
735
|
obj = get_object_or_404(self.queryset, pk=pk)
|
|
@@ -763,7 +763,16 @@ class IPFabricIngestionMergeView(BaseObjectView):
|
|
|
763
763
|
)
|
|
764
764
|
messages.success(request, f"Queued job #{job.pk} to sync {ingestion}")
|
|
765
765
|
return redirect(ingestion.get_absolute_url())
|
|
766
|
-
|
|
766
|
+
|
|
767
|
+
# Handle invalid form - add form errors to messages and redirect back
|
|
768
|
+
for field, errors in form.errors.items():
|
|
769
|
+
for error in errors:
|
|
770
|
+
messages.error(request, f"{field}: {error}")
|
|
771
|
+
if form.non_field_errors():
|
|
772
|
+
for error in form.non_field_errors():
|
|
773
|
+
messages.error(request, error)
|
|
774
|
+
|
|
775
|
+
return redirect(ingestion.get_absolute_url())
|
|
767
776
|
|
|
768
777
|
|
|
769
778
|
@register_model_view(
|
|
@@ -775,8 +784,10 @@ class IPFabricIngestionMergeView(BaseObjectView):
|
|
|
775
784
|
class IPFabricIngestionChangesDiffView(LoginRequiredMixin, View):
|
|
776
785
|
template_name = "ipfabric_netbox/inc/diff.html"
|
|
777
786
|
|
|
778
|
-
def get(self, request,
|
|
779
|
-
|
|
787
|
+
def get(self, request, **kwargs):
|
|
788
|
+
change_id = kwargs.get("change_pk", None)
|
|
789
|
+
|
|
790
|
+
if not request.htmx or not change_id:
|
|
780
791
|
return render(
|
|
781
792
|
request,
|
|
782
793
|
self.template_name,
|
|
@@ -790,13 +801,6 @@ class IPFabricIngestionChangesDiffView(LoginRequiredMixin, View):
|
|
|
790
801
|
},
|
|
791
802
|
)
|
|
792
803
|
|
|
793
|
-
change_id = kwargs.get("change_pk", None)
|
|
794
|
-
|
|
795
|
-
if not request.htmx:
|
|
796
|
-
return _return_empty()
|
|
797
|
-
if not change_id:
|
|
798
|
-
return _return_empty()
|
|
799
|
-
|
|
800
804
|
change = ChangeDiff.objects.get(pk=change_id)
|
|
801
805
|
if change.original and change.modified:
|
|
802
806
|
diff_added = shallow_compare_dict(
|
|
@@ -901,6 +905,7 @@ class IPFabricTable(View):
|
|
|
901
905
|
)
|
|
902
906
|
restrict_form_fields(form, request.user)
|
|
903
907
|
data = None
|
|
908
|
+
source = None
|
|
904
909
|
|
|
905
910
|
if form.is_valid():
|
|
906
911
|
table = form.cleaned_data["table"]
|
|
@@ -909,17 +914,33 @@ class IPFabricTable(View):
|
|
|
909
914
|
"False": False,
|
|
910
915
|
}
|
|
911
916
|
cache_enable = test.get(form.cleaned_data["cache_enable"])
|
|
912
|
-
|
|
917
|
+
source = form.cleaned_data.get("source")
|
|
913
918
|
|
|
914
919
|
if not form.cleaned_data["snapshot_data"]:
|
|
915
920
|
snapshot_id = "$last"
|
|
916
|
-
source =
|
|
917
|
-
|
|
921
|
+
source = (
|
|
922
|
+
source
|
|
923
|
+
or IPFabricSource.objects.filter(
|
|
924
|
+
pk=device.custom_field_data.get("ipfabric_source")
|
|
925
|
+
).first()
|
|
926
|
+
or IPFabricSource.get_for_site(device.site).first()
|
|
918
927
|
)
|
|
919
|
-
|
|
920
928
|
else:
|
|
921
929
|
snapshot_id = form.cleaned_data["snapshot_data"].snapshot_id
|
|
922
|
-
source = form.cleaned_data["snapshot_data"].source
|
|
930
|
+
source = source or form.cleaned_data["snapshot_data"].source
|
|
931
|
+
|
|
932
|
+
if source is None:
|
|
933
|
+
return render(
|
|
934
|
+
request,
|
|
935
|
+
self.template_name,
|
|
936
|
+
{
|
|
937
|
+
"object": device,
|
|
938
|
+
"source": source,
|
|
939
|
+
"tab": self.tab,
|
|
940
|
+
"form": form,
|
|
941
|
+
"table": table,
|
|
942
|
+
},
|
|
943
|
+
)
|
|
923
944
|
|
|
924
945
|
source.parameters["snapshot_id"] = snapshot_id
|
|
925
946
|
source.parameters["base_url"] = source.url
|
|
@@ -961,10 +982,11 @@ class IPFabricTable(View):
|
|
|
961
982
|
},
|
|
962
983
|
)
|
|
963
984
|
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
985
|
+
if not source:
|
|
986
|
+
if source_id := device.custom_field_data.get("ipfabric_source"):
|
|
987
|
+
source = IPFabricSource.objects.filter(pk=source_id).first()
|
|
988
|
+
else:
|
|
989
|
+
source = IPFabricSource.get_for_site(device.site).first()
|
|
968
990
|
|
|
969
991
|
return render(
|
|
970
992
|
request,
|
|
@@ -1047,4 +1069,12 @@ class IPFabricSourceTopology(LoginRequiredMixin, View):
|
|
|
1047
1069
|
"error": error,
|
|
1048
1070
|
},
|
|
1049
1071
|
)
|
|
1050
|
-
return
|
|
1072
|
+
return render(
|
|
1073
|
+
request,
|
|
1074
|
+
self.template_name,
|
|
1075
|
+
{
|
|
1076
|
+
"site": site,
|
|
1077
|
+
"size": "xl",
|
|
1078
|
+
"time": timezone.now(),
|
|
1079
|
+
},
|
|
1080
|
+
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ipfabric_netbox/__init__.py,sha256=
|
|
1
|
+
ipfabric_netbox/__init__.py,sha256=AZVb97A93_y_k7vzGEVgKEnqe6xe1sYTdaWvIoKLPD0,674
|
|
2
2
|
ipfabric_netbox/api/__init__.py,sha256=XRclTGWVR0ZhAAwgYul5Wm_loug5_hUjEumbLQEwKYM,47
|
|
3
3
|
ipfabric_netbox/api/serializers.py,sha256=7cmVsIzGzz9u6htLKizLr2Ar0OC7uV8rMX3U7EzRmG4,6482
|
|
4
4
|
ipfabric_netbox/api/urls.py,sha256=1fXXVTxNY5E64Nfz6b7zXD9bZI3FcefuxAWKMe0w_QU,1240
|
|
@@ -7,7 +7,7 @@ ipfabric_netbox/choices.py,sha256=27ePh1IUU3zETbceNcAgjsHvqhPlGpayFRFr5luqW1k,50
|
|
|
7
7
|
ipfabric_netbox/data/transform_map.json,sha256=4PsucgMHcLW3SPoKEptQCd0gA5tCF4hjrR4bGQFCWy8,21744
|
|
8
8
|
ipfabric_netbox/exceptions.py,sha256=DT4dpbakvqoROtBR_F0LzvQCMNWpGhufFcUbZTx0OLY,2655
|
|
9
9
|
ipfabric_netbox/filtersets.py,sha256=vaWlxf8DTwduv_aQ35kJxwyzmM1XvE781GjUj2z4QGQ,7845
|
|
10
|
-
ipfabric_netbox/forms.py,sha256=
|
|
10
|
+
ipfabric_netbox/forms.py,sha256=T1iqsHLBXN315TTMGB0XU_iNIi3eju4DzsaWMjftt0M,43205
|
|
11
11
|
ipfabric_netbox/graphql/__init__.py,sha256=-a5w_VY7pc-RVt8MvThkTzeAqCC3xCan4Ue6iMefmjI,754
|
|
12
12
|
ipfabric_netbox/graphql/enums.py,sha256=QFhwiwUKJekxQfsOGk_-70_WnkzrKEP_zIBMrin0S0Q,1343
|
|
13
13
|
ipfabric_netbox/graphql/filters.py,sha256=B8xy9r9a18vWfV6a6tHXAN1FUcoxI6MOrbsdNmzusNI,12991
|
|
@@ -34,11 +34,11 @@ ipfabric_netbox/migrations/0016_tags_and_changelog_for_snapshots.py,sha256=XqftT
|
|
|
34
34
|
ipfabric_netbox/migrations/0017_ipfabricsync_update_custom_fields.py,sha256=IVbAL2WdigYT40sXN0A8K3HweJ_O4QqyzjB06TbkG5E,447
|
|
35
35
|
ipfabric_netbox/migrations/0018_remove_type_field.py,sha256=ffxW6IS3BLCbvM5M9DbDb_x6spMmRxnV1iq8IuXxMGw,385
|
|
36
36
|
ipfabric_netbox/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
ipfabric_netbox/models.py,sha256=
|
|
37
|
+
ipfabric_netbox/models.py,sha256=o3iOsgXUY5bAsx8NGeRtA0W1ZPkBiz5n5Q3spu71nQo,36504
|
|
38
38
|
ipfabric_netbox/navigation.py,sha256=2dEJ_wKHb52Tl0FOV1TH3JbxRe8YZ56ewrTsBFGKpCg,2210
|
|
39
39
|
ipfabric_netbox/signals.py,sha256=cGa5PVD2i24pGXiVNfbu6ruIDqPVdwKQHTSWe9Ura84,1838
|
|
40
40
|
ipfabric_netbox/tables.py,sha256=zJUCoOrJgBNVxOmQrvlUyoD_0_Kq988GjregdcSAa68,8854
|
|
41
|
-
ipfabric_netbox/template_content.py,sha256=
|
|
41
|
+
ipfabric_netbox/template_content.py,sha256=lucsGn5zzEjcwFUx1yvL458HCRPB8CpAH4dJD3R0TJo,1117
|
|
42
42
|
ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html,sha256=K-2TTDaS1F4wUIR8FFFPqex4KJbySXtHiz5V-OEwelY,967
|
|
43
43
|
ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html,sha256=xOiIrvRIBtqDD65u6xcLo2xdwDKNpAylDmzznaJRGCw,3281
|
|
44
44
|
ipfabric_netbox/templates/ipfabric_netbox/inc/json.html,sha256=qPHUdaHyKM9Y7FqBEnYwcNoyp5GMFaexJFXMRf4AqZQ,569
|
|
@@ -49,14 +49,14 @@ ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html,sha256=zj
|
|
|
49
49
|
ipfabric_netbox/templates/ipfabric_netbox/inc/snapshotdata.html,sha256=1ItOCPjjp9iH7MLNLIz6x-2NnSa0Wx4bXUYVk-Jn4Y0,2885
|
|
50
50
|
ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html,sha256=mRU-rBweVFvaPFHbVYPw7vcYyXiVaXCOkeHm7xWdKPA,500
|
|
51
51
|
ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html,sha256=qyuG_EXZMGUscA3sv_6WGSrf_bR7JTRlKyMYf6EYyo4,504
|
|
52
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html,sha256=
|
|
52
|
+
ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html,sha256=TsF34lK2CyDsMxlFTk--2lF_0AxYM614eKmkgYAbJ-k,1629
|
|
53
53
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html,sha256=fm_X2FLnoTS6s6AL3WmU6p3puDojROSkPG0jA4EBQeM,4435
|
|
54
54
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html,sha256=hj8ORs_4mM_xTjmw3McHN-da5seC8nbbkzobn0f1TSc,3482
|
|
55
55
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html,sha256=DQOA2TA7f1nI5YpxXthS1VzjIU1kMZus37l6bYSCauE,3869
|
|
56
56
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html,sha256=BicVS7mCP85fFZJEt46GUm5xppi1Jw3byw1el9BB2WE,4448
|
|
57
57
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html,sha256=qFo_Ku5oksx5co4HVtVq0xAVFI6CLWs-iBrwYzGsEGA,1460
|
|
58
58
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html,sha256=p8zqn0-B6mawSUM3zQrus6dsKUM5SRBTO0X94pLboX8,452
|
|
59
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html,sha256=
|
|
59
|
+
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html,sha256=TV7gAZWtSd-c7mzOen_nv7Z8MZr2Vw8vkHP4zW9au4w,2580
|
|
60
60
|
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html,sha256=H3uvjA4PdJq5uX2kizdHV1pAxwcPpyfc9IbJi1ZK5-k,975
|
|
61
61
|
ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_all.html,sha256=W9W31m8b7mGrsfu0f_hE1TcudDqSJ0G2Bp9JE4UTIIE,662
|
|
62
62
|
ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html,sha256=NellDFy1qzgVbCtkOZbiSi3ufau6FOLIQPUoNiU6Bg4,595
|
|
@@ -73,13 +73,14 @@ ipfabric_netbox/tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
73
73
|
ipfabric_netbox/tests/api/test_api.py,sha256=mZp0CUBJb0MUcnfKAWWrQ4Kab11OXtSI9XQtMZ4q40U,30282
|
|
74
74
|
ipfabric_netbox/tests/test_forms.py,sha256=8sW0MHu2MtCDVHoaKM78U1_GioLjQk6UIvgN2Vijvv4,57518
|
|
75
75
|
ipfabric_netbox/tests/test_models.py,sha256=FFrIT5xxv_yvujKpxGjRJPNPBDF2Pqi8zbY0vxuJeQs,16043
|
|
76
|
-
ipfabric_netbox/
|
|
76
|
+
ipfabric_netbox/tests/test_views.py,sha256=znmNjDyJVDKfhhhaOheRb0nQBnncbvZNmA2DEQuKYj8,85259
|
|
77
|
+
ipfabric_netbox/urls.py,sha256=Bb5Znj24DrWJm4IZeI51wwe3KGA45TF4crNZaGBXmro,5467
|
|
77
78
|
ipfabric_netbox/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
79
|
ipfabric_netbox/utilities/ipfutils.py,sha256=wFmL5oriuF-is1ZlrIcLmoeYUY5ih-CA9weRQrx5AiA,31885
|
|
79
80
|
ipfabric_netbox/utilities/logging.py,sha256=GYknjocMN6LQ2873_az3y0RKm29TCXaWviUIIneH-x0,3445
|
|
80
81
|
ipfabric_netbox/utilities/nbutils.py,sha256=kFBEiJOGvr_49hJWCS2duXojx2-A9kVk0Xp_vj0ohfs,2641
|
|
81
82
|
ipfabric_netbox/utilities/transform_map.py,sha256=QotbGc2TksINJrb62STgAigpC5Nsgi5umYHu_0rZd8k,2204
|
|
82
|
-
ipfabric_netbox/views.py,sha256=
|
|
83
|
-
ipfabric_netbox-4.2.
|
|
84
|
-
ipfabric_netbox-4.2.
|
|
85
|
-
ipfabric_netbox-4.2.
|
|
83
|
+
ipfabric_netbox/views.py,sha256=vCfTvEG6gcaiLNLOAfDtezXArDA96jttfwmZLPvFWGs,38174
|
|
84
|
+
ipfabric_netbox-4.2.2b3.dist-info/METADATA,sha256=08mjXZ5Hkoif2W2OoZQv7HnjBDilj-tGCxav0jas0zY,4689
|
|
85
|
+
ipfabric_netbox-4.2.2b3.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
|
|
86
|
+
ipfabric_netbox-4.2.2b3.dist-info/RECORD,,
|
|
File without changes
|