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.
- ipfabric_netbox/__init__.py +1 -1
- ipfabric_netbox/api/serializers.py +4 -2
- ipfabric_netbox/choices.py +56 -20
- ipfabric_netbox/filtersets.py +6 -2
- ipfabric_netbox/forms.py +24 -19
- ipfabric_netbox/graphql/enums.py +10 -3
- ipfabric_netbox/graphql/filters.py +4 -3
- ipfabric_netbox/jobs.py +6 -5
- ipfabric_netbox/models.py +46 -45
- ipfabric_netbox/navigation.py +10 -9
- ipfabric_netbox/tables.py +12 -10
- ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html +7 -4
- ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html +10 -8
- ipfabric_netbox/templates/ipfabric_netbox/inc/json.html +4 -2
- ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html +4 -3
- ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html +7 -5
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html +8 -6
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html +8 -4
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html +4 -4
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html +12 -11
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html +15 -14
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html +13 -12
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html +16 -15
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html +7 -6
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html +1 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html +4 -3
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html +5 -4
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html +5 -4
- ipfabric_netbox/templates/ipfabric_netbox/partials/job_logs.html +10 -9
- ipfabric_netbox/tests/api/test_api.py +6 -5
- ipfabric_netbox/tests/test_forms.py +16 -15
- ipfabric_netbox/tests/test_views.py +24 -23
- ipfabric_netbox/utilities/ipfutils.py +2 -2
- ipfabric_netbox/views.py +8 -7
- {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/METADATA +1 -1
- {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/RECORD +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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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=
|
|
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,
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
-
|
|
703
|
-
|
|
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=
|
|
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=
|
|
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=
|
|
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,
|
|
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,
|
|
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,
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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},{
|
|
705
|
-
f'Sync CSV 2,{snapshot1.pk},{
|
|
706
|
-
f'Sync CSV 3,{snapshot2.pk},{
|
|
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,{
|
|
712
|
-
f"{cls.syncs[1].pk},Updated Sync 2,{
|
|
713
|
-
f"{cls.syncs[2].pk},Updated Sync 3,{
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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":
|
|
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=
|
|
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 =
|
|
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,19 +1,19 @@
|
|
|
1
|
-
ipfabric_netbox/__init__.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
10
|
-
ipfabric_netbox/forms.py,sha256=
|
|
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=
|
|
13
|
-
ipfabric_netbox/graphql/filters.py,sha256=
|
|
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=
|
|
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=
|
|
40
|
-
ipfabric_netbox/navigation.py,sha256=
|
|
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=
|
|
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=
|
|
45
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html,sha256=
|
|
46
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/json.html,sha256=
|
|
47
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html,sha256=
|
|
48
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html,sha256=
|
|
49
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html,sha256=
|
|
50
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html,sha256=
|
|
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=
|
|
53
|
-
ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html,sha256=
|
|
54
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html,sha256=
|
|
55
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html,sha256=
|
|
56
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html,sha256=
|
|
57
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html,sha256=
|
|
58
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html,sha256=
|
|
59
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html,sha256=
|
|
60
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html,sha256=
|
|
61
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html,sha256=
|
|
62
|
-
ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html,sha256=
|
|
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=
|
|
65
|
-
ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html,sha256=
|
|
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=
|
|
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=
|
|
76
|
-
ipfabric_netbox/tests/test_forms.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
86
|
-
ipfabric_netbox-4.3.
|
|
87
|
-
ipfabric_netbox-4.3.
|
|
88
|
-
ipfabric_netbox-4.3.
|
|
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,,
|
|
File without changes
|