ipfabric_netbox 4.2.2b1__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/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/delete/",
28
- views.IPFabricSyncBulkDeleteView.as_view(),
29
- name="ipfabricsync_bulk_delete",
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
- path(
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.tm_restore"
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.ipfabrictransformmap_add"
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 = obj
257
- new_map.pk = None
258
- new_map.id = None
259
- new_map.name = form.cleaned_data["name"]
260
- new_map.group = form.cleaned_data["group"]
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
- field.pk = None
269
- field.id = None
270
- field.transform_map = new_map
271
- field.full_clean()
272
- field.save()
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
- rel.pk = None
278
- rel.id = None
279
- rel.transform_map = new_map
280
- rel.full_clean()
281
- rel.save()
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=[obj.pk]
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(LoginRequiredMixin, View):
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
- print(kwargs)
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
- # return render(
450
- # request,
451
- # self.template_name,
452
- # {
453
- # "change": change,
454
- # "prechange_data": prechange_data,
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.sync_source"
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.start_sync"
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 = IPFabricSnapshotTable
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.merge_ingestion"
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
- raise ValidationError("Form is not valid.")
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, model, **kwargs):
779
- def _return_empty():
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
- snapshot_id = ""
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 = IPFabricSource.objects.get(
917
- pk=device.custom_field_data["ipfabric_source"]
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
- source = None
965
-
966
- if source_id := device.custom_field_data["ipfabric_source"]:
967
- source = IPFabricSource.objects.get(pk=source_id)
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 None
1072
+ return render(
1073
+ request,
1074
+ self.template_name,
1075
+ {
1076
+ "site": site,
1077
+ "size": "xl",
1078
+ "time": timezone.now(),
1079
+ },
1080
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipfabric_netbox
3
- Version: 4.2.2b1
3
+ Version: 4.2.2b3
4
4
  Summary: NetBox plugin to sync IP Fabric data into NetBox
5
5
  License: MIT
6
6
  Keywords: netbox,ipfabric,plugin,sync
@@ -1,4 +1,4 @@
1
- ipfabric_netbox/__init__.py,sha256=MBjOH1k9VEDfKASd99apzOz3HzJWEt2AQDcNbcaxI_8,674
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=-H8KZ7aqtDrvotsL698kRKfvUngnLolnIVgYLfmt3UQ,43212
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=T2VOnlKyWkYpwnsGkkgt5-zwvVbxT1eqTnEfCvTV5jc,36072
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=ZT0uxqaC-Xnvrvm3nr89P9r43vsIuie3xcXIuT0UCN0,959
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=d5qcBeKDgh57eSZ6J1oYc--qfGmHRC6PLhrffFBQiM8,1631
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=cuvOBKnlMudMI-CX77W3vTpwhtc4CBcc6j6Ye-IBBMQ,2562
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/urls.py,sha256=ok66LP09rYi01qJmwdGGlBzV9wrGWVwVAIngPcreJxg,5449
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=CzOxq1IXkUtZFQccC5WkwGOb9mE6tlbbBNTN8kOlqCQ,36662
83
- ipfabric_netbox-4.2.2b1.dist-info/METADATA,sha256=XOEtfiqXpPBZRVhu_8O0oF5uAhUDgPF1EZMNPAbJzFo,4689
84
- ipfabric_netbox-4.2.2b1.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
85
- ipfabric_netbox-4.2.2b1.dist-info/RECORD,,
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,,