ipfabric_netbox 4.2.2__py3-none-any.whl → 4.2.2b2__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 +99 -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/templates/ipfabric_netbox/ipfabricsource.html +1 -1
- 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.2.dist-info → ipfabric_netbox-4.2.2b2.dist-info}/METADATA +8 -7
- {ipfabric_netbox-4.2.2.dist-info → ipfabric_netbox-4.2.2b2.dist-info}/RECORD +28 -19
- {ipfabric_netbox-4.2.2.dist-info → ipfabric_netbox-4.2.2b2.dist-info}/WHEEL +1 -1
- ipfabric_netbox/api/nested_serializers.py +0 -78
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync_list.html +0 -71
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Annotated
|
|
3
|
+
|
|
4
|
+
import strawberry
|
|
5
|
+
import strawberry_django
|
|
6
|
+
from core.graphql.filter_mixins import BaseFilterMixin
|
|
7
|
+
from core.graphql.filters import ContentTypeFilter
|
|
8
|
+
from core.models import Job
|
|
9
|
+
from netbox.graphql.filter_lookups import IntegerLookup
|
|
10
|
+
from netbox.graphql.filter_lookups import JSONFilter
|
|
11
|
+
from netbox.graphql.filter_lookups import StringArrayLookup
|
|
12
|
+
from netbox.graphql.filter_mixins import ChangeLogFilterMixin
|
|
13
|
+
from netbox.graphql.filter_mixins import NetBoxModelFilterMixin
|
|
14
|
+
from netbox.graphql.filter_mixins import PrimaryModelFilterMixin
|
|
15
|
+
from netbox.graphql.filter_mixins import TagsFilterMixin
|
|
16
|
+
from netbox_branching.models import Branch
|
|
17
|
+
from strawberry.scalars import ID
|
|
18
|
+
from strawberry_django import DatetimeFilterLookup
|
|
19
|
+
from strawberry_django import FilterLookup
|
|
20
|
+
from users.graphql.filters import UserFilter
|
|
21
|
+
|
|
22
|
+
from ipfabric_netbox import models
|
|
23
|
+
from ipfabric_netbox.graphql.enums import BranchStatusEnum
|
|
24
|
+
from ipfabric_netbox.graphql.enums import DataSourceStatusEnum
|
|
25
|
+
from ipfabric_netbox.graphql.enums import IPFabricRawDataTypeEnum
|
|
26
|
+
from ipfabric_netbox.graphql.enums import IPFabricSnapshotStatusModelEnum
|
|
27
|
+
from ipfabric_netbox.graphql.enums import IPFabricSourceTypeEnum
|
|
28
|
+
from ipfabric_netbox.graphql.enums import IPFabricTransformMapSourceModelEnum
|
|
29
|
+
from ipfabric_netbox.graphql.enums import JobStatusEnum
|
|
30
|
+
|
|
31
|
+
__all__ = (
|
|
32
|
+
"IPFabricTransformMapGroupFilter",
|
|
33
|
+
"IPFabricTransformMapFilter",
|
|
34
|
+
"IPFabricTransformFieldFilter",
|
|
35
|
+
"IPFabricRelationshipFieldFilter",
|
|
36
|
+
"IPFabricSourceFilter",
|
|
37
|
+
"IPFabricSnapshotFilter",
|
|
38
|
+
"IPFabricSyncFilter",
|
|
39
|
+
"IPFabricIngestionFilter",
|
|
40
|
+
"IPFabricIngestionIssueFilter",
|
|
41
|
+
"IPFabricDataFilter",
|
|
42
|
+
"BranchFilter",
|
|
43
|
+
"JobFilter",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@strawberry_django.filter(models.IPFabricTransformMapGroup, lookups=True)
|
|
48
|
+
class IPFabricTransformMapGroupFilter(NetBoxModelFilterMixin):
|
|
49
|
+
id: ID | None = strawberry_django.filter_field()
|
|
50
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
51
|
+
description: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@strawberry_django.filter(models.IPFabricTransformMap, lookups=True)
|
|
55
|
+
class IPFabricTransformMapFilter(NetBoxModelFilterMixin):
|
|
56
|
+
id: ID | None = strawberry_django.filter_field()
|
|
57
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
58
|
+
source_model: (
|
|
59
|
+
Annotated[
|
|
60
|
+
"IPFabricTransformMapSourceModelEnum",
|
|
61
|
+
strawberry.lazy("ipfabric_netbox.graphql.enums"),
|
|
62
|
+
]
|
|
63
|
+
| None
|
|
64
|
+
) = strawberry_django.filter_field()
|
|
65
|
+
target_model: (
|
|
66
|
+
Annotated["ContentTypeFilter", strawberry.lazy("core.graphql.filters")] | None
|
|
67
|
+
) = strawberry_django.filter_field()
|
|
68
|
+
group: (
|
|
69
|
+
Annotated[
|
|
70
|
+
"IPFabricTransformMapGroupFilter",
|
|
71
|
+
strawberry.lazy("ipfabric_netbox.graphql.filters"),
|
|
72
|
+
]
|
|
73
|
+
| None
|
|
74
|
+
) = strawberry_django.filter_field()
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@strawberry_django.filter(models.IPFabricTransformField, lookups=True)
|
|
78
|
+
class IPFabricTransformFieldFilter(BaseFilterMixin):
|
|
79
|
+
id: ID | None = strawberry_django.filter_field()
|
|
80
|
+
transform_map: (
|
|
81
|
+
Annotated[
|
|
82
|
+
"IPFabricTransformMapFilter",
|
|
83
|
+
strawberry.lazy("ipfabric_netbox.graphql.filters"),
|
|
84
|
+
]
|
|
85
|
+
| None
|
|
86
|
+
) = strawberry_django.filter_field()
|
|
87
|
+
source_field: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
88
|
+
target_field: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
89
|
+
coalesce: (
|
|
90
|
+
Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
91
|
+
| None
|
|
92
|
+
) = strawberry_django.filter_field()
|
|
93
|
+
template: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@strawberry_django.filter(models.IPFabricRelationshipField, lookups=True)
|
|
97
|
+
class IPFabricRelationshipFieldFilter(BaseFilterMixin):
|
|
98
|
+
id: ID | None = strawberry_django.filter_field()
|
|
99
|
+
transform_map: (
|
|
100
|
+
Annotated[
|
|
101
|
+
"IPFabricTransformMapFilter",
|
|
102
|
+
strawberry.lazy("ipfabric_netbox.graphql.filters"),
|
|
103
|
+
]
|
|
104
|
+
| None
|
|
105
|
+
) = strawberry_django.filter_field()
|
|
106
|
+
source_model: (
|
|
107
|
+
Annotated["ContentTypeFilter", strawberry.lazy("core.graphql.filters")] | None
|
|
108
|
+
) = strawberry_django.filter_field()
|
|
109
|
+
target_field: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
110
|
+
coalesce: (
|
|
111
|
+
Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
112
|
+
| None
|
|
113
|
+
) = strawberry_django.filter_field()
|
|
114
|
+
template: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@strawberry_django.filter(models.IPFabricSource, lookups=True)
|
|
118
|
+
class IPFabricSourceFilter(PrimaryModelFilterMixin):
|
|
119
|
+
id: ID | None = strawberry_django.filter_field()
|
|
120
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
121
|
+
type: (
|
|
122
|
+
Annotated[
|
|
123
|
+
"IPFabricSourceTypeEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
|
|
124
|
+
]
|
|
125
|
+
| None
|
|
126
|
+
) = strawberry_django.filter_field()
|
|
127
|
+
url: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
128
|
+
status: (
|
|
129
|
+
Annotated[
|
|
130
|
+
"DataSourceStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
|
|
131
|
+
]
|
|
132
|
+
| None
|
|
133
|
+
) = strawberry_django.filter_field()
|
|
134
|
+
parameters: (
|
|
135
|
+
Annotated["JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")] | None
|
|
136
|
+
) = strawberry_django.filter_field()
|
|
137
|
+
last_synced: DatetimeFilterLookup[
|
|
138
|
+
datetime
|
|
139
|
+
] | None = strawberry_django.filter_field()
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
@strawberry_django.filter(models.IPFabricSnapshot, lookups=True)
|
|
143
|
+
class IPFabricSnapshotFilter(TagsFilterMixin, ChangeLogFilterMixin, BaseFilterMixin):
|
|
144
|
+
id: ID | None = strawberry_django.filter_field()
|
|
145
|
+
created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
146
|
+
last_updated: DatetimeFilterLookup[
|
|
147
|
+
datetime
|
|
148
|
+
] | None = strawberry_django.filter_field()
|
|
149
|
+
source: (
|
|
150
|
+
Annotated[
|
|
151
|
+
"IPFabricSourceFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
|
|
152
|
+
]
|
|
153
|
+
| None
|
|
154
|
+
) = strawberry_django.filter_field()
|
|
155
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
156
|
+
snapshot_id: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
157
|
+
data: (
|
|
158
|
+
Annotated["JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")] | None
|
|
159
|
+
) = strawberry_django.filter_field()
|
|
160
|
+
date: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
161
|
+
status: (
|
|
162
|
+
Annotated[
|
|
163
|
+
"IPFabricSnapshotStatusModelEnum",
|
|
164
|
+
strawberry.lazy("ipfabric_netbox.graphql.enums"),
|
|
165
|
+
]
|
|
166
|
+
| None
|
|
167
|
+
) = strawberry_django.filter_field()
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@strawberry_django.filter(models.IPFabricSync, lookups=True)
|
|
171
|
+
class IPFabricSyncFilter(TagsFilterMixin, ChangeLogFilterMixin, BaseFilterMixin):
|
|
172
|
+
id: ID | None = strawberry_django.filter_field()
|
|
173
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
174
|
+
snapshot_data: (
|
|
175
|
+
Annotated[
|
|
176
|
+
"IPFabricSnapshotFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
|
|
177
|
+
]
|
|
178
|
+
| None
|
|
179
|
+
) = strawberry_django.filter_field()
|
|
180
|
+
status: (
|
|
181
|
+
Annotated[
|
|
182
|
+
"DataSourceStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
|
|
183
|
+
]
|
|
184
|
+
| None
|
|
185
|
+
) = strawberry_django.filter_field()
|
|
186
|
+
parameters: (
|
|
187
|
+
Annotated["JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")] | None
|
|
188
|
+
) = strawberry_django.filter_field()
|
|
189
|
+
auto_merge: FilterLookup[bool] | None = strawberry_django.filter_field()
|
|
190
|
+
last_synced: DatetimeFilterLookup[
|
|
191
|
+
datetime
|
|
192
|
+
] | None = strawberry_django.filter_field()
|
|
193
|
+
scheduled: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
194
|
+
interval: (
|
|
195
|
+
Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
196
|
+
| None
|
|
197
|
+
) = strawberry_django.filter_field()
|
|
198
|
+
user: Annotated[
|
|
199
|
+
"UserFilter", strawberry.lazy("users.graphql.filters")
|
|
200
|
+
] | None = strawberry_django.filter_field()
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
@strawberry_django.filter(models.IPFabricIngestion, lookups=True)
|
|
204
|
+
class IPFabricIngestionFilter(BaseFilterMixin):
|
|
205
|
+
id: ID | None = strawberry_django.filter_field()
|
|
206
|
+
sync: (
|
|
207
|
+
Annotated[
|
|
208
|
+
"IPFabricSyncFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
|
|
209
|
+
]
|
|
210
|
+
| None
|
|
211
|
+
) = strawberry_django.filter_field()
|
|
212
|
+
job: (
|
|
213
|
+
Annotated["JobFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")]
|
|
214
|
+
| None
|
|
215
|
+
) = strawberry_django.filter_field()
|
|
216
|
+
branch: (
|
|
217
|
+
Annotated["BranchFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")]
|
|
218
|
+
| None
|
|
219
|
+
) = strawberry_django.filter_field()
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
@strawberry_django.filter(models.IPFabricIngestionIssue, lookups=True)
|
|
223
|
+
class IPFabricIngestionIssueFilter(BaseFilterMixin):
|
|
224
|
+
id: ID | None = strawberry_django.filter_field()
|
|
225
|
+
ingestion: (
|
|
226
|
+
Annotated[
|
|
227
|
+
"IPFabricIngestionFilter",
|
|
228
|
+
strawberry.lazy("ipfabric_netbox.graphql.filters"),
|
|
229
|
+
]
|
|
230
|
+
| None
|
|
231
|
+
) = strawberry_django.filter_field()
|
|
232
|
+
timestamp: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
233
|
+
model: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
234
|
+
message: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
235
|
+
raw_data: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
236
|
+
coalesce_fields: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
237
|
+
defaults: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
238
|
+
exception: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
@strawberry_django.filter(models.IPFabricData, lookups=True)
|
|
242
|
+
class IPFabricDataFilter(BaseFilterMixin):
|
|
243
|
+
id: ID | None = strawberry_django.filter_field()
|
|
244
|
+
snapshot_data: (
|
|
245
|
+
Annotated[
|
|
246
|
+
"IPFabricSnapshotFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
|
|
247
|
+
]
|
|
248
|
+
| None
|
|
249
|
+
) = strawberry_django.filter_field()
|
|
250
|
+
data: (
|
|
251
|
+
Annotated["JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")] | None
|
|
252
|
+
) = strawberry_django.filter_field()
|
|
253
|
+
type: (
|
|
254
|
+
Annotated[
|
|
255
|
+
"IPFabricRawDataTypeEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
|
|
256
|
+
]
|
|
257
|
+
| None
|
|
258
|
+
) = strawberry_django.filter_field()
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
# These filters are not defined in the libs, so need to define them here
|
|
262
|
+
@strawberry_django.filter(Branch, lookups=True)
|
|
263
|
+
class BranchFilter(PrimaryModelFilterMixin):
|
|
264
|
+
id: ID | None = strawberry_django.filter_field()
|
|
265
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
266
|
+
owner: Annotated[
|
|
267
|
+
"UserFilter", strawberry.lazy("users.graphql.filters")
|
|
268
|
+
] | None = strawberry_django.filter_field()
|
|
269
|
+
schema_id: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
270
|
+
status: (
|
|
271
|
+
Annotated["BranchStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")]
|
|
272
|
+
| None
|
|
273
|
+
) = strawberry_django.filter_field()
|
|
274
|
+
applied_migrations: (
|
|
275
|
+
Annotated["StringArrayLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
276
|
+
| None
|
|
277
|
+
) = strawberry_django.filter_field()
|
|
278
|
+
last_sync: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
279
|
+
merged_time: DatetimeFilterLookup[
|
|
280
|
+
datetime
|
|
281
|
+
] | None = strawberry_django.filter_field()
|
|
282
|
+
merged_by: (
|
|
283
|
+
Annotated["UserFilter", strawberry.lazy("users.graphql.filters")] | None
|
|
284
|
+
) = strawberry_django.filter_field()
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
@strawberry_django.filter(Job, lookups=True)
|
|
288
|
+
class JobFilter(BaseFilterMixin):
|
|
289
|
+
id: ID | None = strawberry_django.filter_field()
|
|
290
|
+
object_type: (
|
|
291
|
+
Annotated["ContentTypeFilter", strawberry.lazy("core.graphql.filters")] | None
|
|
292
|
+
) = strawberry_django.filter_field()
|
|
293
|
+
object_id: (
|
|
294
|
+
Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
295
|
+
| None
|
|
296
|
+
) = strawberry_django.filter_field()
|
|
297
|
+
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
298
|
+
created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
299
|
+
scheduled: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
300
|
+
interval: (
|
|
301
|
+
Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")]
|
|
302
|
+
| None
|
|
303
|
+
) = strawberry_django.filter_field()
|
|
304
|
+
started: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
305
|
+
completed: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
|
|
306
|
+
user: Annotated[
|
|
307
|
+
"UserFilter", strawberry.lazy("users.graphql.filters")
|
|
308
|
+
] | None = strawberry_django.filter_field()
|
|
309
|
+
status: (
|
|
310
|
+
Annotated["JobStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")]
|
|
311
|
+
| None
|
|
312
|
+
) = strawberry_django.filter_field()
|
|
313
|
+
data: (
|
|
314
|
+
Annotated["JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")] | None
|
|
315
|
+
) = strawberry_django.filter_field()
|
|
316
|
+
error: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
317
|
+
job_id: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import strawberry
|
|
2
|
+
import strawberry_django
|
|
3
|
+
|
|
4
|
+
from .types import IPFabricDataType
|
|
5
|
+
from .types import IPFabricIngestionIssueType
|
|
6
|
+
from .types import IPFabricIngestionType
|
|
7
|
+
from .types import IPFabricRelationshipFieldType
|
|
8
|
+
from .types import IPFabricSnapshotType
|
|
9
|
+
from .types import IPFabricSourceType
|
|
10
|
+
from .types import IPFabricSyncType
|
|
11
|
+
from .types import IPFabricTransformFieldType
|
|
12
|
+
from .types import IPFabricTransformMapGroupType
|
|
13
|
+
from .types import IPFabricTransformMapType
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = (
|
|
17
|
+
"IPFabricTransformMapGroupQuery",
|
|
18
|
+
"IPFabricTransformMapQuery",
|
|
19
|
+
"IPFabricSyncQuery",
|
|
20
|
+
"IPFabricTransformFieldQuery",
|
|
21
|
+
"IPFabricRelationshipFieldQuery",
|
|
22
|
+
"IPFabricSourceQuery",
|
|
23
|
+
"IPFabricSnapshotQuery",
|
|
24
|
+
"IPFabricIngestionQuery",
|
|
25
|
+
"IPFabricIngestionIssueQuery",
|
|
26
|
+
"IPFabricDataQuery",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@strawberry.type(name="Query")
|
|
31
|
+
class IPFabricTransformMapGroupQuery:
|
|
32
|
+
ipfabric_transform_map_group: IPFabricTransformMapGroupType = (
|
|
33
|
+
strawberry_django.field()
|
|
34
|
+
)
|
|
35
|
+
ipfabric_transform_map_group_list: list[
|
|
36
|
+
IPFabricTransformMapGroupType
|
|
37
|
+
] = strawberry_django.field()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@strawberry.type(name="Query")
|
|
41
|
+
class IPFabricTransformMapQuery:
|
|
42
|
+
ipfabric_transform_map: IPFabricTransformMapType = strawberry_django.field()
|
|
43
|
+
ipfabric_transform_map_list: list[
|
|
44
|
+
IPFabricTransformMapType
|
|
45
|
+
] = strawberry_django.field()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@strawberry.type(name="Query")
|
|
49
|
+
class IPFabricTransformFieldQuery:
|
|
50
|
+
ipfabric_transform_field: IPFabricTransformFieldType = strawberry_django.field()
|
|
51
|
+
ipfabric_transform_field_list: list[
|
|
52
|
+
IPFabricTransformFieldType
|
|
53
|
+
] = strawberry_django.field()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@strawberry.type(name="Query")
|
|
57
|
+
class IPFabricRelationshipFieldQuery:
|
|
58
|
+
ipfabric_relationship_field: IPFabricRelationshipFieldType = (
|
|
59
|
+
strawberry_django.field()
|
|
60
|
+
)
|
|
61
|
+
ipfabric_relationship_field_list: list[
|
|
62
|
+
IPFabricRelationshipFieldType
|
|
63
|
+
] = strawberry_django.field()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@strawberry.type(name="Query")
|
|
67
|
+
class IPFabricSourceQuery:
|
|
68
|
+
ipfabric_source: IPFabricSourceType = strawberry_django.field()
|
|
69
|
+
ipfabric_source_list: list[IPFabricSourceType] = strawberry_django.field()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@strawberry.type(name="Query")
|
|
73
|
+
class IPFabricSnapshotQuery:
|
|
74
|
+
ipfabric_snapshot: IPFabricSnapshotType = strawberry_django.field()
|
|
75
|
+
ipfabric_snapshot_list: list[IPFabricSnapshotType] = strawberry_django.field()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@strawberry.type(name="Query")
|
|
79
|
+
class IPFabricSyncQuery:
|
|
80
|
+
ipfabric_sync: IPFabricSyncType = strawberry_django.field()
|
|
81
|
+
ipfabric_sync_list: list[IPFabricSyncType] = strawberry_django.field()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@strawberry.type(name="Query")
|
|
85
|
+
class IPFabricIngestionQuery:
|
|
86
|
+
ipfabric_ingestion: IPFabricIngestionType = strawberry_django.field()
|
|
87
|
+
ipfabric_ingestion_list: list[IPFabricIngestionType] = strawberry_django.field()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@strawberry.type(name="Query")
|
|
91
|
+
class IPFabricIngestionIssueQuery:
|
|
92
|
+
ipfabric_ingestion_issue: IPFabricIngestionIssueType = strawberry_django.field()
|
|
93
|
+
ipfabric_ingestion_issue_list: list[
|
|
94
|
+
IPFabricIngestionIssueType
|
|
95
|
+
] = strawberry_django.field()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@strawberry.type(name="Query")
|
|
99
|
+
class IPFabricDataQuery:
|
|
100
|
+
ipfabric_data: IPFabricDataType = strawberry_django.field()
|
|
101
|
+
ipfabric_data_list: list[IPFabricDataType] = strawberry_django.field()
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
import strawberry
|
|
4
|
+
import strawberry_django
|
|
5
|
+
from core.graphql.mixins import ChangelogMixin
|
|
6
|
+
from core.models import Job
|
|
7
|
+
from extras.graphql.mixins import TagsMixin
|
|
8
|
+
from netbox.graphql.types import BaseObjectType
|
|
9
|
+
from netbox.graphql.types import ContentTypeType
|
|
10
|
+
from netbox.graphql.types import NetBoxObjectType
|
|
11
|
+
from netbox.graphql.types import OrganizationalObjectType
|
|
12
|
+
from netbox_branching.models import Branch
|
|
13
|
+
from strawberry.scalars import JSON
|
|
14
|
+
from users.graphql.types import UserType
|
|
15
|
+
|
|
16
|
+
from .filters import BranchFilter
|
|
17
|
+
from .filters import IPFabricDataFilter
|
|
18
|
+
from .filters import IPFabricIngestionFilter
|
|
19
|
+
from .filters import IPFabricIngestionIssueFilter
|
|
20
|
+
from .filters import IPFabricRelationshipFieldFilter
|
|
21
|
+
from .filters import IPFabricSnapshotFilter
|
|
22
|
+
from .filters import IPFabricSourceFilter
|
|
23
|
+
from .filters import IPFabricSyncFilter
|
|
24
|
+
from .filters import IPFabricTransformFieldFilter
|
|
25
|
+
from .filters import IPFabricTransformMapFilter
|
|
26
|
+
from .filters import IPFabricTransformMapGroupFilter
|
|
27
|
+
from .filters import JobFilter
|
|
28
|
+
from ipfabric_netbox import models
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
__all__ = (
|
|
32
|
+
"IPFabricTransformMapGroupType",
|
|
33
|
+
"IPFabricTransformMapType",
|
|
34
|
+
"IPFabricTransformFieldType",
|
|
35
|
+
"IPFabricRelationshipFieldType",
|
|
36
|
+
"IPFabricSourceType",
|
|
37
|
+
"IPFabricSnapshotType",
|
|
38
|
+
"IPFabricSyncType",
|
|
39
|
+
"IPFabricIngestionType",
|
|
40
|
+
"IPFabricIngestionIssueType",
|
|
41
|
+
"IPFabricDataType",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@strawberry_django.type(
|
|
46
|
+
models.IPFabricTransformMapGroup,
|
|
47
|
+
fields="__all__",
|
|
48
|
+
filters=IPFabricTransformMapGroupFilter,
|
|
49
|
+
)
|
|
50
|
+
class IPFabricTransformMapGroupType(NetBoxObjectType):
|
|
51
|
+
name: str
|
|
52
|
+
description: str | None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@strawberry_django.type(
|
|
56
|
+
models.IPFabricTransformMap, fields="__all__", filters=IPFabricTransformMapFilter
|
|
57
|
+
)
|
|
58
|
+
class IPFabricTransformMapType(NetBoxObjectType):
|
|
59
|
+
name: str
|
|
60
|
+
source_model: str
|
|
61
|
+
target_model: (
|
|
62
|
+
Annotated[
|
|
63
|
+
"ContentTypeType",
|
|
64
|
+
strawberry.lazy("netbox.graphql.types"),
|
|
65
|
+
]
|
|
66
|
+
| None
|
|
67
|
+
)
|
|
68
|
+
group: (
|
|
69
|
+
Annotated[
|
|
70
|
+
"IPFabricTransformMapGroupType",
|
|
71
|
+
strawberry.lazy("ipfabric_netbox.graphql.types"),
|
|
72
|
+
]
|
|
73
|
+
| None
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@strawberry_django.type(
|
|
78
|
+
models.IPFabricTransformField,
|
|
79
|
+
fields="__all__",
|
|
80
|
+
filters=IPFabricTransformFieldFilter,
|
|
81
|
+
)
|
|
82
|
+
class IPFabricTransformFieldType(BaseObjectType):
|
|
83
|
+
transform_map: (
|
|
84
|
+
Annotated[
|
|
85
|
+
"IPFabricTransformMapType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
86
|
+
]
|
|
87
|
+
| None
|
|
88
|
+
)
|
|
89
|
+
source_field: str
|
|
90
|
+
target_field: str
|
|
91
|
+
coalesce: bool
|
|
92
|
+
template: str
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@strawberry_django.type(
|
|
96
|
+
models.IPFabricRelationshipField,
|
|
97
|
+
fields="__all__",
|
|
98
|
+
filters=IPFabricRelationshipFieldFilter,
|
|
99
|
+
)
|
|
100
|
+
class IPFabricRelationshipFieldType(BaseObjectType):
|
|
101
|
+
transform_map: (
|
|
102
|
+
Annotated[
|
|
103
|
+
"IPFabricTransformMapType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
104
|
+
]
|
|
105
|
+
| None
|
|
106
|
+
)
|
|
107
|
+
source_model: Annotated["ContentTypeType", strawberry.lazy("netbox.graphql.types")]
|
|
108
|
+
target_field: str
|
|
109
|
+
coalesce: bool
|
|
110
|
+
template: str
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@strawberry_django.type(
|
|
114
|
+
models.IPFabricSource, fields="__all__", filters=IPFabricSourceFilter
|
|
115
|
+
)
|
|
116
|
+
class IPFabricSourceType(OrganizationalObjectType):
|
|
117
|
+
name: str
|
|
118
|
+
type: str
|
|
119
|
+
url: str
|
|
120
|
+
status: str
|
|
121
|
+
parameters: JSON
|
|
122
|
+
last_synced: str
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
@strawberry_django.type(
|
|
126
|
+
models.IPFabricSnapshot, fields="__all__", filters=IPFabricSnapshotFilter
|
|
127
|
+
)
|
|
128
|
+
class IPFabricSnapshotType(ChangelogMixin, TagsMixin, BaseObjectType):
|
|
129
|
+
source: (
|
|
130
|
+
Annotated[
|
|
131
|
+
"IPFabricSourceType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
132
|
+
]
|
|
133
|
+
| None
|
|
134
|
+
)
|
|
135
|
+
name: str
|
|
136
|
+
snapshot_id: str
|
|
137
|
+
data: JSON
|
|
138
|
+
status: str
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@strawberry_django.type(
|
|
142
|
+
models.IPFabricSync, fields="__all__", filters=IPFabricSyncFilter
|
|
143
|
+
)
|
|
144
|
+
class IPFabricSyncType(ChangelogMixin, TagsMixin, BaseObjectType):
|
|
145
|
+
name: str
|
|
146
|
+
snapshot_data: (
|
|
147
|
+
Annotated[
|
|
148
|
+
"IPFabricSnapshotType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
149
|
+
]
|
|
150
|
+
| None
|
|
151
|
+
)
|
|
152
|
+
status: str
|
|
153
|
+
parameters: JSON
|
|
154
|
+
auto_merge: bool
|
|
155
|
+
last_synced: str | None
|
|
156
|
+
scheduled: str | None
|
|
157
|
+
interval: int | None
|
|
158
|
+
user: Annotated["UserType", strawberry.lazy("users.graphql.types")] | None
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@strawberry_django.type(Branch, fields="__all__", filters=BranchFilter)
|
|
162
|
+
class BranchType(OrganizationalObjectType):
|
|
163
|
+
name: str
|
|
164
|
+
description: str | None
|
|
165
|
+
owner: Annotated["UserType", strawberry.lazy("users.graphql.types")]
|
|
166
|
+
merged_by: Annotated["UserType", strawberry.lazy("users.graphql.types")]
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@strawberry_django.type(Job, fields="__all__", filters=JobFilter)
|
|
170
|
+
class JobType(BaseObjectType):
|
|
171
|
+
name: str
|
|
172
|
+
user: Annotated["UserType", strawberry.lazy("users.graphql.types")]
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@strawberry_django.type(
|
|
176
|
+
models.IPFabricIngestion, fields="__all__", filters=IPFabricIngestionFilter
|
|
177
|
+
)
|
|
178
|
+
class IPFabricIngestionType(BaseObjectType):
|
|
179
|
+
sync: (
|
|
180
|
+
Annotated["IPFabricSyncType", strawberry.lazy("ipfabric_netbox.graphql.types")]
|
|
181
|
+
| None
|
|
182
|
+
)
|
|
183
|
+
job: Annotated["JobType", strawberry.lazy("ipfabric_netbox.graphql.types")] | None
|
|
184
|
+
branch: (
|
|
185
|
+
Annotated["BranchType", strawberry.lazy("ipfabric_netbox.graphql.types")] | None
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
@strawberry_django.type(
|
|
190
|
+
models.IPFabricIngestionIssue,
|
|
191
|
+
fields="__all__",
|
|
192
|
+
filters=IPFabricIngestionIssueFilter,
|
|
193
|
+
)
|
|
194
|
+
class IPFabricIngestionIssueType(BaseObjectType):
|
|
195
|
+
ingestion: (
|
|
196
|
+
Annotated[
|
|
197
|
+
"IPFabricIngestionType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
198
|
+
]
|
|
199
|
+
| None
|
|
200
|
+
)
|
|
201
|
+
timestamp: str
|
|
202
|
+
model: str | None
|
|
203
|
+
message: str
|
|
204
|
+
raw_data: str
|
|
205
|
+
coalesce_fields: str
|
|
206
|
+
defaults: str
|
|
207
|
+
exception: str
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
@strawberry_django.type(
|
|
211
|
+
models.IPFabricData, fields="__all__", filters=IPFabricDataFilter
|
|
212
|
+
)
|
|
213
|
+
class IPFabricDataType(BaseObjectType):
|
|
214
|
+
snapshot_data: Annotated[
|
|
215
|
+
"IPFabricSnapshotType", strawberry.lazy("ipfabric_netbox.graphql.types")
|
|
216
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Generated by Django 5.2.5 on 2025-08-21 11:21
|
|
2
|
+
import taggit.managers
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
from django.db import models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
dependencies = [
|
|
9
|
+
("extras", "0128_tableconfig"),
|
|
10
|
+
("ipfabric_netbox", "0015_ipfabricingestionissue"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name="ipfabricsnapshot",
|
|
16
|
+
name="tags",
|
|
17
|
+
field=taggit.managers.TaggableManager(
|
|
18
|
+
through="extras.TaggedItem", to="extras.Tag"
|
|
19
|
+
),
|
|
20
|
+
),
|
|
21
|
+
migrations.AlterField(
|
|
22
|
+
model_name="ipfabricsnapshot",
|
|
23
|
+
name="created",
|
|
24
|
+
field=models.DateTimeField(auto_now_add=True, null=True),
|
|
25
|
+
),
|
|
26
|
+
migrations.AlterField(
|
|
27
|
+
model_name="ipfabricsnapshot",
|
|
28
|
+
name="last_updated",
|
|
29
|
+
field=models.DateTimeField(auto_now=True, null=True),
|
|
30
|
+
),
|
|
31
|
+
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated by Django 5.2.5 on 2025-08-22 12:32
|
|
2
|
+
from django.db import migrations
|
|
3
|
+
from django.db import models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
dependencies = [
|
|
8
|
+
("ipfabric_netbox", "0016_tags_and_changelog_for_snapshots"),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
operations = [
|
|
12
|
+
migrations.AddField(
|
|
13
|
+
model_name="ipfabricsync",
|
|
14
|
+
name="update_custom_fields",
|
|
15
|
+
field=models.BooleanField(default=True),
|
|
16
|
+
),
|
|
17
|
+
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated by Django 5.2 on 2025-08-25 12:53
|
|
2
|
+
from django.db import migrations
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Migration(migrations.Migration):
|
|
6
|
+
dependencies = [
|
|
7
|
+
(
|
|
8
|
+
"ipfabric_netbox",
|
|
9
|
+
"0017_ipfabricsync_update_custom_fields",
|
|
10
|
+
),
|
|
11
|
+
]
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.RemoveField(
|
|
14
|
+
model_name="ipfabricsync",
|
|
15
|
+
name="type",
|
|
16
|
+
),
|
|
17
|
+
]
|