ipfabric_netbox 4.2.1__py3-none-any.whl → 4.2.1b1__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/__init__.py +0 -1
- ipfabric_netbox/api/serializers.py +147 -90
- ipfabric_netbox/api/urls.py +4 -4
- ipfabric_netbox/api/views.py +18 -19
- ipfabric_netbox/choices.py +0 -12
- ipfabric_netbox/filtersets.py +67 -4
- ipfabric_netbox/forms.py +92 -140
- ipfabric_netbox/graphql/__init__.py +23 -0
- ipfabric_netbox/graphql/enums.py +35 -0
- ipfabric_netbox/graphql/filters.py +317 -0
- ipfabric_netbox/graphql/schema.py +101 -0
- ipfabric_netbox/graphql/types.py +216 -0
- ipfabric_netbox/migrations/0016_tags_and_changelog_for_snapshots.py +31 -0
- ipfabric_netbox/migrations/0017_ipfabricsync_update_custom_fields.py +17 -0
- ipfabric_netbox/migrations/0018_remove_type_field.py +17 -0
- ipfabric_netbox/models.py +10 -10
- ipfabric_netbox/tables.py +30 -9
- ipfabric_netbox/tests/api/__init__.py +0 -0
- ipfabric_netbox/tests/api/test_api.py +879 -0
- ipfabric_netbox/tests/test_forms.py +1440 -0
- ipfabric_netbox/tests/test_models.py +47 -11
- ipfabric_netbox/utilities/ipfutils.py +43 -23
- ipfabric_netbox/views.py +6 -8
- {ipfabric_netbox-4.2.1.dist-info → ipfabric_netbox-4.2.1b1.dist-info}/METADATA +6 -6
- {ipfabric_netbox-4.2.1.dist-info → ipfabric_netbox-4.2.1b1.dist-info}/RECORD +27 -18
- ipfabric_netbox/api/nested_serializers.py +0 -78
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync_list.html +0 -71
- {ipfabric_netbox-4.2.1.dist-info → ipfabric_netbox-4.2.1b1.dist-info}/WHEEL +0 -0
ipfabric_netbox/__init__.py
CHANGED
ipfabric_netbox/api/__init__.py
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
from core.choices import DataSourceStatusChoices
|
|
2
|
+
from django.contrib.contenttypes.models import ContentType
|
|
2
3
|
from netbox.api.fields import ChoiceField
|
|
3
4
|
from netbox.api.fields import ContentTypeField
|
|
4
|
-
from netbox.api.
|
|
5
|
+
from netbox.api.fields import RelatedObjectCountField
|
|
6
|
+
from netbox.api.serializers import NestedGroupModelSerializer
|
|
5
7
|
from netbox_branching.api.serializers import BranchSerializer
|
|
6
8
|
from rest_framework import serializers
|
|
7
9
|
|
|
8
|
-
from .nested_serializers import NestedIPFabricSnapshotSerializer
|
|
9
|
-
from .nested_serializers import NestedIPFabricSourceSerializer
|
|
10
|
-
from .nested_serializers import NestedIPFabricSyncSerializer
|
|
11
|
-
from .nested_serializers import NestedIPFabricTransformMapSerializer
|
|
12
10
|
from ipfabric_netbox.models import IPFabricIngestion
|
|
13
11
|
from ipfabric_netbox.models import IPFabricIngestionIssue
|
|
14
12
|
from ipfabric_netbox.models import IPFabricRelationshipField
|
|
13
|
+
from ipfabric_netbox.models import IPFabricRelationshipFieldSourceModels
|
|
15
14
|
from ipfabric_netbox.models import IPFabricSnapshot
|
|
16
15
|
from ipfabric_netbox.models import IPFabricSource
|
|
16
|
+
from ipfabric_netbox.models import IPFabricSupportedSyncModels
|
|
17
17
|
from ipfabric_netbox.models import IPFabricSync
|
|
18
18
|
from ipfabric_netbox.models import IPFabricTransformField
|
|
19
19
|
from ipfabric_netbox.models import IPFabricTransformMap
|
|
@@ -32,129 +32,201 @@ __all__ = (
|
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
class
|
|
36
|
-
|
|
35
|
+
class IPFabricTransformMapGroupSerializer(NestedGroupModelSerializer):
|
|
36
|
+
transform_maps_count = RelatedObjectCountField("transform_maps")
|
|
37
37
|
|
|
38
38
|
class Meta:
|
|
39
|
-
model =
|
|
40
|
-
fields =
|
|
39
|
+
model = IPFabricTransformMapGroup
|
|
40
|
+
fields = (
|
|
41
41
|
"id",
|
|
42
42
|
"name",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"type",
|
|
46
|
-
"status",
|
|
47
|
-
"parameters",
|
|
48
|
-
"last_synced",
|
|
43
|
+
"description",
|
|
44
|
+
"transform_maps_count",
|
|
49
45
|
"created",
|
|
50
46
|
"last_updated",
|
|
51
|
-
|
|
47
|
+
)
|
|
48
|
+
brief_fields = (
|
|
49
|
+
"id",
|
|
50
|
+
"name",
|
|
51
|
+
"description",
|
|
52
|
+
)
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
class
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
class IPFabricTransformMapSerializer(NestedGroupModelSerializer):
|
|
56
|
+
group = IPFabricTransformMapGroupSerializer(
|
|
57
|
+
nested=True, required=False, allow_null=True
|
|
58
|
+
)
|
|
59
|
+
target_model = ContentTypeField(
|
|
60
|
+
queryset=ContentType.objects.filter(IPFabricSupportedSyncModels)
|
|
61
|
+
)
|
|
59
62
|
|
|
60
63
|
class Meta:
|
|
61
|
-
model =
|
|
62
|
-
fields =
|
|
64
|
+
model = IPFabricTransformMap
|
|
65
|
+
fields = (
|
|
63
66
|
"id",
|
|
64
67
|
"name",
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"date",
|
|
69
|
-
"display",
|
|
70
|
-
"sites",
|
|
71
|
-
"data",
|
|
68
|
+
"group",
|
|
69
|
+
"source_model",
|
|
70
|
+
"target_model",
|
|
72
71
|
"created",
|
|
73
72
|
"last_updated",
|
|
74
|
-
|
|
73
|
+
)
|
|
74
|
+
brief_fields = (
|
|
75
|
+
"id",
|
|
76
|
+
"name",
|
|
77
|
+
"group",
|
|
78
|
+
"source_model",
|
|
79
|
+
"target_model",
|
|
80
|
+
)
|
|
75
81
|
|
|
76
|
-
extra_kwargs = {
|
|
77
|
-
"raw_data": {"write_only": True},
|
|
78
|
-
}
|
|
79
82
|
|
|
83
|
+
class IPFabricTransformFieldSerializer(NestedGroupModelSerializer):
|
|
84
|
+
transform_map = IPFabricTransformMapSerializer(nested=True)
|
|
85
|
+
|
|
86
|
+
class Meta:
|
|
87
|
+
model = IPFabricTransformField
|
|
88
|
+
fields = (
|
|
89
|
+
"id",
|
|
90
|
+
"transform_map",
|
|
91
|
+
"source_field",
|
|
92
|
+
"target_field",
|
|
93
|
+
"coalesce",
|
|
94
|
+
"template",
|
|
95
|
+
)
|
|
80
96
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
97
|
+
|
|
98
|
+
class IPFabricRelationshipFieldSerializer(NestedGroupModelSerializer):
|
|
99
|
+
transform_map = IPFabricTransformMapSerializer(nested=True)
|
|
100
|
+
source_model = ContentTypeField(
|
|
101
|
+
queryset=ContentType.objects.filter(IPFabricRelationshipFieldSourceModels)
|
|
102
|
+
)
|
|
84
103
|
|
|
85
104
|
class Meta:
|
|
86
105
|
model = IPFabricRelationshipField
|
|
87
|
-
fields =
|
|
106
|
+
fields = (
|
|
88
107
|
"id",
|
|
89
108
|
"transform_map",
|
|
90
109
|
"source_model",
|
|
91
110
|
"target_field",
|
|
92
111
|
"coalesce",
|
|
93
112
|
"template",
|
|
94
|
-
|
|
113
|
+
)
|
|
95
114
|
|
|
96
115
|
|
|
97
|
-
class
|
|
116
|
+
class IPFabricSourceSerializer(NestedGroupModelSerializer):
|
|
117
|
+
status = ChoiceField(choices=DataSourceStatusChoices, read_only=True)
|
|
118
|
+
url = serializers.URLField()
|
|
119
|
+
|
|
98
120
|
class Meta:
|
|
99
|
-
model =
|
|
100
|
-
fields =
|
|
121
|
+
model = IPFabricSource
|
|
122
|
+
fields = (
|
|
123
|
+
"id",
|
|
124
|
+
"url",
|
|
125
|
+
"display",
|
|
101
126
|
"name",
|
|
127
|
+
"type",
|
|
128
|
+
"status",
|
|
129
|
+
"last_synced",
|
|
102
130
|
"description",
|
|
103
|
-
"
|
|
131
|
+
"comments",
|
|
132
|
+
"parameters",
|
|
104
133
|
"created",
|
|
105
134
|
"last_updated",
|
|
106
|
-
|
|
135
|
+
)
|
|
136
|
+
brief_fields = (
|
|
137
|
+
"display",
|
|
138
|
+
"id",
|
|
139
|
+
"name",
|
|
140
|
+
"status",
|
|
141
|
+
"type",
|
|
142
|
+
"url",
|
|
143
|
+
)
|
|
107
144
|
|
|
108
145
|
|
|
109
|
-
class
|
|
110
|
-
|
|
146
|
+
class IPFabricSnapshotSerializer(NestedGroupModelSerializer):
|
|
147
|
+
source = IPFabricSourceSerializer(nested=True, read_only=True)
|
|
148
|
+
data = serializers.JSONField()
|
|
149
|
+
display = serializers.CharField(source="__str__", read_only=True)
|
|
111
150
|
|
|
112
151
|
class Meta:
|
|
113
|
-
model =
|
|
114
|
-
fields =
|
|
152
|
+
model = IPFabricSnapshot
|
|
153
|
+
fields = (
|
|
115
154
|
"id",
|
|
116
|
-
"
|
|
117
|
-
"
|
|
155
|
+
"display",
|
|
156
|
+
"name",
|
|
157
|
+
"source",
|
|
158
|
+
"snapshot_id",
|
|
159
|
+
"status",
|
|
160
|
+
"data",
|
|
161
|
+
"date",
|
|
118
162
|
"created",
|
|
119
163
|
"last_updated",
|
|
120
|
-
|
|
164
|
+
)
|
|
165
|
+
brief_fields = (
|
|
166
|
+
"display",
|
|
167
|
+
"id",
|
|
168
|
+
"name",
|
|
169
|
+
"source",
|
|
170
|
+
"snapshot_id",
|
|
171
|
+
"status",
|
|
172
|
+
"data",
|
|
173
|
+
"date",
|
|
174
|
+
)
|
|
121
175
|
|
|
122
176
|
|
|
123
|
-
class
|
|
124
|
-
|
|
177
|
+
class IPFabricSyncSerializer(NestedGroupModelSerializer):
|
|
178
|
+
snapshot_data = IPFabricSnapshotSerializer(nested=True)
|
|
125
179
|
|
|
126
180
|
class Meta:
|
|
127
|
-
model =
|
|
128
|
-
fields =
|
|
181
|
+
model = IPFabricSync
|
|
182
|
+
fields = (
|
|
129
183
|
"id",
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
|
|
184
|
+
"name",
|
|
185
|
+
"snapshot_data",
|
|
186
|
+
"status",
|
|
187
|
+
"parameters",
|
|
188
|
+
"auto_merge",
|
|
189
|
+
"last_synced",
|
|
190
|
+
"scheduled",
|
|
191
|
+
"interval",
|
|
192
|
+
"user",
|
|
193
|
+
)
|
|
194
|
+
brief_fields = (
|
|
195
|
+
"auto_merge",
|
|
196
|
+
"id",
|
|
197
|
+
"last_synced",
|
|
198
|
+
"name",
|
|
199
|
+
"parameters",
|
|
200
|
+
"status",
|
|
201
|
+
)
|
|
136
202
|
|
|
137
203
|
|
|
138
|
-
class IPFabricIngestionSerializer(
|
|
204
|
+
class IPFabricIngestionSerializer(NestedGroupModelSerializer):
|
|
139
205
|
branch = BranchSerializer(read_only=True)
|
|
140
|
-
sync =
|
|
206
|
+
sync = IPFabricSyncSerializer(nested=True)
|
|
141
207
|
|
|
142
208
|
class Meta:
|
|
143
209
|
model = IPFabricIngestion
|
|
144
|
-
fields =
|
|
210
|
+
fields = (
|
|
211
|
+
"id",
|
|
212
|
+
"name",
|
|
213
|
+
"branch",
|
|
214
|
+
"sync",
|
|
215
|
+
)
|
|
216
|
+
brief_fields = (
|
|
145
217
|
"id",
|
|
146
218
|
"name",
|
|
147
219
|
"branch",
|
|
148
220
|
"sync",
|
|
149
|
-
|
|
221
|
+
)
|
|
150
222
|
|
|
151
223
|
|
|
152
|
-
class IPFabricIngestionIssueSerializer(
|
|
153
|
-
ingestion = IPFabricIngestionSerializer(
|
|
224
|
+
class IPFabricIngestionIssueSerializer(NestedGroupModelSerializer):
|
|
225
|
+
ingestion = IPFabricIngestionSerializer(nested=True)
|
|
154
226
|
|
|
155
227
|
class Meta:
|
|
156
228
|
model = IPFabricIngestionIssue
|
|
157
|
-
fields =
|
|
229
|
+
fields = (
|
|
158
230
|
"id",
|
|
159
231
|
"ingestion",
|
|
160
232
|
"timestamp",
|
|
@@ -164,26 +236,11 @@ class IPFabricIngestionIssueSerializer(NetBoxModelSerializer):
|
|
|
164
236
|
"coalesce_fields",
|
|
165
237
|
"defaults",
|
|
166
238
|
"exception",
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
class IPFabricSourceSerializer(NetBoxModelSerializer):
|
|
171
|
-
status = ChoiceField(choices=DataSourceStatusChoices)
|
|
172
|
-
url = serializers.URLField()
|
|
173
|
-
|
|
174
|
-
class Meta:
|
|
175
|
-
model = IPFabricSource
|
|
176
|
-
fields = [
|
|
239
|
+
)
|
|
240
|
+
brief_fields = (
|
|
241
|
+
"exception",
|
|
177
242
|
"id",
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
|
|
182
|
-
"status",
|
|
183
|
-
"last_synced",
|
|
184
|
-
"description",
|
|
185
|
-
"comments",
|
|
186
|
-
"parameters",
|
|
187
|
-
"created",
|
|
188
|
-
"last_updated",
|
|
189
|
-
]
|
|
243
|
+
"ingestion",
|
|
244
|
+
"message",
|
|
245
|
+
"model",
|
|
246
|
+
)
|
ipfabric_netbox/api/urls.py
CHANGED
|
@@ -3,11 +3,11 @@ from netbox.api.routers import NetBoxRouter
|
|
|
3
3
|
|
|
4
4
|
from ipfabric_netbox.api.views import IPFabricIngestionIssueViewSet
|
|
5
5
|
from ipfabric_netbox.api.views import IPFabricIngestionViewSet
|
|
6
|
-
from ipfabric_netbox.api.views import
|
|
6
|
+
from ipfabric_netbox.api.views import IPFabricRelationshipFieldViewSet
|
|
7
7
|
from ipfabric_netbox.api.views import IPFabricSnapshotViewSet
|
|
8
8
|
from ipfabric_netbox.api.views import IPFabricSourceViewSet
|
|
9
9
|
from ipfabric_netbox.api.views import IPFabricSyncViewSet
|
|
10
|
-
from ipfabric_netbox.api.views import
|
|
10
|
+
from ipfabric_netbox.api.views import IPFabricTransformFieldViewSet
|
|
11
11
|
from ipfabric_netbox.api.views import IPFabricTransformMapGroupViewSet
|
|
12
12
|
from ipfabric_netbox.api.views import IPFabricTransformMapViewSet
|
|
13
13
|
|
|
@@ -20,6 +20,6 @@ router.register("transform-map", IPFabricTransformMapViewSet)
|
|
|
20
20
|
router.register("sync", IPFabricSyncViewSet)
|
|
21
21
|
router.register("ingestion", IPFabricIngestionViewSet)
|
|
22
22
|
router.register("ingestion-issues", IPFabricIngestionIssueViewSet)
|
|
23
|
-
router.register("transform-field",
|
|
24
|
-
router.register("relationship-field",
|
|
23
|
+
router.register("transform-field", IPFabricTransformFieldViewSet)
|
|
24
|
+
router.register("relationship-field", IPFabricRelationshipFieldViewSet)
|
|
25
25
|
urlpatterns = router.urls
|
ipfabric_netbox/api/views.py
CHANGED
|
@@ -14,6 +14,7 @@ from .serializers import IPFabricSyncSerializer
|
|
|
14
14
|
from .serializers import IPFabricTransformFieldSerializer
|
|
15
15
|
from .serializers import IPFabricTransformMapGroupSerializer
|
|
16
16
|
from .serializers import IPFabricTransformMapSerializer
|
|
17
|
+
from ipfabric_netbox.filtersets import IPFabricRelationshipFieldFilterSet
|
|
17
18
|
from ipfabric_netbox.filtersets import IPFabricSnapshotFilterSet
|
|
18
19
|
from ipfabric_netbox.filtersets import IPFabricSourceFilterSet
|
|
19
20
|
from ipfabric_netbox.filtersets import IPFabricTransformFieldFilterSet
|
|
@@ -29,29 +30,29 @@ from ipfabric_netbox.models import IPFabricTransformMap
|
|
|
29
30
|
from ipfabric_netbox.models import IPFabricTransformMapGroup
|
|
30
31
|
|
|
31
32
|
|
|
32
|
-
class IPFabricTransformMapGroupViewSet(
|
|
33
|
+
class IPFabricTransformMapGroupViewSet(NetBoxModelViewSet):
|
|
33
34
|
queryset = IPFabricTransformMapGroup.objects.all()
|
|
34
35
|
serializer_class = IPFabricTransformMapGroupSerializer
|
|
35
36
|
|
|
36
37
|
|
|
37
|
-
class IPFabricTransformMapViewSet(
|
|
38
|
+
class IPFabricTransformMapViewSet(NetBoxModelViewSet):
|
|
38
39
|
queryset = IPFabricTransformMap.objects.all()
|
|
39
40
|
serializer_class = IPFabricTransformMapSerializer
|
|
40
41
|
|
|
41
42
|
|
|
42
|
-
class
|
|
43
|
+
class IPFabricTransformFieldViewSet(NetBoxModelViewSet):
|
|
43
44
|
queryset = IPFabricTransformField.objects.all()
|
|
44
45
|
serializer_class = IPFabricTransformFieldSerializer
|
|
45
46
|
filterset_class = IPFabricTransformFieldFilterSet
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
class
|
|
49
|
+
class IPFabricRelationshipFieldViewSet(NetBoxModelViewSet):
|
|
49
50
|
queryset = IPFabricRelationshipField.objects.all()
|
|
50
51
|
serializer_class = IPFabricRelationshipFieldSerializer
|
|
51
|
-
filterset_class =
|
|
52
|
+
filterset_class = IPFabricRelationshipFieldFilterSet
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
class IPFabricSyncViewSet(
|
|
55
|
+
class IPFabricSyncViewSet(NetBoxModelViewSet):
|
|
55
56
|
queryset = IPFabricSync.objects.all()
|
|
56
57
|
serializer_class = IPFabricSyncSerializer
|
|
57
58
|
|
|
@@ -66,7 +67,7 @@ class IPFabricIngestionIssueViewSet(NetBoxReadOnlyModelViewSet):
|
|
|
66
67
|
serializer_class = IPFabricIngestionIssueSerializer
|
|
67
68
|
|
|
68
69
|
|
|
69
|
-
class IPFabricSnapshotViewSet(
|
|
70
|
+
class IPFabricSnapshotViewSet(NetBoxReadOnlyModelViewSet):
|
|
70
71
|
queryset = IPFabricSnapshot.objects.all()
|
|
71
72
|
serializer_class = IPFabricSnapshotSerializer
|
|
72
73
|
filterset_class = IPFabricSnapshotFilterSet
|
|
@@ -79,24 +80,21 @@ class IPFabricSnapshotViewSet(NetBoxModelViewSet):
|
|
|
79
80
|
raw_data._raw_delete(raw_data.db)
|
|
80
81
|
return Response({"status": "success"})
|
|
81
82
|
elif request.method == "PATCH":
|
|
82
|
-
transaction.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
batch_size=5000,
|
|
91
|
-
)
|
|
92
|
-
transaction.commit()
|
|
83
|
+
with transaction.atomic():
|
|
84
|
+
IPFabricData.objects.bulk_create(
|
|
85
|
+
[
|
|
86
|
+
IPFabricData(snapshot_data=snapshot, data=item["data"])
|
|
87
|
+
for item in request.data["data"]
|
|
88
|
+
],
|
|
89
|
+
batch_size=5000,
|
|
90
|
+
)
|
|
93
91
|
return Response({"status": "success"})
|
|
94
92
|
|
|
95
93
|
@action(detail=True, methods=["get"], url_path="sites")
|
|
96
94
|
def sites(self, request, pk):
|
|
97
95
|
q = request.GET.get("q", None)
|
|
98
96
|
snapshot = IPFabricSnapshot.objects.get(pk=pk)
|
|
99
|
-
new_sites = {"results": []}
|
|
97
|
+
new_sites = {"count": 0, "results": []}
|
|
100
98
|
if snapshot.data:
|
|
101
99
|
sites = snapshot.data.get("sites", None)
|
|
102
100
|
num = 0
|
|
@@ -112,6 +110,7 @@ class IPFabricSnapshotViewSet(NetBoxModelViewSet):
|
|
|
112
110
|
{"display": site, "name": site, "id": site}
|
|
113
111
|
)
|
|
114
112
|
num += 1
|
|
113
|
+
new_sites["count"] = num
|
|
115
114
|
return Response(new_sites)
|
|
116
115
|
else:
|
|
117
116
|
return Response([])
|
ipfabric_netbox/choices.py
CHANGED
|
@@ -198,18 +198,6 @@ class IPFabricSnapshotStatusModelChoices(ChoiceSet):
|
|
|
198
198
|
]
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
class IPFabricSyncTypeChoices(ChoiceSet):
|
|
202
|
-
ALL = "all"
|
|
203
|
-
DCIM = "dcim"
|
|
204
|
-
IPAM = "ipam"
|
|
205
|
-
|
|
206
|
-
CHOICES = (
|
|
207
|
-
(ALL, _("All"), "gray"),
|
|
208
|
-
(DCIM, _("DCIM"), "blue"),
|
|
209
|
-
(IPAM, _("IPAM"), "blue"),
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
|
|
213
201
|
class IPFabricSourceTypeChoices(ChoiceSet):
|
|
214
202
|
LOCAL = "local"
|
|
215
203
|
REMOTE = "remote"
|
ipfabric_netbox/filtersets.py
CHANGED
|
@@ -11,9 +11,11 @@ from netbox_branching.models import ChangeDiff
|
|
|
11
11
|
from .models import IPFabricData
|
|
12
12
|
from .models import IPFabricIngestion
|
|
13
13
|
from .models import IPFabricIngestionIssue
|
|
14
|
+
from .models import IPFabricRelationshipField
|
|
14
15
|
from .models import IPFabricSnapshot
|
|
15
16
|
from .models import IPFabricSource
|
|
16
17
|
from .models import IPFabricSync
|
|
18
|
+
from .models import IPFabricTransformField
|
|
17
19
|
from .models import IPFabricTransformMap
|
|
18
20
|
from .models import IPFabricTransformMapGroup
|
|
19
21
|
|
|
@@ -72,14 +74,12 @@ class IPFabricDataFilterSet(BaseFilterSet):
|
|
|
72
74
|
|
|
73
75
|
class Meta:
|
|
74
76
|
model = IPFabricData
|
|
75
|
-
fields = ["snapshot_data"
|
|
77
|
+
fields = ["snapshot_data"]
|
|
76
78
|
|
|
77
79
|
def search(self, queryset, name, value):
|
|
78
80
|
if not value.strip():
|
|
79
81
|
return queryset
|
|
80
|
-
return queryset.filter(
|
|
81
|
-
Q(snapshot_data__icontains=value) | Q(type__icontains=value)
|
|
82
|
-
)
|
|
82
|
+
return queryset.filter(Q(snapshot_data__icontains=value))
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
class IPFabricSnapshotFilterSet(ChangeLoggedModelFilterSet):
|
|
@@ -193,3 +193,66 @@ class IPFabricTransformFieldFilterSet(BaseFilterSet):
|
|
|
193
193
|
transform_map = django_filters.ModelMultipleChoiceFilter(
|
|
194
194
|
queryset=IPFabricTransformMap.objects.all(), label=_("Transform Map")
|
|
195
195
|
)
|
|
196
|
+
|
|
197
|
+
class Meta:
|
|
198
|
+
model = IPFabricTransformField
|
|
199
|
+
fields = (
|
|
200
|
+
"id",
|
|
201
|
+
"transform_map",
|
|
202
|
+
"source_field",
|
|
203
|
+
"target_field",
|
|
204
|
+
"coalesce",
|
|
205
|
+
"template",
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class IPFabricRelationshipFieldFilterSet(BaseFilterSet):
|
|
210
|
+
transform_map = django_filters.ModelMultipleChoiceFilter(
|
|
211
|
+
queryset=IPFabricTransformMap.objects.all(), label=_("Transform Map")
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
class Meta:
|
|
215
|
+
model = IPFabricRelationshipField
|
|
216
|
+
fields = (
|
|
217
|
+
"id",
|
|
218
|
+
"transform_map",
|
|
219
|
+
"source_model",
|
|
220
|
+
"target_field",
|
|
221
|
+
"coalesce",
|
|
222
|
+
"template",
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class IPFabricSyncFilterSet(ChangeLoggedModelFilterSet):
|
|
227
|
+
q = django_filters.CharFilter(method="search")
|
|
228
|
+
snapshot_data_id = django_filters.ModelMultipleChoiceFilter(
|
|
229
|
+
queryset=IPFabricSnapshot.objects.all(),
|
|
230
|
+
label=_("Snapshot (ID)"),
|
|
231
|
+
)
|
|
232
|
+
snapshot_data = django_filters.ModelMultipleChoiceFilter(
|
|
233
|
+
field_name="snapshot_data__name",
|
|
234
|
+
queryset=IPFabricSnapshot.objects.all(),
|
|
235
|
+
to_field_name="name",
|
|
236
|
+
label=_("Snapshot (name)"),
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
class Meta:
|
|
240
|
+
model = IPFabricSync
|
|
241
|
+
fields = (
|
|
242
|
+
"id",
|
|
243
|
+
"name",
|
|
244
|
+
"snapshot_data",
|
|
245
|
+
"snapshot_data_id",
|
|
246
|
+
"status",
|
|
247
|
+
"auto_merge",
|
|
248
|
+
"last_synced",
|
|
249
|
+
"scheduled",
|
|
250
|
+
"interval",
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
def search(self, queryset, name, value):
|
|
254
|
+
if not value.strip():
|
|
255
|
+
return queryset
|
|
256
|
+
return queryset.filter(
|
|
257
|
+
Q(name__icontains=value) | Q(snapshot_data__name__icontains=value)
|
|
258
|
+
)
|