ipfabric_netbox 4.3.1b1__py3-none-any.whl → 4.3.1b3__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.

Files changed (40) hide show
  1. ipfabric_netbox/__init__.py +1 -1
  2. ipfabric_netbox/api/serializers.py +4 -2
  3. ipfabric_netbox/choices.py +56 -20
  4. ipfabric_netbox/filtersets.py +6 -2
  5. ipfabric_netbox/forms.py +24 -19
  6. ipfabric_netbox/graphql/enums.py +10 -3
  7. ipfabric_netbox/graphql/filters.py +4 -3
  8. ipfabric_netbox/jobs.py +6 -5
  9. ipfabric_netbox/models.py +46 -45
  10. ipfabric_netbox/navigation.py +10 -9
  11. ipfabric_netbox/tables.py +12 -10
  12. ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html +7 -4
  13. ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html +10 -8
  14. ipfabric_netbox/templates/ipfabric_netbox/inc/json.html +4 -2
  15. ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html +4 -3
  16. ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html +7 -5
  17. ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html +8 -6
  18. ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html +8 -4
  19. ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html +2 -1
  20. ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html +2 -1
  21. ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html +4 -4
  22. ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html +12 -11
  23. ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html +15 -14
  24. ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html +13 -12
  25. ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html +16 -15
  26. ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html +7 -6
  27. ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html +2 -1
  28. ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html +1 -1
  29. ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html +4 -3
  30. ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html +5 -4
  31. ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html +5 -4
  32. ipfabric_netbox/templates/ipfabric_netbox/partials/job_logs.html +10 -9
  33. ipfabric_netbox/tests/api/test_api.py +6 -5
  34. ipfabric_netbox/tests/test_forms.py +16 -15
  35. ipfabric_netbox/tests/test_views.py +24 -23
  36. ipfabric_netbox/utilities/ipfutils.py +2 -2
  37. ipfabric_netbox/views.py +8 -7
  38. {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/METADATA +1 -1
  39. {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/RECORD +40 -40
  40. {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/WHEEL +0 -0
@@ -1,16 +1,17 @@
1
1
  {% load humanize %}
2
2
  {% load helpers %}
3
+ {% load i18n %}
3
4
 
4
5
  <p>
5
6
  {% if job.started %}
6
- Started: <strong>{{ job.started|isodatetime }}</strong>
7
+ {% trans "Started:" %} <strong>{{ job.started|isodatetime }}</strong>
7
8
  {% elif job.scheduled %}
8
- Scheduled for: <strong>{{ job.scheduled|isodatetime }}</strong> ({{ job.scheduled|naturaltime }})
9
+ {% trans "Scheduled for:" %} <strong>{{ job.scheduled|isodatetime }}</strong> ({{ job.scheduled|naturaltime }})
9
10
  {% elif job %}
10
- Created: <strong>{{ job.created|isodatetime }}</strong>
11
+ {% trans "Created:" %} <strong>{{ job.created|isodatetime }}</strong>
11
12
  {% endif %}
12
13
  {% if job.completed %}
13
- Duration: <strong>{{ job.duration }}</strong>
14
+ {% trans "Duration:" %} <strong>{{ job.duration }}</strong>
14
15
  {% endif %}
15
16
  <span id="pending-result-label">{% badge job.get_status_display job.get_status_color %}</span>
16
17
  </p>
@@ -18,15 +19,15 @@
18
19
  {% include 'ipfabric_netbox/inc/logs_pending.html' %}
19
20
  {% endif %}
20
21
  <div class="card">
21
- <h5 class="card-header">Sync Results</h5>
22
+ <h5 class="card-header">{% trans "Sync Results" %}</h5>
22
23
  <div class="card-body">
23
24
  <table class="table table-hover report">
24
25
  <thead>
25
26
  <tr class="table-headings">
26
- <th>Time</th>
27
- <th>Level</th>
28
- <th>Object</th>
29
- <th>Message</th>
27
+ <th>{% trans "Time" %}</th>
28
+ <th>{% trans "Level" %}</th>
29
+ <th>{% trans "Object" %}</th>
30
+ <th>{% trans "Message" %}</th>
30
31
  </tr>
31
32
  </thead>
32
33
  <tbody>
@@ -1,9 +1,10 @@
1
- from core.choices import DataSourceStatusChoices
2
1
  from django.contrib.contenttypes.models import ContentType
3
2
  from django.utils import timezone
4
3
  from rest_framework import status
5
4
  from utilities.testing import APIViewTestCases
6
5
 
6
+ from ipfabric_netbox.choices import IPFabricSourceStatusChoices
7
+ from ipfabric_netbox.choices import IPFabricSyncStatusChoices
7
8
  from ipfabric_netbox.models import IPFabricData
8
9
  from ipfabric_netbox.models import IPFabricIngestion
9
10
  from ipfabric_netbox.models import IPFabricIngestionIssue
@@ -397,7 +398,7 @@ class IPFabricSourceTest(APIViewTestCases.APIViewTestCase):
397
398
  # Get the first source from setUpTestData
398
399
  source = IPFabricSource.objects.first()
399
400
  # Set status to make ready_for_sync return True
400
- source.status = DataSourceStatusChoices.COMPLETED
401
+ source.status = IPFabricSourceStatusChoices.COMPLETED
401
402
  source.save()
402
403
 
403
404
  with self.settings(CELERY_TASK_ALWAYS_EAGER=True):
@@ -437,7 +438,7 @@ class IPFabricSourceTest(APIViewTestCases.APIViewTestCase):
437
438
 
438
439
  source = IPFabricSource.objects.first()
439
440
  # Set status to make ready_for_sync return False
440
- source.status = DataSourceStatusChoices.SYNCING
441
+ source.status = IPFabricSourceStatusChoices.SYNCING
441
442
  source.save()
442
443
 
443
444
  url = f"{BASE}/source/{source.pk}/sync/"
@@ -707,7 +708,7 @@ class IPFabricSyncTest(APIViewTestCases.APIViewTestCase):
707
708
  # Get the first sync from setUpTestData
708
709
  sync = IPFabricSync.objects.first()
709
710
  # Set status and ensure snapshot has data to make ready_for_sync return True
710
- sync.status = DataSourceStatusChoices.COMPLETED
711
+ sync.status = IPFabricSyncStatusChoices.COMPLETED
711
712
  sync.save()
712
713
 
713
714
  # Ensure the snapshot has data
@@ -753,7 +754,7 @@ class IPFabricSyncTest(APIViewTestCases.APIViewTestCase):
753
754
 
754
755
  sync = IPFabricSync.objects.first()
755
756
  # Set status to make ready_for_sync return False
756
- sync.status = DataSourceStatusChoices.SYNCING
757
+ sync.status = IPFabricSyncStatusChoices.SYNCING
757
758
  sync.save()
758
759
 
759
760
  url = f"{BASE}/sync/{sync.pk}/sync/"
@@ -1,7 +1,6 @@
1
1
  from datetime import timedelta
2
2
  from unittest.mock import patch
3
3
 
4
- from core.choices import DataSourceStatusChoices
5
4
  from dcim.models import Device
6
5
  from dcim.models import Site
7
6
  from django.contrib.contenttypes.models import ContentType
@@ -9,7 +8,9 @@ from django.test import TestCase
9
8
  from utilities.datetime import local_now
10
9
 
11
10
  from ipfabric_netbox.choices import IPFabricSnapshotStatusModelChoices
11
+ from ipfabric_netbox.choices import IPFabricSourceStatusChoices
12
12
  from ipfabric_netbox.choices import IPFabricSourceTypeChoices
13
+ from ipfabric_netbox.choices import IPFabricSyncStatusChoices
13
14
  from ipfabric_netbox.forms import IPFabricIngestionFilterForm
14
15
  from ipfabric_netbox.forms import IPFabricIngestionMergeForm
15
16
  from ipfabric_netbox.forms import IPFabricRelationshipFieldForm
@@ -38,7 +39,7 @@ class IPFabricSourceFormTestCase(TestCase):
38
39
  name="Test IP Fabric Source",
39
40
  type=IPFabricSourceTypeChoices.LOCAL,
40
41
  url="https://test.ipfabric.local",
41
- status=DataSourceStatusChoices.NEW,
42
+ status=IPFabricSourceStatusChoices.NEW,
42
43
  parameters={"auth": "test_token", "verify": True, "timeout": 30},
43
44
  )
44
45
 
@@ -134,7 +135,7 @@ class IPFabricSourceFormTestCase(TestCase):
134
135
  )
135
136
  self.assertTrue(form.is_valid(), form.errors)
136
137
  instance = form.save()
137
- self.assertEqual(instance.status, DataSourceStatusChoices.NEW)
138
+ self.assertEqual(instance.status, IPFabricSourceStatusChoices.NEW)
138
139
 
139
140
  def test_form_initializes_existing_parameters(self):
140
141
  # Test that form properly initializes with existing instance parameters
@@ -339,7 +340,7 @@ class IPFabricRelationshipFieldFormTestCase(TestCase):
339
340
  name="Test Source",
340
341
  type=IPFabricSourceTypeChoices.LOCAL,
341
342
  url="https://test.ipfabric.local",
342
- status=DataSourceStatusChoices.NEW,
343
+ status=IPFabricSourceStatusChoices.NEW,
343
344
  )
344
345
 
345
346
  cls.transform_map_group = IPFabricTransformMapGroup.objects.create(
@@ -453,7 +454,7 @@ class IPFabricTransformFieldFormTestCase(TestCase):
453
454
  name="Test Source",
454
455
  type=IPFabricSourceTypeChoices.LOCAL,
455
456
  url="https://test.ipfabric.local",
456
- status=DataSourceStatusChoices.NEW,
457
+ status=IPFabricSourceStatusChoices.NEW,
457
458
  )
458
459
 
459
460
  cls.transform_map_group = IPFabricTransformMapGroup.objects.create(
@@ -671,7 +672,7 @@ class IPFabricSnapshotFilterFormTestCase(TestCase):
671
672
  name="Test Source",
672
673
  type=IPFabricSourceTypeChoices.LOCAL,
673
674
  url="https://test.ipfabric.local",
674
- status=DataSourceStatusChoices.NEW,
675
+ status=IPFabricSourceStatusChoices.NEW,
675
676
  )
676
677
 
677
678
  def test_all_fields_are_optional(self):
@@ -699,8 +700,8 @@ class IPFabricSourceFilterFormTestCase(TestCase):
699
700
  form = IPFabricSourceFilterForm(
700
701
  data={
701
702
  "status": [
702
- DataSourceStatusChoices.NEW,
703
- DataSourceStatusChoices.COMPLETED,
703
+ IPFabricSourceStatusChoices.NEW,
704
+ IPFabricSourceStatusChoices.COMPLETED,
704
705
  ]
705
706
  }
706
707
  )
@@ -714,7 +715,7 @@ class IPFabricIngestionFilterFormTestCase(TestCase):
714
715
  name="Test Source",
715
716
  type=IPFabricSourceTypeChoices.LOCAL,
716
717
  url="https://test.ipfabric.local",
717
- status=DataSourceStatusChoices.NEW,
718
+ status=IPFabricSourceStatusChoices.NEW,
718
719
  )
719
720
 
720
721
  cls.snapshot = IPFabricSnapshot.objects.create(
@@ -762,7 +763,7 @@ class IPFabricSyncFormTestCase(TestCase):
762
763
  name="Test Source",
763
764
  type=IPFabricSourceTypeChoices.LOCAL,
764
765
  url="https://test.ipfabric.local",
765
- status=DataSourceStatusChoices.NEW,
766
+ status=IPFabricSourceStatusChoices.NEW,
766
767
  )
767
768
 
768
769
  cls.snapshot = IPFabricSnapshot.objects.create(
@@ -1017,7 +1018,7 @@ class IPFabricSyncFormTestCase(TestCase):
1017
1018
  name="Different Source",
1018
1019
  type=IPFabricSourceTypeChoices.LOCAL,
1019
1020
  url="https://different.ipfabric.local",
1020
- status=DataSourceStatusChoices.NEW,
1021
+ status=IPFabricSourceStatusChoices.NEW,
1021
1022
  )
1022
1023
 
1023
1024
  # Try to use self.snapshot (which belongs to self.source) with different_source
@@ -1179,7 +1180,7 @@ class IPFabricSyncFormTestCase(TestCase):
1179
1180
  self.assertEqual(sync_instance.name, "Test Sync Save")
1180
1181
  self.assertEqual(sync_instance.snapshot_data.source, self.source)
1181
1182
  self.assertEqual(sync_instance.snapshot_data, self.snapshot)
1182
- self.assertEqual(sync_instance.status, DataSourceStatusChoices.NEW)
1183
+ self.assertEqual(sync_instance.status, IPFabricSyncStatusChoices.NEW)
1183
1184
  self.assertTrue(sync_instance.auto_merge)
1184
1185
  self.assertTrue(sync_instance.update_custom_fields)
1185
1186
 
@@ -1364,11 +1365,11 @@ class IPFabricSyncFormTestCase(TestCase):
1364
1365
  sync_instance = form.save()
1365
1366
 
1366
1367
  # Status should always be NEW after save
1367
- self.assertEqual(sync_instance.status, DataSourceStatusChoices.NEW)
1368
+ self.assertEqual(sync_instance.status, IPFabricSyncStatusChoices.NEW)
1368
1369
 
1369
1370
  # Verify in database as well
1370
1371
  saved_instance = IPFabricSync.objects.get(pk=sync_instance.pk)
1371
- self.assertEqual(saved_instance.status, DataSourceStatusChoices.NEW)
1372
+ self.assertEqual(saved_instance.status, IPFabricSyncStatusChoices.NEW)
1372
1373
 
1373
1374
  def test_fieldsets_for_local_source_type(self):
1374
1375
  """Test that fieldsets returns correct structure for local source type"""
@@ -1413,7 +1414,7 @@ class IPFabricSyncFormTestCase(TestCase):
1413
1414
  name="Test Remote Source",
1414
1415
  type=IPFabricSourceTypeChoices.REMOTE,
1415
1416
  url="https://remote.ipfabric.local",
1416
- status=DataSourceStatusChoices.NEW,
1417
+ status=IPFabricSourceStatusChoices.NEW,
1417
1418
  )
1418
1419
 
1419
1420
  remote_snapshot = IPFabricSnapshot.objects.create(
@@ -3,7 +3,6 @@ from datetime import timedelta
3
3
  from unittest.mock import patch
4
4
  from uuid import uuid4
5
5
 
6
- from core.choices import DataSourceStatusChoices
7
6
  from core.choices import JobStatusChoices
8
7
  from core.models import Job
9
8
  from dcim.models import Device
@@ -24,7 +23,9 @@ from utilities.testing import ModelTestCase
24
23
  from utilities.testing import ViewTestCases
25
24
 
26
25
  from ipfabric_netbox.choices import IPFabricSnapshotStatusModelChoices
26
+ from ipfabric_netbox.choices import IPFabricSourceStatusChoices
27
27
  from ipfabric_netbox.choices import IPFabricSourceTypeChoices
28
+ from ipfabric_netbox.choices import IPFabricSyncStatusChoices
28
29
  from ipfabric_netbox.forms import dcim_parameters
29
30
  from ipfabric_netbox.forms import ipam_parameters
30
31
  from ipfabric_netbox.forms import tableChoices
@@ -79,7 +80,7 @@ class IPFabricSourceTestCase(
79
80
  name="IP Fabric Source 1",
80
81
  type=IPFabricSourceTypeChoices.LOCAL,
81
82
  url="https://ipfabric1.example.com",
82
- status=DataSourceStatusChoices.NEW,
83
+ status=IPFabricSourceStatusChoices.NEW,
83
84
  parameters={"auth": "token1", "verify": True, "timeout": 30},
84
85
  last_synced=timezone.now(),
85
86
  ),
@@ -87,7 +88,7 @@ class IPFabricSourceTestCase(
87
88
  name="IP Fabric Source 2",
88
89
  type=IPFabricSourceTypeChoices.LOCAL,
89
90
  url="https://ipfabric2.example.com",
90
- status=DataSourceStatusChoices.COMPLETED,
91
+ status=IPFabricSourceStatusChoices.COMPLETED,
91
92
  parameters={"auth": "token2", "verify": False, "timeout": 60},
92
93
  last_synced=timezone.now(),
93
94
  ),
@@ -95,7 +96,7 @@ class IPFabricSourceTestCase(
95
96
  name="IP Fabric Source 3",
96
97
  type=IPFabricSourceTypeChoices.LOCAL,
97
98
  url="https://ipfabric3.example.com",
98
- status=DataSourceStatusChoices.FAILED,
99
+ status=IPFabricSourceStatusChoices.FAILED,
99
100
  parameters={"auth": "token3", "verify": True, "timeout": 45},
100
101
  ),
101
102
  )
@@ -390,13 +391,13 @@ class IPFabricSnapshotTestCase(
390
391
  name="Test Source 1",
391
392
  type=IPFabricSourceTypeChoices.LOCAL,
392
393
  url="https://ipfabric1.example.com",
393
- status=DataSourceStatusChoices.NEW,
394
+ status=IPFabricSourceStatusChoices.NEW,
394
395
  )
395
396
  source2 = IPFabricSource.objects.create(
396
397
  name="Test Source 2",
397
398
  type=IPFabricSourceTypeChoices.REMOTE,
398
399
  url="https://ipfabric2.example.com",
399
- status=DataSourceStatusChoices.COMPLETED,
400
+ status=IPFabricSourceStatusChoices.COMPLETED,
400
401
  )
401
402
 
402
403
  # Create three IPFabricSnapshot instances for testing
@@ -511,7 +512,7 @@ class IPFabricDataTestCase(
511
512
  name="Test Source",
512
513
  type=IPFabricSourceTypeChoices.LOCAL,
513
514
  url="https://ipfabric.example.com",
514
- status=DataSourceStatusChoices.NEW,
515
+ status=IPFabricSourceStatusChoices.NEW,
515
516
  )
516
517
 
517
518
  snapshot = IPFabricSnapshot.objects.create(
@@ -628,7 +629,7 @@ class IPFabricSyncTestCase(
628
629
  name="Test Source",
629
630
  type=IPFabricSourceTypeChoices.LOCAL,
630
631
  url="https://ipfabric.example.com",
631
- status=DataSourceStatusChoices.NEW,
632
+ status=IPFabricSourceStatusChoices.NEW,
632
633
  )
633
634
 
634
635
  snapshot1 = IPFabricSnapshot.objects.create(
@@ -654,7 +655,7 @@ class IPFabricSyncTestCase(
654
655
  IPFabricSync(
655
656
  name="Sync Job 1",
656
657
  snapshot_data=snapshot1,
657
- status=DataSourceStatusChoices.NEW,
658
+ status=IPFabricSyncStatusChoices.NEW,
658
659
  parameters=get_parameters(),
659
660
  last_synced=timezone.now(),
660
661
  scheduled=timezone.now() + timedelta(hours=6),
@@ -663,14 +664,14 @@ class IPFabricSyncTestCase(
663
664
  IPFabricSync(
664
665
  name="Sync Job 2",
665
666
  snapshot_data=snapshot1,
666
- status=DataSourceStatusChoices.COMPLETED,
667
+ status=IPFabricSyncStatusChoices.COMPLETED,
667
668
  parameters=get_parameters(),
668
669
  last_synced=timezone.now(),
669
670
  ),
670
671
  IPFabricSync(
671
672
  name="Sync Job 3",
672
673
  snapshot_data=snapshot2,
673
- status=DataSourceStatusChoices.FAILED,
674
+ status=IPFabricSyncStatusChoices.FAILED,
674
675
  parameters=get_parameters(),
675
676
  ),
676
677
  )
@@ -701,16 +702,16 @@ class IPFabricSyncTestCase(
701
702
 
702
703
  cls.csv_data = (
703
704
  "name,snapshot_data,status,parameters",
704
- f'Sync CSV 1,{snapshot1.pk},{DataSourceStatusChoices.NEW},"{{\\"auto_merge\\": true}}"', # noqa: E231
705
- f'Sync CSV 2,{snapshot1.pk},{DataSourceStatusChoices.COMPLETED},"{{\\"auto_merge\\": false}}"', # noqa: E231
706
- f'Sync CSV 3,{snapshot2.pk},{DataSourceStatusChoices.NEW},"{{\\"auto_merge\\": true}}"', # noqa: E231
705
+ f'Sync CSV 1,{snapshot1.pk},{IPFabricSyncStatusChoices.NEW},"{{\\"auto_merge\\": true}}"', # noqa: E231
706
+ f'Sync CSV 2,{snapshot1.pk},{IPFabricSyncStatusChoices.COMPLETED},"{{\\"auto_merge\\": false}}"', # noqa: E231
707
+ f'Sync CSV 3,{snapshot2.pk},{IPFabricSyncStatusChoices.NEW},"{{\\"auto_merge\\": true}}"', # noqa: E231
707
708
  )
708
709
 
709
710
  cls.csv_update_data = (
710
711
  "id,name,status",
711
- f"{cls.syncs[0].pk},Updated Sync 1,{DataSourceStatusChoices.COMPLETED}", # noqa: E231
712
- f"{cls.syncs[1].pk},Updated Sync 2,{DataSourceStatusChoices.FAILED}", # noqa: E231
713
- f"{cls.syncs[2].pk},Updated Sync 3,{DataSourceStatusChoices.COMPLETED}", # noqa: E231
712
+ f"{cls.syncs[0].pk},Updated Sync 1,{IPFabricSyncStatusChoices.COMPLETED}", # noqa: E231
713
+ f"{cls.syncs[1].pk},Updated Sync 2,{IPFabricSyncStatusChoices.FAILED}", # noqa: E231
714
+ f"{cls.syncs[2].pk},Updated Sync 3,{IPFabricSyncStatusChoices.COMPLETED}", # noqa: E231
714
715
  )
715
716
 
716
717
  cls.bulk_edit_data = {
@@ -1503,7 +1504,7 @@ class IPFabricIngestionTestCase(
1503
1504
  name="Test Source",
1504
1505
  type=IPFabricSourceTypeChoices.LOCAL,
1505
1506
  url="https://ipfabric.example.com",
1506
- status=DataSourceStatusChoices.NEW,
1507
+ status=IPFabricSourceStatusChoices.NEW,
1507
1508
  )
1508
1509
 
1509
1510
  snapshot = IPFabricSnapshot.objects.create(
@@ -1519,7 +1520,7 @@ class IPFabricIngestionTestCase(
1519
1520
  sync1 = IPFabricSync.objects.create(
1520
1521
  name="Test Sync 1",
1521
1522
  snapshot_data=snapshot,
1522
- status=DataSourceStatusChoices.NEW,
1523
+ status=IPFabricSyncStatusChoices.NEW,
1523
1524
  parameters={"batch_size": 100},
1524
1525
  last_synced=timezone.now(),
1525
1526
  )
@@ -1527,7 +1528,7 @@ class IPFabricIngestionTestCase(
1527
1528
  sync2 = IPFabricSync.objects.create(
1528
1529
  name="Test Sync 2",
1529
1530
  snapshot_data=snapshot,
1530
- status=DataSourceStatusChoices.COMPLETED,
1531
+ status=IPFabricSyncStatusChoices.COMPLETED,
1531
1532
  parameters={"batch_size": 200},
1532
1533
  last_synced=timezone.now(),
1533
1534
  )
@@ -1535,7 +1536,7 @@ class IPFabricIngestionTestCase(
1535
1536
  sync3 = IPFabricSync.objects.create(
1536
1537
  name="Test Sync 3",
1537
1538
  snapshot_data=snapshot,
1538
- status=DataSourceStatusChoices.FAILED,
1539
+ status=IPFabricSyncStatusChoices.FAILED,
1539
1540
  parameters={"batch_size": 50},
1540
1541
  )
1541
1542
 
@@ -1596,7 +1597,7 @@ class IPFabricIngestionTestCase(
1596
1597
 
1597
1598
  cls.form_data = {
1598
1599
  "snapshot": snapshot.pk,
1599
- "status": DataSourceStatusChoices.NEW,
1600
+ "status": IPFabricSyncStatusChoices.NEW,
1600
1601
  "parameters": '{"batch_size": 150}',
1601
1602
  }
1602
1603
 
@@ -1914,7 +1915,7 @@ class IPFabricTableViewTestCase(PluginPathMixin, ModelTestCase):
1914
1915
  name="IP Fabric Source 1",
1915
1916
  type=IPFabricSourceTypeChoices.LOCAL,
1916
1917
  url="https://ipfabric1.example.com",
1917
- status=DataSourceStatusChoices.NEW,
1918
+ status=IPFabricSourceStatusChoices.NEW,
1918
1919
  parameters={"auth": "token1", "verify": True, "timeout": 30},
1919
1920
  last_synced=timezone.now(),
1920
1921
  )
@@ -5,7 +5,6 @@ from typing import Callable
5
5
  from typing import TYPE_CHECKING
6
6
  from typing import TypeVar
7
7
 
8
- from core.choices import DataSourceStatusChoices
9
8
  from core.exceptions import SyncError
10
9
  from dcim.models import Device
11
10
  from dcim.models import Interface
@@ -22,6 +21,7 @@ from netbox.config import get_config
22
21
  from netutils.utils import jinja2_convenience_function
23
22
 
24
23
  from ..choices import IPFabricSourceTypeChoices
24
+ from ..choices import IPFabricSyncStatusChoices
25
25
  from ..exceptions import create_or_get_sync_issue
26
26
  from ..exceptions import IPAddressDuplicateError
27
27
  from ..exceptions import SearchError
@@ -185,7 +185,7 @@ class IPFabricSyncRunner(object):
185
185
  obj=self.sync,
186
186
  )
187
187
  # Make sure the whole sync is failed when we encounter error
188
- self.sync.status = DataSourceStatusChoices.FAILED
188
+ self.sync.status = IPFabricSyncStatusChoices.FAILED
189
189
  return None
190
190
 
191
191
  return wrapper
ipfabric_netbox/views.py CHANGED
@@ -13,6 +13,7 @@ from django.shortcuts import redirect
13
13
  from django.shortcuts import render
14
14
  from django.urls import reverse
15
15
  from django.utils import timezone
16
+ from django.utils.translation import gettext as _
16
17
  from django.views.generic import View
17
18
  from django_tables2 import RequestConfig
18
19
  from ipfabric.diagrams import Network
@@ -411,7 +412,7 @@ class IPFabricTransformFieldView(generic.ObjectChildrenView):
411
412
  template_name = "ipfabric_netbox/inc/transform_map_field_map.html"
412
413
  actions = (AddObject, BulkDelete)
413
414
  tab = ViewTab(
414
- label="Field Maps",
415
+ label=_("Field Maps"),
415
416
  badge=lambda obj: IPFabricTransformField.objects.filter(
416
417
  transform_map=obj
417
418
  ).count(),
@@ -430,7 +431,7 @@ class IPFabricTransformRelationshipView(generic.ObjectChildrenView):
430
431
  template_name = "ipfabric_netbox/inc/transform_map_relationship_map.html"
431
432
  actions = (AddObject, BulkDelete)
432
433
  tab = ViewTab(
433
- label="Relationship Maps",
434
+ label=_("Relationship Maps"),
434
435
  badge=lambda obj: IPFabricRelationshipField.objects.filter(
435
436
  transform_map=obj
436
437
  ).count(),
@@ -508,7 +509,7 @@ class IPFabricSnapshotRawView(generic.ObjectChildrenView):
508
509
  table = IPFabricDataTable
509
510
  template_name = "ipfabric_netbox/inc/snapshotdata.html"
510
511
  tab = ViewTab(
511
- label="Raw Data",
512
+ label=_("Raw Data"),
512
513
  badge=lambda obj: IPFabricData.objects.filter(snapshot_data=obj).count(),
513
514
  permission="ipfabric_netbox.view_ipfabricsnapshot",
514
515
  hide_if_empty=True,
@@ -845,7 +846,7 @@ class IPFabricTransformMapTabView(generic.ObjectChildrenView):
845
846
  template_name = "generic/object_children.html"
846
847
  actions = (AddObject, BulkDelete)
847
848
  tab = ViewTab(
848
- label="Transform Maps",
849
+ label=_("Transform Maps"),
849
850
  badge=lambda obj: obj.get_transform_maps(
850
851
  obj.parameters.get("groups", []) if obj.parameters else []
851
852
  ).count(),
@@ -866,7 +867,7 @@ class IPFabricIngestionTabView(generic.ObjectChildrenView):
866
867
  filterset = IPFabricIngestionFilterSet
867
868
  actions = (AddObject, BulkDelete)
868
869
  tab = ViewTab(
869
- label="Ingestions",
870
+ label=_("Ingestions"),
870
871
  badge=lambda obj: IPFabricIngestion.objects.filter(sync=obj).count(),
871
872
  permission="ipfabric_netbox.view_ipfabricingestion",
872
873
  )
@@ -1082,7 +1083,7 @@ class IPFabricIngestionChangesView(generic.ObjectChildrenView):
1082
1083
  filterset = IPFabricIngestionChangeFilterSet
1083
1084
  template_name = "generic/object_children.html"
1084
1085
  tab = ViewTab(
1085
- label="Changes",
1086
+ label=_("Changes"),
1086
1087
  badge=lambda obj: ChangeDiff.objects.filter(branch=obj.branch).count(),
1087
1088
  permission="ipfabric_netbox.view_ipfabricingestion",
1088
1089
  )
@@ -1100,7 +1101,7 @@ class IPFabricIngestionIssuesView(generic.ObjectChildrenView):
1100
1101
  filterset = IPFabricIngestionIssueFilterSet
1101
1102
  actions = (AddObject, BulkDelete)
1102
1103
  tab = ViewTab(
1103
- label="Ingestion Issues",
1104
+ label=_("Ingestion Issues"),
1104
1105
  badge=lambda obj: IPFabricIngestionIssue.objects.filter(ingestion=obj).count(),
1105
1106
  permission="ipfabric_netbox.view_ipfabricingestionissue",
1106
1107
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipfabric_netbox
3
- Version: 4.3.1b1
3
+ Version: 4.3.1b3
4
4
  Summary: NetBox plugin to sync IP Fabric data into NetBox
5
5
  License: MIT
6
6
  Keywords: netbox,ipfabric,plugin,sync
@@ -1,19 +1,19 @@
1
- ipfabric_netbox/__init__.py,sha256=JgW9Jpg-ejA-stkdedLl3RHwS3NxH7pUXoNg9_K4Q8c,674
1
+ ipfabric_netbox/__init__.py,sha256=djojIeHGYWE1rMUv2NV5KlizmD20KlkrfIEoqLaC5is,674
2
2
  ipfabric_netbox/api/__init__.py,sha256=XRclTGWVR0ZhAAwgYul5Wm_loug5_hUjEumbLQEwKYM,47
3
- ipfabric_netbox/api/serializers.py,sha256=lr_PWG0tqAxaKtkIIm8Gx2B-tn9yENQIfKY9cvu8Cco,6581
3
+ ipfabric_netbox/api/serializers.py,sha256=92Cwhnqsm1l1oZfdHH5aJI1VFX0eO5JS4BsdXE6Ur18,6738
4
4
  ipfabric_netbox/api/urls.py,sha256=1fXXVTxNY5E64Nfz6b7zXD9bZI3FcefuxAWKMe0w_QU,1240
5
5
  ipfabric_netbox/api/views.py,sha256=qOBTIzPtOBY75tTjirsTBbiRXrQQid478Tp15-WKbmQ,6859
6
- ipfabric_netbox/choices.py,sha256=gXRV_c04OnQl_kJTsAH1k88u8PWbiVXvcYwufZPKMdM,5035
6
+ ipfabric_netbox/choices.py,sha256=r1A7zasYw92fdB6MxnvcLkzz4mA61_wSUmbfuDbmg0M,6017
7
7
  ipfabric_netbox/data/transform_map.json,sha256=4PsucgMHcLW3SPoKEptQCd0gA5tCF4hjrR4bGQFCWy8,21744
8
8
  ipfabric_netbox/exceptions.py,sha256=DT4dpbakvqoROtBR_F0LzvQCMNWpGhufFcUbZTx0OLY,2655
9
- ipfabric_netbox/filtersets.py,sha256=vaWlxf8DTwduv_aQ35kJxwyzmM1XvE781GjUj2z4QGQ,7845
10
- ipfabric_netbox/forms.py,sha256=WI1OypOG4Zqry6jiH991ZBVBMnfwzUDhNJAZCUQNaUg,49932
9
+ ipfabric_netbox/filtersets.py,sha256=4I_ogO0Wqexf4e4gy_CirdGmA6vSCybyCadFcjI2LM8,8011
10
+ ipfabric_netbox/forms.py,sha256=s9jYgK75CJzCrhnEeB3WxxZ9bF2YfNDA4N-sO9xTqgc,50068
11
11
  ipfabric_netbox/graphql/__init__.py,sha256=-a5w_VY7pc-RVt8MvThkTzeAqCC3xCan4Ue6iMefmjI,754
12
- ipfabric_netbox/graphql/enums.py,sha256=QFhwiwUKJekxQfsOGk_-70_WnkzrKEP_zIBMrin0S0Q,1343
13
- ipfabric_netbox/graphql/filters.py,sha256=B8xy9r9a18vWfV6a6tHXAN1FUcoxI6MOrbsdNmzusNI,12991
12
+ ipfabric_netbox/graphql/enums.py,sha256=sZ2neNkM4HUA4ODvio9aFcI8tIJoc2xKuy9_c5b40Q8,1565
13
+ ipfabric_netbox/graphql/filters.py,sha256=QYYE_5wE57cpRzhXJzU8IEpDDnPb97NUd9Zbf0OZfNA,13066
14
14
  ipfabric_netbox/graphql/schema.py,sha256=5UVHA1hHRvho5eLuuS-HLXTVTbxpUUx68ovG03gumGE,3209
15
15
  ipfabric_netbox/graphql/types.py,sha256=8RxdxiA-WnoaWSzh-tUJCuZBYGmd6QjfJiJcLirRMKY,5961
16
- ipfabric_netbox/jobs.py,sha256=1F_kePoGCzZ8zfy--v_R8jcAihfZ4U1xnP6b72mJAf0,4581
16
+ ipfabric_netbox/jobs.py,sha256=4wM-IdE7ngiRYkL_U87y6gBhc_G5tDsZPw9GL2b2jog,4638
17
17
  ipfabric_netbox/migrations/0001_initial.py,sha256=VphxkWL6QzWq2tcrdXlog718xQtiEGizKwS830z_fOs,13824
18
18
  ipfabric_netbox/migrations/0001_initial_squashed_0013_switch_to_branching_plugin.py,sha256=OvofuA8ImeJmjrbtCrZPcRxAUWx2Ww4DUXLBZYsy6qE,21381
19
19
  ipfabric_netbox/migrations/0002_ipfabricsnapshot_status.py,sha256=xQpouHjOutyj6riN2B592njzSvz_icpkUbo5W7nWLYw,431
@@ -36,35 +36,35 @@ ipfabric_netbox/migrations/0018_remove_type_field.py,sha256=ffxW6IS3BLCbvM5M9DbD
36
36
  ipfabric_netbox/migrations/0019_alter_ipfabrictransformmap_options_and_more.py,sha256=ieDVedt9KpJBicAiC3kdZXzHeos12N0L9EdRXKmIVgY,501
37
37
  ipfabric_netbox/migrations/0020_clean_scheduled_jobs.py,sha256=zjCVKnCWTKYYkpVRwHjqRIRR2j6ALSKXYMfraRjNu7Y,2652
38
38
  ipfabric_netbox/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- ipfabric_netbox/models.py,sha256=g6EnrCp714aDig7Rh3_WRe1CHIwpSMV1YLWJexUJL2U,38222
40
- ipfabric_netbox/navigation.py,sha256=2dEJ_wKHb52Tl0FOV1TH3JbxRe8YZ56ewrTsBFGKpCg,2210
39
+ ipfabric_netbox/models.py,sha256=3etGCInD1FH1uyOlNh-Lx8iCd1SqdqoN583XK6yhBsw,38402
40
+ ipfabric_netbox/navigation.py,sha256=g2PyyaMqjgYwO3VIKza8vMS-dhbkvxscsHwVfWBj_dk,2287
41
41
  ipfabric_netbox/signals.py,sha256=cGa5PVD2i24pGXiVNfbu6ruIDqPVdwKQHTSWe9Ura84,1838
42
- ipfabric_netbox/tables.py,sha256=BpPmL6-KClX16Ol_PIADyOx9NtDR9oauXH5iO4GeSoI,9008
42
+ ipfabric_netbox/tables.py,sha256=jXiHcRrR4XwkvyUnnU92JW290nZg-85IdpKjsQOsFcc,9052
43
43
  ipfabric_netbox/template_content.py,sha256=lxZ02BFVihbSgjXCETGsWmhdElQUUO3uUGd0WfhlRmw,1120
44
- ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html,sha256=K-2TTDaS1F4wUIR8FFFPqex4KJbySXtHiz5V-OEwelY,967
45
- ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html,sha256=xOiIrvRIBtqDD65u6xcLo2xdwDKNpAylDmzznaJRGCw,3281
46
- ipfabric_netbox/templates/ipfabric_netbox/inc/json.html,sha256=qPHUdaHyKM9Y7FqBEnYwcNoyp5GMFaexJFXMRf4AqZQ,569
47
- ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html,sha256=JbS6wIE_zb0iBKo78W9Al8caXZY7HnsjEFDhY0hirw0,295
48
- ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html,sha256=HxGRk7oTptDWtoMklJ5TolbljZrvAzhZa_Hbjs75P8w,720
49
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html,sha256=iLd0W3rxAAVrgsYBIyro_88x5a2QFZZMc56EOAfOZsg,2744
50
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html,sha256=zjG5qjth277dnVkzyg8qxs72wtKZ8yypXRTXqral4Wk,2124
44
+ ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html,sha256=f6O5ugjQg7u37QWxUpKvE38jNslwb3rCMghlAUqjWBk,1127
45
+ ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html,sha256=npdsr8vWOfpUafto1gj3CwR34dGV5BkoygnY9U8bSNs,3439
46
+ ipfabric_netbox/templates/ipfabric_netbox/inc/json.html,sha256=Z1zxFjy4PaAin3g_1EXy1KSlJyqSxWCD096wbRulQaE,635
47
+ ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html,sha256=lZXUFWQCQtu6RMe_OQQmjLMjJEnZ71EHPrhvSTE_-R4,353
48
+ ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html,sha256=hey2JVm3IDZUqdpujzPUJYB7xZ4nxQ0pxl5wwRQIxOY,836
49
+ ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html,sha256=hPo7bREzg_JAPjSoLyj4vYx07Gzcg5nvjDosiCp6Sa0,2845
50
+ ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html,sha256=uABhE6ChpZgusMlJPQueMsv4MLqaFFoSRP7o3sRhh84,2320
51
51
  ipfabric_netbox/templates/ipfabric_netbox/inc/snapshotdata.html,sha256=1ItOCPjjp9iH7MLNLIz6x-2NnSa0Wx4bXUYVk-Jn4Y0,2885
52
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html,sha256=mRU-rBweVFvaPFHbVYPw7vcYyXiVaXCOkeHm7xWdKPA,500
53
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html,sha256=qyuG_EXZMGUscA3sv_6WGSrf_bR7JTRlKyMYf6EYyo4,504
54
- ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html,sha256=TsF34lK2CyDsMxlFTk--2lF_0AxYM614eKmkgYAbJ-k,1629
55
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html,sha256=ymqTB9JEk0AFncK5kz8yStHWCD_IMNKlbgyqu_qon7g,4585
56
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html,sha256=hj8ORs_4mM_xTjmw3McHN-da5seC8nbbkzobn0f1TSc,3482
57
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html,sha256=DQOA2TA7f1nI5YpxXthS1VzjIU1kMZus37l6bYSCauE,3869
58
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html,sha256=dt8HYuHCzIN4otLS9QK3e1aES14isFI-1jyp8jrENXU,4616
59
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html,sha256=qFo_Ku5oksx5co4HVtVq0xAVFI6CLWs-iBrwYzGsEGA,1460
60
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html,sha256=p8zqn0-B6mawSUM3zQrus6dsKUM5SRBTO0X94pLboX8,452
61
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html,sha256=TV7gAZWtSd-c7mzOen_nv7Z8MZr2Vw8vkHP4zW9au4w,2580
62
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html,sha256=H3uvjA4PdJq5uX2kizdHV1pAxwcPpyfc9IbJi1ZK5-k,975
52
+ ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html,sha256=MSpU2mQnrGg_jA1-eqQgaSK9DXCeo3w6j33tV_GFNJ4,535
53
+ ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html,sha256=tmIV0gDhfVxBse4xDeE5atMi4KEMkvxB_WRx94gu44U,539
54
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html,sha256=HsxENF0KaaGT8w0_K6251LVH0W_mg60W8ktApxAG59U,1689
55
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html,sha256=EohTqqCwafb3ZfX0MJko4sdKaKNQmNZ7Cc7f0vTo-K8,4760
56
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html,sha256=HWCGi1e0O_jL-5XnIYfCC5EQh5oSw-1-ZUpjH6-cGV0,3690
57
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html,sha256=I9K7Eob-jjNAy6lryq2QKpp-5JyR1DEJSPF3D6JKR_w,4063
58
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html,sha256=M7tig8Y42ndsipBHKVVfSFb9tSGvm7Cf4fj-B54xizs,4852
59
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html,sha256=bAau1cqRMUsOWHIxkMP-6ALf7l-6AZSQfh-iPGUPR6U,1560
60
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html,sha256=kRb6NsLxurojh4Afb_oJbIMlgMprsVuhvRiuk8hB7OM,482
61
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html,sha256=os11SIwApFAiA1j0ObaOqG_KDHuieMiwyv9gPpZ9exI,2594
62
+ ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html,sha256=X5jsRsK1WCqYpf-iQuHKChbg_hTTcrMpg48K5BU2S_0,1033
63
63
  ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_all.html,sha256=ZstgG3MJbd8WAOcGUKEpt4CSjIInhF14wgVgqSc1oAs,675
64
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html,sha256=tb9JAc9GjPd05F1RQdRrfrDwSQMWlcbbQOrQCXedQWs,680
65
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html,sha256=_KtbxZQlIa_141OQSIAvSsMMfZRkNj27kJqrYHuLt7Y,867
64
+ ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html,sha256=vXRRoKiVioZmq4N30p11nKSxlG0AYYxlMNSNF3qxzj0,752
65
+ ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html,sha256=HK--4JK1dBUk2S0n97MLiU7JrqV25hEoXmDvoLKaxPk,939
66
66
  ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_status.html,sha256=qYXe-V-kQn1INqCHLSSpdrzXJ_IIt84AgCgAGwqpNbs,178
67
- ipfabric_netbox/templates/ipfabric_netbox/partials/job_logs.html,sha256=THiEs8wYMvEn8y0XGhxX7rj3w466CkDhaEzc4CxgGLY,1694
67
+ ipfabric_netbox/templates/ipfabric_netbox/partials/job_logs.html,sha256=xtr_vSdHsR9N7bUqo3MLUO8P5Y_M6-G2B9bmD763KAE,1836
68
68
  ipfabric_netbox/templates/ipfabric_netbox/partials/object_tabs.html,sha256=3xbGy38Y1RH13bVPlcyj5L6J_FM-mOW1y0fx54hj1xE,364
69
69
  ipfabric_netbox/templates/ipfabric_netbox/partials/sync_last_ingestion.html,sha256=3v6tC88xE5cic9l9lQw7Msawoq-AW2oo2odd-osGv50,179
70
70
  ipfabric_netbox/templates/static/ipfabric_netbox/css/rack.css,sha256=z1H-RmmsqF2pGdhn5J64TMFiccy62xZUHHlCRd8fJrQ,118
@@ -72,17 +72,17 @@ ipfabric_netbox/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
72
72
  ipfabric_netbox/templatetags/ipfabric_netbox_helpers.py,sha256=STw4pAd2qG7hgf-O6UNTwsO5VqEa_gxf5wLv50BWL4Q,417
73
73
  ipfabric_netbox/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  ipfabric_netbox/tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- ipfabric_netbox/tests/api/test_api.py,sha256=9o9k4kfnT3Zz9Hg0qnI0_XASt6pi5BCZQ3RhBjsb_iE,35215
76
- ipfabric_netbox/tests/test_forms.py,sha256=C8giV6E3PbMB9_864C12ebvfQ3Vlvdn39VIQQSP6GV8,61566
75
+ ipfabric_netbox/tests/api/test_api.py,sha256=rnpGj3_cuh-QGQgOoARWuvtipDNCjcICn_Qbv2kUMQA,35304
76
+ ipfabric_netbox/tests/test_forms.py,sha256=ZZezIMjf5UiFGzpIlfIdnmXK5Urk8SdapF5c2MMOYoA,61693
77
77
  ipfabric_netbox/tests/test_models.py,sha256=FFrIT5xxv_yvujKpxGjRJPNPBDF2Pqi8zbY0vxuJeQs,16043
78
- ipfabric_netbox/tests/test_views.py,sha256=OhPoRrXA8lEzjTktjbm3I8LkByBHDXA45z9gOEspho4,87784
78
+ ipfabric_netbox/tests/test_views.py,sha256=KKHKA4ejTEwdy6Ce5StJxjxWVWbQ54Y1puyPeBRw1vM,87923
79
79
  ipfabric_netbox/urls.py,sha256=qF2BzZEDnPRd3opFaRfiMdaarYKFfv69iMaAbU2rsBU,2702
80
80
  ipfabric_netbox/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- ipfabric_netbox/utilities/ipfutils.py,sha256=wFmL5oriuF-is1ZlrIcLmoeYUY5ih-CA9weRQrx5AiA,31885
81
+ ipfabric_netbox/utilities/ipfutils.py,sha256=I5okghNJV8M82eWACz1-px46AChcSWsoOu5_DpEXojo,31886
82
82
  ipfabric_netbox/utilities/logging.py,sha256=GYknjocMN6LQ2873_az3y0RKm29TCXaWviUIIneH-x0,3445
83
83
  ipfabric_netbox/utilities/nbutils.py,sha256=kFBEiJOGvr_49hJWCS2duXojx2-A9kVk0Xp_vj0ohfs,2641
84
84
  ipfabric_netbox/utilities/transform_map.py,sha256=GpM_7Mm6FE0qV2qbyj4YfDn0l-JkeeEHQOZkNVSSHk4,2391
85
- ipfabric_netbox/views.py,sha256=JcXvoLo8JQ0PUyvUwi1tZQgrxw9okKBlocsIUKoGAbo,44758
86
- ipfabric_netbox-4.3.1b1.dist-info/METADATA,sha256=E6LJaaKDFyO9FKkOH5KGz88YcnLudWwNNHutkqIzJM0,4754
87
- ipfabric_netbox-4.3.1b1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
88
- ipfabric_netbox-4.3.1b1.dist-info/RECORD,,
85
+ ipfabric_netbox/views.py,sha256=CPVtPvHcKCeCAusxjC0WvnOUKn6p5m3lgd57wOp29dI,44829
86
+ ipfabric_netbox-4.3.1b3.dist-info/METADATA,sha256=eCI0eZ1lK3Hzmp0Mi6FRLguFy_9KxUaJd2B1bW76tMc,4754
87
+ ipfabric_netbox-4.3.1b3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
88
+ ipfabric_netbox-4.3.1b3.dist-info/RECORD,,