ipfabric_netbox 4.2.0b4__py3-none-any.whl → 4.2.0b6__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.
- ipfabric_netbox/__init__.py +1 -1
- ipfabric_netbox/api/__init__.py +0 -1
- ipfabric_netbox/api/serializers.py +148 -90
- ipfabric_netbox/api/urls.py +4 -4
- ipfabric_netbox/api/views.py +20 -19
- ipfabric_netbox/filtersets.py +66 -0
- ipfabric_netbox/forms.py +10 -1
- ipfabric_netbox/graphql/__init__.py +23 -0
- ipfabric_netbox/graphql/enums.py +38 -0
- ipfabric_netbox/graphql/filters.py +266 -0
- ipfabric_netbox/graphql/schema.py +101 -0
- ipfabric_netbox/graphql/types.py +195 -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/models.py +6 -4
- ipfabric_netbox/tests/api/__init__.py +0 -0
- ipfabric_netbox/tests/api/test_api.py +891 -0
- ipfabric_netbox/tests/test_models.py +47 -10
- ipfabric_netbox/utilities/ipfutils.py +43 -23
- {ipfabric_netbox-4.2.0b4.dist-info → ipfabric_netbox-4.2.0b6.dist-info}/METADATA +1 -1
- {ipfabric_netbox-4.2.0b4.dist-info → ipfabric_netbox-4.2.0b6.dist-info}/RECORD +22 -14
- ipfabric_netbox/api/nested_serializers.py +0 -78
- {ipfabric_netbox-4.2.0b4.dist-info → ipfabric_netbox-4.2.0b6.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,202 @@ __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
|
+
"type",
|
|
187
|
+
"status",
|
|
188
|
+
"parameters",
|
|
189
|
+
"auto_merge",
|
|
190
|
+
"last_synced",
|
|
191
|
+
"scheduled",
|
|
192
|
+
"interval",
|
|
193
|
+
"user",
|
|
194
|
+
)
|
|
195
|
+
brief_fields = (
|
|
196
|
+
"auto_merge",
|
|
197
|
+
"id",
|
|
198
|
+
"last_synced",
|
|
199
|
+
"name",
|
|
200
|
+
"parameters",
|
|
201
|
+
"status",
|
|
202
|
+
)
|
|
136
203
|
|
|
137
204
|
|
|
138
|
-
class IPFabricIngestionSerializer(
|
|
205
|
+
class IPFabricIngestionSerializer(NestedGroupModelSerializer):
|
|
139
206
|
branch = BranchSerializer(read_only=True)
|
|
140
|
-
sync =
|
|
207
|
+
sync = IPFabricSyncSerializer(nested=True)
|
|
141
208
|
|
|
142
209
|
class Meta:
|
|
143
210
|
model = IPFabricIngestion
|
|
144
|
-
fields =
|
|
211
|
+
fields = (
|
|
212
|
+
"id",
|
|
213
|
+
"name",
|
|
214
|
+
"branch",
|
|
215
|
+
"sync",
|
|
216
|
+
)
|
|
217
|
+
brief_fields = (
|
|
145
218
|
"id",
|
|
146
219
|
"name",
|
|
147
220
|
"branch",
|
|
148
221
|
"sync",
|
|
149
|
-
|
|
222
|
+
)
|
|
150
223
|
|
|
151
224
|
|
|
152
|
-
class IPFabricIngestionIssueSerializer(
|
|
153
|
-
ingestion = IPFabricIngestionSerializer(
|
|
225
|
+
class IPFabricIngestionIssueSerializer(NestedGroupModelSerializer):
|
|
226
|
+
ingestion = IPFabricIngestionSerializer(nested=True)
|
|
154
227
|
|
|
155
228
|
class Meta:
|
|
156
229
|
model = IPFabricIngestionIssue
|
|
157
|
-
fields =
|
|
230
|
+
fields = (
|
|
158
231
|
"id",
|
|
159
232
|
"ingestion",
|
|
160
233
|
"timestamp",
|
|
@@ -164,26 +237,11 @@ class IPFabricIngestionIssueSerializer(NetBoxModelSerializer):
|
|
|
164
237
|
"coalesce_fields",
|
|
165
238
|
"defaults",
|
|
166
239
|
"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 = [
|
|
240
|
+
)
|
|
241
|
+
brief_fields = (
|
|
242
|
+
"exception",
|
|
177
243
|
"id",
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
|
|
182
|
-
"status",
|
|
183
|
-
"last_synced",
|
|
184
|
-
"description",
|
|
185
|
-
"comments",
|
|
186
|
-
"parameters",
|
|
187
|
-
"created",
|
|
188
|
-
"last_updated",
|
|
189
|
-
]
|
|
244
|
+
"ingestion",
|
|
245
|
+
"message",
|
|
246
|
+
"model",
|
|
247
|
+
)
|
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,23 @@ 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
|
-
|
|
91
|
-
|
|
92
|
-
transaction.commit()
|
|
83
|
+
with transaction.atomic():
|
|
84
|
+
IPFabricData.objects.bulk_create(
|
|
85
|
+
[
|
|
86
|
+
IPFabricData(
|
|
87
|
+
snapshot_data=snapshot, data=item["data"], type=item["type"]
|
|
88
|
+
)
|
|
89
|
+
for item in request.data["data"]
|
|
90
|
+
],
|
|
91
|
+
batch_size=5000,
|
|
92
|
+
)
|
|
93
93
|
return Response({"status": "success"})
|
|
94
94
|
|
|
95
95
|
@action(detail=True, methods=["get"], url_path="sites")
|
|
96
96
|
def sites(self, request, pk):
|
|
97
97
|
q = request.GET.get("q", None)
|
|
98
98
|
snapshot = IPFabricSnapshot.objects.get(pk=pk)
|
|
99
|
-
new_sites = {"results": []}
|
|
99
|
+
new_sites = {"count": 0, "results": []}
|
|
100
100
|
if snapshot.data:
|
|
101
101
|
sites = snapshot.data.get("sites", None)
|
|
102
102
|
num = 0
|
|
@@ -112,6 +112,7 @@ class IPFabricSnapshotViewSet(NetBoxModelViewSet):
|
|
|
112
112
|
{"display": site, "name": site, "id": site}
|
|
113
113
|
)
|
|
114
114
|
num += 1
|
|
115
|
+
new_sites["count"] = num
|
|
115
116
|
return Response(new_sites)
|
|
116
117
|
else:
|
|
117
118
|
return Response([])
|
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
|
|
|
@@ -193,3 +195,67 @@ class IPFabricTransformFieldFilterSet(BaseFilterSet):
|
|
|
193
195
|
transform_map = django_filters.ModelMultipleChoiceFilter(
|
|
194
196
|
queryset=IPFabricTransformMap.objects.all(), label=_("Transform Map")
|
|
195
197
|
)
|
|
198
|
+
|
|
199
|
+
class Meta:
|
|
200
|
+
model = IPFabricTransformField
|
|
201
|
+
fields = (
|
|
202
|
+
"id",
|
|
203
|
+
"transform_map",
|
|
204
|
+
"source_field",
|
|
205
|
+
"target_field",
|
|
206
|
+
"coalesce",
|
|
207
|
+
"template",
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class IPFabricRelationshipFieldFilterSet(BaseFilterSet):
|
|
212
|
+
transform_map = django_filters.ModelMultipleChoiceFilter(
|
|
213
|
+
queryset=IPFabricTransformMap.objects.all(), label=_("Transform Map")
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
class Meta:
|
|
217
|
+
model = IPFabricRelationshipField
|
|
218
|
+
fields = (
|
|
219
|
+
"id",
|
|
220
|
+
"transform_map",
|
|
221
|
+
"source_model",
|
|
222
|
+
"target_field",
|
|
223
|
+
"coalesce",
|
|
224
|
+
"template",
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class IPFabricSyncFilterSet(ChangeLoggedModelFilterSet):
|
|
229
|
+
q = django_filters.CharFilter(method="search")
|
|
230
|
+
snapshot_data_id = django_filters.ModelMultipleChoiceFilter(
|
|
231
|
+
queryset=IPFabricSnapshot.objects.all(),
|
|
232
|
+
label=_("Snapshot (ID)"),
|
|
233
|
+
)
|
|
234
|
+
snapshot_data = django_filters.ModelMultipleChoiceFilter(
|
|
235
|
+
field_name="snapshot_data__name",
|
|
236
|
+
queryset=IPFabricSnapshot.objects.all(),
|
|
237
|
+
to_field_name="name",
|
|
238
|
+
label=_("Snapshot (name)"),
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
class Meta:
|
|
242
|
+
model = IPFabricSync
|
|
243
|
+
fields = (
|
|
244
|
+
"id",
|
|
245
|
+
"name",
|
|
246
|
+
"snapshot_data",
|
|
247
|
+
"snapshot_data_id",
|
|
248
|
+
"type",
|
|
249
|
+
"status",
|
|
250
|
+
"auto_merge",
|
|
251
|
+
"last_synced",
|
|
252
|
+
"scheduled",
|
|
253
|
+
"interval",
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def search(self, queryset, name, value):
|
|
257
|
+
if not value.strip():
|
|
258
|
+
return queryset
|
|
259
|
+
return queryset.filter(
|
|
260
|
+
Q(name__icontains=value) | Q(snapshot_data__name__icontains=value)
|
|
261
|
+
)
|
ipfabric_netbox/forms.py
CHANGED
|
@@ -493,6 +493,12 @@ class IPFabricSyncForm(NetBoxModelForm):
|
|
|
493
493
|
),
|
|
494
494
|
)
|
|
495
495
|
|
|
496
|
+
update_custom_fields = forms.BooleanField(
|
|
497
|
+
required=False,
|
|
498
|
+
label=_("Custom Fields Updating"),
|
|
499
|
+
help_text=_("Update object custom fields where applicable."),
|
|
500
|
+
)
|
|
501
|
+
|
|
496
502
|
scheduled = forms.DateTimeField(
|
|
497
503
|
required=False,
|
|
498
504
|
widget=DateTimePicker(),
|
|
@@ -519,6 +525,7 @@ class IPFabricSyncForm(NetBoxModelForm):
|
|
|
519
525
|
"source",
|
|
520
526
|
"snapshot_data",
|
|
521
527
|
"auto_merge",
|
|
528
|
+
"update_custom_fields",
|
|
522
529
|
"sites",
|
|
523
530
|
"type",
|
|
524
531
|
"tags",
|
|
@@ -550,7 +557,9 @@ class IPFabricSyncForm(NetBoxModelForm):
|
|
|
550
557
|
fieldsets.append(
|
|
551
558
|
FieldSet("scheduled", "interval", name=_("Ingestion Execution Parameters"))
|
|
552
559
|
)
|
|
553
|
-
fieldsets.append(
|
|
560
|
+
fieldsets.append(
|
|
561
|
+
FieldSet("auto_merge", "update_custom_fields", name=_("Extras"))
|
|
562
|
+
)
|
|
554
563
|
fieldsets.append(FieldSet("tags", name=_("Tags")))
|
|
555
564
|
|
|
556
565
|
return fieldsets
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from .schema import IPFabricDataQuery
|
|
2
|
+
from .schema import IPFabricIngestionIssueQuery
|
|
3
|
+
from .schema import IPFabricIngestionQuery
|
|
4
|
+
from .schema import IPFabricRelationshipFieldQuery
|
|
5
|
+
from .schema import IPFabricSnapshotQuery
|
|
6
|
+
from .schema import IPFabricSourceQuery
|
|
7
|
+
from .schema import IPFabricSyncQuery
|
|
8
|
+
from .schema import IPFabricTransformFieldQuery
|
|
9
|
+
from .schema import IPFabricTransformMapGroupQuery
|
|
10
|
+
from .schema import IPFabricTransformMapQuery
|
|
11
|
+
|
|
12
|
+
schema = [
|
|
13
|
+
IPFabricTransformMapGroupQuery,
|
|
14
|
+
IPFabricTransformMapQuery,
|
|
15
|
+
IPFabricTransformFieldQuery,
|
|
16
|
+
IPFabricRelationshipFieldQuery,
|
|
17
|
+
IPFabricSourceQuery,
|
|
18
|
+
IPFabricSnapshotQuery,
|
|
19
|
+
IPFabricSyncQuery,
|
|
20
|
+
IPFabricIngestionQuery,
|
|
21
|
+
IPFabricIngestionIssueQuery,
|
|
22
|
+
IPFabricDataQuery,
|
|
23
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import strawberry
|
|
2
|
+
from core.choices import DataSourceStatusChoices
|
|
3
|
+
from core.choices import JobStatusChoices
|
|
4
|
+
from netbox_branching.choices import BranchStatusChoices
|
|
5
|
+
|
|
6
|
+
from ipfabric_netbox.choices import IPFabricRawDataTypeChoices
|
|
7
|
+
from ipfabric_netbox.choices import IPFabricSnapshotStatusModelChoices
|
|
8
|
+
from ipfabric_netbox.choices import IPFabricSourceTypeChoices
|
|
9
|
+
from ipfabric_netbox.choices import IPFabricSyncTypeChoices
|
|
10
|
+
from ipfabric_netbox.choices import IPFabricTransformMapSourceModelChoices
|
|
11
|
+
|
|
12
|
+
__all__ = (
|
|
13
|
+
"DataSourceStatusEnum",
|
|
14
|
+
"IPFabricTransformMapSourceModelEnum",
|
|
15
|
+
"IPFabricSourceTypeEnum",
|
|
16
|
+
"IPFabricSnapshotStatusModelEnum",
|
|
17
|
+
"IPFabricSyncTypeEnum",
|
|
18
|
+
"IPFabricRawDataTypeEnum",
|
|
19
|
+
"BranchStatusEnum",
|
|
20
|
+
"JobStatusEnum",
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
DataSourceStatusEnum = strawberry.enum(DataSourceStatusChoices.as_enum(prefix="type"))
|
|
24
|
+
IPFabricTransformMapSourceModelEnum = strawberry.enum(
|
|
25
|
+
IPFabricTransformMapSourceModelChoices.as_enum(prefix="type")
|
|
26
|
+
)
|
|
27
|
+
IPFabricSourceTypeEnum = strawberry.enum(
|
|
28
|
+
IPFabricSourceTypeChoices.as_enum(prefix="type")
|
|
29
|
+
)
|
|
30
|
+
IPFabricSnapshotStatusModelEnum = strawberry.enum(
|
|
31
|
+
IPFabricSnapshotStatusModelChoices.as_enum(prefix="type")
|
|
32
|
+
)
|
|
33
|
+
IPFabricSyncTypeEnum = strawberry.enum(IPFabricSyncTypeChoices.as_enum(prefix="type"))
|
|
34
|
+
IPFabricRawDataTypeEnum = strawberry.enum(
|
|
35
|
+
IPFabricRawDataTypeChoices.as_enum(prefix="type")
|
|
36
|
+
)
|
|
37
|
+
BranchStatusEnum = strawberry.enum(BranchStatusChoices.as_enum(prefix="type"))
|
|
38
|
+
JobStatusEnum = strawberry.enum(JobStatusChoices.as_enum(prefix="type"))
|