ipfabric_netbox 4.2.0b3__py3-none-any.whl → 4.2.0b5__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.

@@ -0,0 +1,266 @@
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 IPFabricSyncTypeEnum
29
+ from ipfabric_netbox.graphql.enums import IPFabricTransformMapSourceModelEnum
30
+ from ipfabric_netbox.graphql.enums import JobStatusEnum
31
+
32
+ __all__ = (
33
+ "IPFabricTransformMapGroupFilter",
34
+ "IPFabricTransformMapFilter",
35
+ "IPFabricTransformFieldFilter",
36
+ "IPFabricRelationshipFieldFilter",
37
+ "IPFabricSourceFilter",
38
+ "IPFabricSnapshotFilter",
39
+ "IPFabricSyncFilter",
40
+ "IPFabricIngestionFilter",
41
+ "IPFabricIngestionIssueFilter",
42
+ "IPFabricDataFilter",
43
+ "BranchFilter",
44
+ "JobFilter",
45
+ )
46
+
47
+
48
+ @strawberry_django.filter(models.IPFabricTransformMapGroup, lookups=True)
49
+ class IPFabricTransformMapGroupFilter(NetBoxModelFilterMixin):
50
+ id: ID | None = strawberry_django.filter_field()
51
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
52
+ description: FilterLookup[str] | None = strawberry_django.filter_field()
53
+
54
+
55
+ @strawberry_django.filter(models.IPFabricTransformMap, lookups=True)
56
+ class IPFabricTransformMapFilter(NetBoxModelFilterMixin):
57
+ id: ID | None = strawberry_django.filter_field()
58
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
59
+ source_model: Annotated[
60
+ "IPFabricTransformMapSourceModelEnum",
61
+ strawberry.lazy("ipfabric_netbox.graphql.enums"),
62
+ ] | None = strawberry_django.filter_field()
63
+ target_model: Annotated[
64
+ "ContentTypeFilter", strawberry.lazy("core.graphql.filters")
65
+ ] | None = strawberry_django.filter_field()
66
+ group: Annotated[
67
+ "IPFabricTransformMapGroupFilter",
68
+ strawberry.lazy("ipfabric_netbox.graphql.filters"),
69
+ ] | None = strawberry_django.filter_field()
70
+
71
+
72
+ @strawberry_django.filter(models.IPFabricTransformField, lookups=True)
73
+ class IPFabricTransformFieldFilter(BaseFilterMixin):
74
+ id: ID | None = strawberry_django.filter_field()
75
+ transform_map: Annotated[
76
+ "IPFabricTransformMapFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
77
+ ] | None = strawberry_django.filter_field()
78
+ source_field: FilterLookup[str] | None = strawberry_django.filter_field()
79
+ target_field: FilterLookup[str] | None = strawberry_django.filter_field()
80
+ coalesce: Annotated[
81
+ "IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")
82
+ ] | None = strawberry_django.filter_field()
83
+ template: FilterLookup[str] | None = strawberry_django.filter_field()
84
+
85
+
86
+ @strawberry_django.filter(models.IPFabricRelationshipField, lookups=True)
87
+ class IPFabricRelationshipFieldFilter(BaseFilterMixin):
88
+ id: ID | None = strawberry_django.filter_field()
89
+ transform_map: Annotated[
90
+ "IPFabricTransformMapFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
91
+ ] | None = strawberry_django.filter_field()
92
+ source_model: Annotated[
93
+ "ContentTypeFilter", strawberry.lazy("core.graphql.filters")
94
+ ] | None = strawberry_django.filter_field()
95
+ target_field: FilterLookup[str] | None = strawberry_django.filter_field()
96
+ coalesce: Annotated[
97
+ "IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")
98
+ ] | None = strawberry_django.filter_field()
99
+ template: FilterLookup[str] | None = strawberry_django.filter_field()
100
+
101
+
102
+ @strawberry_django.filter(models.IPFabricSource, lookups=True)
103
+ class IPFabricSourceFilter(PrimaryModelFilterMixin):
104
+ id: ID | None = strawberry_django.filter_field()
105
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
106
+ type: Annotated[
107
+ "IPFabricSourceTypeEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
108
+ ] | None = strawberry_django.filter_field()
109
+ url: FilterLookup[str] | None = strawberry_django.filter_field()
110
+ status: Annotated[
111
+ "DataSourceStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
112
+ ] | None = strawberry_django.filter_field()
113
+ parameters: Annotated[
114
+ "JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")
115
+ ] | None = strawberry_django.filter_field()
116
+ last_synced: DatetimeFilterLookup[
117
+ datetime
118
+ ] | None = strawberry_django.filter_field()
119
+
120
+
121
+ @strawberry_django.filter(models.IPFabricSnapshot, lookups=True)
122
+ class IPFabricSnapshotFilter(TagsFilterMixin, ChangeLogFilterMixin, BaseFilterMixin):
123
+ id: ID | None = strawberry_django.filter_field()
124
+ created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
125
+ last_updated: DatetimeFilterLookup[
126
+ datetime
127
+ ] | None = strawberry_django.filter_field()
128
+ source: Annotated[
129
+ "IPFabricSourceFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
130
+ ] | None = strawberry_django.filter_field()
131
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
132
+ snapshot_id: FilterLookup[str] | None = strawberry_django.filter_field()
133
+ data: Annotated[
134
+ "JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")
135
+ ] | None = strawberry_django.filter_field()
136
+ date: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
137
+ status: Annotated[
138
+ "IPFabricSnapshotStatusModelEnum",
139
+ strawberry.lazy("ipfabric_netbox.graphql.enums"),
140
+ ] | None = strawberry_django.filter_field()
141
+
142
+
143
+ @strawberry_django.filter(models.IPFabricSync, lookups=True)
144
+ class IPFabricSyncFilter(TagsFilterMixin, ChangeLogFilterMixin, BaseFilterMixin):
145
+ id: ID | None = strawberry_django.filter_field()
146
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
147
+ snapshot_data: Annotated[
148
+ "IPFabricSnapshotFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
149
+ ] | None = strawberry_django.filter_field()
150
+ type: Annotated[
151
+ "IPFabricSyncTypeEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
152
+ ] | None = strawberry_django.filter_field()
153
+ status: Annotated[
154
+ "DataSourceStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
155
+ ] | None = strawberry_django.filter_field()
156
+ parameters: Annotated[
157
+ "JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")
158
+ ] | None = strawberry_django.filter_field()
159
+ auto_merge: FilterLookup[bool] | None = strawberry_django.filter_field()
160
+ last_synced: DatetimeFilterLookup[
161
+ datetime
162
+ ] | None = strawberry_django.filter_field()
163
+ scheduled: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
164
+ interval: Annotated[
165
+ "IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")
166
+ ] | None = strawberry_django.filter_field()
167
+ user: Annotated[
168
+ "UserFilter", strawberry.lazy("users.graphql.filters")
169
+ ] | None = strawberry_django.filter_field()
170
+
171
+
172
+ @strawberry_django.filter(models.IPFabricIngestion, lookups=True)
173
+ class IPFabricIngestionFilter(BaseFilterMixin):
174
+ id: ID | None = strawberry_django.filter_field()
175
+ sync: Annotated[
176
+ "IPFabricSyncFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
177
+ ] | None = strawberry_django.filter_field()
178
+ job: Annotated[
179
+ "JobFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
180
+ ] | None = strawberry_django.filter_field()
181
+ branch: Annotated[
182
+ "BranchFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
183
+ ] | None = strawberry_django.filter_field()
184
+
185
+
186
+ @strawberry_django.filter(models.IPFabricIngestionIssue, lookups=True)
187
+ class IPFabricIngestionIssueFilter(BaseFilterMixin):
188
+ id: ID | None = strawberry_django.filter_field()
189
+ ingestion: Annotated[
190
+ "IPFabricIngestionFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
191
+ ] | None = strawberry_django.filter_field()
192
+ timestamp: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
193
+ model: FilterLookup[str] | None = strawberry_django.filter_field()
194
+ message: FilterLookup[str] | None = strawberry_django.filter_field()
195
+ raw_data: FilterLookup[str] | None = strawberry_django.filter_field()
196
+ coalesce_fields: FilterLookup[str] | None = strawberry_django.filter_field()
197
+ defaults: FilterLookup[str] | None = strawberry_django.filter_field()
198
+ exception: FilterLookup[str] | None = strawberry_django.filter_field()
199
+
200
+
201
+ @strawberry_django.filter(models.IPFabricData, lookups=True)
202
+ class IPFabricDataFilter(BaseFilterMixin):
203
+ id: ID | None = strawberry_django.filter_field()
204
+ snapshot_data: Annotated[
205
+ "IPFabricSnapshotFilter", strawberry.lazy("ipfabric_netbox.graphql.filters")
206
+ ] | None = strawberry_django.filter_field()
207
+ data: Annotated[
208
+ "JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")
209
+ ] | None = strawberry_django.filter_field()
210
+ type: Annotated[
211
+ "IPFabricRawDataTypeEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
212
+ ] | None = strawberry_django.filter_field()
213
+
214
+
215
+ # These filters are not defined in the libs, so need to define them here
216
+ @strawberry_django.filter(Branch, lookups=True)
217
+ class BranchFilter(PrimaryModelFilterMixin):
218
+ id: ID | None = strawberry_django.filter_field()
219
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
220
+ owner: Annotated[
221
+ "UserFilter", strawberry.lazy("users.graphql.filters")
222
+ ] | None = strawberry_django.filter_field()
223
+ schema_id: FilterLookup[str] | None = strawberry_django.filter_field()
224
+ status: Annotated[
225
+ "BranchStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
226
+ ] | None = strawberry_django.filter_field()
227
+ applied_migrations: Annotated[
228
+ "StringArrayLookup", strawberry.lazy("netbox.graphql.filter_lookups")
229
+ ] | None = strawberry_django.filter_field()
230
+ last_sync: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
231
+ merged_time: DatetimeFilterLookup[
232
+ datetime
233
+ ] | None = strawberry_django.filter_field()
234
+ merged_by: Annotated[
235
+ "UserFilter", strawberry.lazy("users.graphql.filters")
236
+ ] | None = strawberry_django.filter_field()
237
+
238
+
239
+ @strawberry_django.filter(Job, lookups=True)
240
+ class JobFilter(BaseFilterMixin):
241
+ id: ID | None = strawberry_django.filter_field()
242
+ object_type: Annotated[
243
+ "ContentTypeFilter", strawberry.lazy("core.graphql.filters")
244
+ ] | None = strawberry_django.filter_field()
245
+ object_id: Annotated[
246
+ "IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")
247
+ ] | None = strawberry_django.filter_field()
248
+ name: FilterLookup[str] | None = strawberry_django.filter_field()
249
+ created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
250
+ scheduled: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
251
+ interval: Annotated[
252
+ "IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")
253
+ ] | None = strawberry_django.filter_field()
254
+ started: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
255
+ completed: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
256
+ user: Annotated[
257
+ "UserFilter", strawberry.lazy("users.graphql.filters")
258
+ ] | None = strawberry_django.filter_field()
259
+ status: Annotated[
260
+ "JobStatusEnum", strawberry.lazy("ipfabric_netbox.graphql.enums")
261
+ ] | None = strawberry_django.filter_field()
262
+ data: Annotated[
263
+ "JSONFilter", strawberry.lazy("netbox.graphql.filter_lookups")
264
+ ] | None = strawberry_django.filter_field()
265
+ error: FilterLookup[str] | None = strawberry_django.filter_field()
266
+ 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,195 @@
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: Annotated[
62
+ "ContentTypeType",
63
+ strawberry.lazy("netbox.graphql.types"),
64
+ ] | None
65
+ group: Annotated[
66
+ "IPFabricTransformMapGroupType",
67
+ strawberry.lazy("ipfabric_netbox.graphql.types"),
68
+ ] | None
69
+
70
+
71
+ @strawberry_django.type(
72
+ models.IPFabricTransformField,
73
+ fields="__all__",
74
+ filters=IPFabricTransformFieldFilter,
75
+ )
76
+ class IPFabricTransformFieldType(BaseObjectType):
77
+ transform_map: Annotated[
78
+ "IPFabricTransformMapType", strawberry.lazy("ipfabric_netbox.graphql.types")
79
+ ] | None
80
+ source_field: str
81
+ target_field: str
82
+ coalesce: bool
83
+ template: str
84
+
85
+
86
+ @strawberry_django.type(
87
+ models.IPFabricRelationshipField,
88
+ fields="__all__",
89
+ filters=IPFabricRelationshipFieldFilter,
90
+ )
91
+ class IPFabricRelationshipFieldType(BaseObjectType):
92
+ transform_map: Annotated[
93
+ "IPFabricTransformMapType", strawberry.lazy("ipfabric_netbox.graphql.types")
94
+ ] | None
95
+ source_model: Annotated["ContentTypeType", strawberry.lazy("netbox.graphql.types")]
96
+ target_field: str
97
+ coalesce: bool
98
+ template: str
99
+
100
+
101
+ @strawberry_django.type(
102
+ models.IPFabricSource, fields="__all__", filters=IPFabricSourceFilter
103
+ )
104
+ class IPFabricSourceType(OrganizationalObjectType):
105
+ name: str
106
+ type: str
107
+ url: str
108
+ status: str
109
+ parameters: JSON
110
+ last_synced: str
111
+
112
+
113
+ @strawberry_django.type(
114
+ models.IPFabricSnapshot, fields="__all__", filters=IPFabricSnapshotFilter
115
+ )
116
+ class IPFabricSnapshotType(ChangelogMixin, TagsMixin, BaseObjectType):
117
+ source: Annotated[
118
+ "IPFabricSourceType", strawberry.lazy("ipfabric_netbox.graphql.types")
119
+ ] | None
120
+ name: str
121
+ snapshot_id: str
122
+ data: JSON
123
+ status: str
124
+
125
+
126
+ @strawberry_django.type(
127
+ models.IPFabricSync, fields="__all__", filters=IPFabricSyncFilter
128
+ )
129
+ class IPFabricSyncType(ChangelogMixin, TagsMixin, BaseObjectType):
130
+ name: str
131
+ snapshot_data: Annotated[
132
+ "IPFabricSnapshotType", strawberry.lazy("ipfabric_netbox.graphql.types")
133
+ ] | None
134
+ type: str
135
+ status: str
136
+ parameters: JSON
137
+ auto_merge: bool
138
+ last_synced: str | None
139
+ scheduled: str | None
140
+ interval: int | None
141
+ user: Annotated["UserType", strawberry.lazy("users.graphql.types")] | None
142
+
143
+
144
+ @strawberry_django.type(Branch, fields="__all__", filters=BranchFilter)
145
+ class BranchType(OrganizationalObjectType):
146
+ name: str
147
+ description: str | None
148
+ owner: Annotated["UserType", strawberry.lazy("users.graphql.types")]
149
+ merged_by: Annotated["UserType", strawberry.lazy("users.graphql.types")]
150
+
151
+
152
+ @strawberry_django.type(Job, fields="__all__", filters=JobFilter)
153
+ class JobType(BaseObjectType):
154
+ name: str
155
+ user: Annotated["UserType", strawberry.lazy("users.graphql.types")]
156
+
157
+
158
+ @strawberry_django.type(
159
+ models.IPFabricIngestion, fields="__all__", filters=IPFabricIngestionFilter
160
+ )
161
+ class IPFabricIngestionType(BaseObjectType):
162
+ sync: Annotated[
163
+ "IPFabricSyncType", strawberry.lazy("ipfabric_netbox.graphql.types")
164
+ ] | None
165
+ job: Annotated["JobType", strawberry.lazy("ipfabric_netbox.graphql.types")] | None
166
+ branch: Annotated[
167
+ "BranchType", strawberry.lazy("ipfabric_netbox.graphql.types")
168
+ ] | None
169
+
170
+
171
+ @strawberry_django.type(
172
+ models.IPFabricIngestionIssue,
173
+ fields="__all__",
174
+ filters=IPFabricIngestionIssueFilter,
175
+ )
176
+ class IPFabricIngestionIssueType(BaseObjectType):
177
+ ingestion: Annotated[
178
+ "IPFabricIngestionType", strawberry.lazy("ipfabric_netbox.graphql.types")
179
+ ] | None
180
+ timestamp: str
181
+ model: str | None
182
+ message: str
183
+ raw_data: str
184
+ coalesce_fields: str
185
+ defaults: str
186
+ exception: str
187
+
188
+
189
+ @strawberry_django.type(
190
+ models.IPFabricData, fields="__all__", filters=IPFabricDataFilter
191
+ )
192
+ class IPFabricDataType(BaseObjectType):
193
+ snapshot_data: Annotated[
194
+ "IPFabricSnapshotType", strawberry.lazy("ipfabric_netbox.graphql.types")
195
+ ]
@@ -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
+ ]
ipfabric_netbox/models.py CHANGED
@@ -545,9 +545,7 @@ class IPFabricSource(IPFabricClient, JobsMixin, PrimaryModel):
545
545
  # post_sync.send(sender=self.__class__, instance=self)
546
546
 
547
547
 
548
- class IPFabricSnapshot(models.Model):
549
- created = models.DateTimeField(auto_now_add=True)
550
- last_updated = models.DateTimeField(editable=False)
548
+ class IPFabricSnapshot(TagsMixin, ChangeLoggedModel):
551
549
  source = models.ForeignKey(
552
550
  to=IPFabricSource,
553
551
  on_delete=models.CASCADE,
@@ -889,7 +887,10 @@ class IPFabricIngestion(JobsMixin, models.Model):
889
887
  def name(self):
890
888
  if self.branch:
891
889
  return self.branch.name
892
- return f"{self.sync.name} (Ingestion {self.pk})"
890
+ try:
891
+ return f"{self.sync.name} (Ingestion {self.pk})"
892
+ except IPFabricIngestion.sync.RelatedObjectDoesNotExist:
893
+ return f"Ingestion {self.pk} (No Sync)"
893
894
 
894
895
  def get_absolute_url(self):
895
896
  return reverse("plugins:ipfabric_netbox:ipfabricingestion", args=[self.pk])
File without changes