Coverage for netbox_data_import/urls.py: 100.00%

4 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-10-30 09:47 +0000

1# SPDX-License-Identifier: Apache-2.0 

2# Copyright (C) 2025 Marcin Zieba <marcinpsk@gmail.com> 

3from django.urls import path 

4from . import views 

5from .models import ImportProfile, InferenceBackend 

6 

7urlpatterns = [ 

8 # Import Profiles 

9 path("profiles/", views.ImportProfileListView.as_view(), name="importprofile_list"), 

10 path("profiles/add/", views.ImportProfileEditView.as_view(), name="importprofile_add"), 

11 path("profiles/import/", views.ImportProfileBulkImportView.as_view(), name="importprofile_bulk_import"), 

12 path("profiles/edit/", views.ImportProfileBulkEditView.as_view(), name="importprofile_bulk_edit"), 

13 path("profiles/<int:pk>/", views.ImportProfileView.as_view(), name="importprofile"), 

14 path("profiles/<int:pk>/edit/", views.ImportProfileEditView.as_view(), name="importprofile_edit"), 

15 path("profiles/<int:pk>/delete/", views.ImportProfileDeleteView.as_view(), name="importprofile_delete"), 

16 path( 

17 "profiles/<int:pk>/changelog/", 

18 views.ImportProfileChangeLogView.as_view(), 

19 name="importprofile_changelog", 

20 kwargs={"model": ImportProfile}, 

21 ), 

22 path("profiles/delete/", views.ImportProfileBulkDeleteView.as_view(), name="importprofile_bulk_delete"), 

23 # Column Mappings 

24 path("profiles/<int:profile_pk>/columns/add/", views.ColumnMappingAddView.as_view(), name="columnmapping_add"), 

25 path("column-mappings/<int:pk>/edit/", views.ColumnMappingEditView.as_view(), name="columnmapping_edit"), 

26 path("column-mappings/<int:pk>/delete/", views.ColumnMappingDeleteView.as_view(), name="columnmapping_delete"), 

27 # Class → Role Mappings 

28 path( 

29 "profiles/<int:profile_pk>/class-roles/add/", 

30 views.ClassRoleMappingAddView.as_view(), 

31 name="classrolemapping_add", 

32 ), 

33 path("class-role-mappings/<int:pk>/edit/", views.ClassRoleMappingEditView.as_view(), name="classrolemapping_edit"), 

34 path( 

35 "class-role-mappings/<int:pk>/delete/", 

36 views.ClassRoleMappingDeleteView.as_view(), 

37 name="classrolemapping_delete", 

38 ), 

39 # CableClass Mappings 

40 path( 

41 "profiles/<int:profile_pk>/cable-classes/add/", 

42 views.CableClassMappingAddView.as_view(), 

43 name="cableclassmapping_add", 

44 ), 

45 path( 

46 "cable-class-mappings/<int:pk>/edit/", 

47 views.CableClassMappingEditView.as_view(), 

48 name="cableclassmapping_edit", 

49 ), 

50 path( 

51 "cable-class-mappings/<int:pk>/delete/", 

52 views.CableClassMappingDeleteView.as_view(), 

53 name="cableclassmapping_delete", 

54 ), 

55 # PortClass Mappings 

56 path( 

57 "profiles/<int:profile_pk>/port-classes/add/", 

58 views.PortClassMappingAddView.as_view(), 

59 name="portclassmapping_add", 

60 ), 

61 path( 

62 "port-class-mappings/<int:pk>/edit/", 

63 views.PortClassMappingEditView.as_view(), 

64 name="portclassmapping_edit", 

65 ), 

66 path( 

67 "port-class-mappings/<int:pk>/delete/", 

68 views.PortClassMappingDeleteView.as_view(), 

69 name="portclassmapping_delete", 

70 ), 

71 # AI backends (Inference Backend, specification 8.2) 

72 path("ai-backends/", views.InferenceBackendListView.as_view(), name="inferencebackend_list"), 

73 path("ai-backends/add/", views.InferenceBackendEditView.as_view(), name="inferencebackend_add"), 

74 path("ai-backends/<int:pk>/", views.InferenceBackendView.as_view(), name="inferencebackend"), 

75 path("ai-backends/<int:pk>/edit/", views.InferenceBackendEditView.as_view(), name="inferencebackend_edit"), 

76 path("ai-backends/<int:pk>/delete/", views.InferenceBackendDeleteView.as_view(), name="inferencebackend_delete"), 

77 path( 

78 "ai-backends/<int:pk>/changelog/", 

79 views.InferenceBackendChangeLogView.as_view(), 

80 name="inferencebackend_changelog", 

81 kwargs={"model": InferenceBackend}, 

82 ), 

83 path( 

84 "ai-backends/<int:pk>/connection-test/", 

85 views.InferenceBackendConnectionTestView.as_view(), 

86 name="inferencebackend_connection_test", 

87 ), 

88 # Device Type Mappings 

89 path( 

90 "profiles/<int:profile_pk>/device-types/add/", 

91 views.DeviceTypeMappingAddView.as_view(), 

92 name="devicetypemapping_add", 

93 ), 

94 path( 

95 "device-type-mappings/<int:pk>/edit/", views.DeviceTypeMappingEditView.as_view(), name="devicetypemapping_edit" 

96 ), 

97 path( 

98 "device-type-mappings/<int:pk>/delete/", 

99 views.DeviceTypeMappingDeleteView.as_view(), 

100 name="devicetypemapping_delete", 

101 ), 

102 # Column Transform Rules 

103 path( 

104 "profiles/<int:profile_pk>/transforms/add/", 

105 views.ColumnTransformRuleAddView.as_view(), 

106 name="columntransformrule_add", 

107 ), 

108 path( 

109 "column-transforms/<int:pk>/edit/", views.ColumnTransformRuleEditView.as_view(), name="columntransformrule_edit" 

110 ), 

111 path( 

112 "column-transforms/<int:pk>/delete/", 

113 views.ColumnTransformRuleDeleteView.as_view(), 

114 name="columntransformrule_delete", 

115 ), 

116 # Import Wizard 

117 path("import/", views.ImportSetupView.as_view(), name="import_setup"), 

118 path("import/preview/", views.ImportPreviewView.as_view(), name="import_preview"), 

119 path("import/run/", views.ImportRunView.as_view(), name="import_run"), 

120 path("import/re-read/", views.PreviewRereadView.as_view(), name="preview_reread"), 

121 path("import/discard/", views.PreviewDiscardView.as_view(), name="preview_discard"), 

122 path("import/progress/<int:pk>/", views.ImportProgressView.as_view(), name="import_progress"), 

123 path("import/progress/<int:pk>/restore/", views.ImportRestoreView.as_view(), name="import_restore"), 

124 path( 

125 "import/progress/<int:pk>/status/", 

126 views.ImportProgressStatusView.as_view(), 

127 name="import_progress_status", 

128 ), 

129 path("import/results/<int:pk>/", views.ImportResultsView.as_view(), name="import_results"), 

130 # Ignore / Unignore device 

131 path("ignore-device/", views.IgnoreDeviceView.as_view(), name="ignore_device"), 

132 path("unignore-device/", views.UnignoreDeviceView.as_view(), name="unignore_device"), 

133 path( 

134 "ignore-field-difference/", 

135 views.IgnoreFieldDifferenceView.as_view(), 

136 name="ignore_field_difference", 

137 ), 

138 path( 

139 "unignore-field-difference/", 

140 views.UnignoreFieldDifferenceView.as_view(), 

141 name="unignore_field_difference", 

142 ), 

143 # Quick-resolve views 

144 path("remove-extra-ip/", views.RemoveExtraIpView.as_view(), name="remove_extra_ip"), 

145 path("sync-device-field/", views.SyncDeviceFieldView.as_view(), name="sync_device_field"), 

146 path("sync-placement/", views.SyncPlacementView.as_view(), name="sync_placement"), 

147 path("contact-lookup/", views.ContactLookupView.as_view(), name="contact_lookup"), 

148 path("contact-suggestion/", views.ContactSuggestionView.as_view(), name="contact_suggestion"), 

149 # Save resolution (rerere) 

150 path("save-resolution/", views.SaveResolutionView.as_view(), name="save_resolution"), 

151 path("resolve-duplicate-name/", views.ResolveDuplicateNameView.as_view(), name="resolve_duplicate_name"), 

152 path( 

153 "ignore-duplicate-serial/", 

154 views.IgnoreDuplicateSerialView.as_view(), 

155 name="ignore_duplicate_serial", 

156 ), 

157 path("ignore-position/", views.IgnorePositionView.as_view(), name="ignore_position"), 

158 # Source resolutions list (per profile) 

159 path( 

160 "profiles/<int:profile_pk>/resolutions/", 

161 views.SourceResolutionListView.as_view(), 

162 name="source_resolution_list", 

163 ), 

164 path( 

165 "source-resolutions/<int:pk>/delete/", 

166 views.SourceResolutionDeleteView.as_view(), 

167 name="source_resolution_delete", 

168 ), 

169 # Device type analysis 

170 path("analysis/", views.DeviceTypeAnalysisView.as_view(), name="device_type_analysis"), 

171 path("analysis/<int:profile_pk>/", views.DeviceTypeAnalysisView.as_view(), name="device_type_analysis_profile"), 

172 # Bulk YAML import 

173 path("profiles/<int:profile_pk>/bulk-yaml/", views.BulkYamlImportView.as_view(), name="bulk_yaml_import"), 

174 # Profile YAML export / full-profile import 

175 path("profiles/<int:pk>/export-yaml/", views.ExportProfileYamlView.as_view(), name="exportprofile_yaml"), 

176 path("import-profile-yaml/", views.ImportProfileYamlView.as_view(), name="import_profile_yaml"), 

177 # AJAX helpers 

178 path("check-device/", views.CheckDeviceNameView.as_view(), name="check_device"), 

179 path("search-objects/", views.SearchNetBoxObjectsView.as_view(), name="search_objects"), 

180 # Quick-resolve views (POST from preview inline fix buttons) 

181 path( 

182 "quick-resolve-manufacturer/", views.QuickResolveManufacturerView.as_view(), name="quick_resolve_manufacturer" 

183 ), 

184 path("quick-resolve-device-type/", views.QuickResolveDeviceTypeView.as_view(), name="quick_resolve_device_type"), 

185 path("quick-add-class-mapping/", views.QuickAddClassRoleMappingView.as_view(), name="quick_add_class_mapping"), 

186 path("quick-add-column-mapping/", views.QuickAddColumnMappingView.as_view(), name="quick_add_column_mapping"), 

187 path("quick-create-role/", views.QuickCreateDeviceRoleView.as_view(), name="quick_create_role"), 

188 path("match-existing-device/", views.MatchExistingDeviceView.as_view(), name="match_existing_device"), 

189 path("auto-match-devices/", views.AutoMatchDevicesView.as_view(), name="auto_match_devices"), 

190 # Trace Review Workspace (section 10.2) 

191 path("trace-workspace/", views.TraceReviewWorkspaceView.as_view(), name="trace_workspace"), 

192 path( 

193 "trace-workspace/candidates/", 

194 views.TraceTerminationCandidatesView.as_view(), 

195 name="trace_termination_candidates", 

196 ), 

197 path( 

198 "trace-workspace/device-candidates/", 

199 views.TraceDeviceCandidatesView.as_view(), 

200 name="trace_device_candidates", 

201 ), 

202 path("trace-workspace/sync/", views.TraceSyncView.as_view(), name="trace_sync"), 

203 path("trace-workspace/sync/all/", views.TraceSyncAllView.as_view(), name="trace_sync_all"), 

204 path("trace-workspace/sync/status/", views.TraceSyncStatusView.as_view(), name="trace_sync_status"), 

205 path("trace-workspace/sync/cancel/", views.TraceSyncCancelView.as_view(), name="trace_sync_cancel"), 

206 path( 

207 "trace-workspace/cable-policy/", 

208 views.TraceCablePolicyView.as_view(), 

209 name="trace_cable_policy", 

210 ), 

211 path( 

212 "trace-workspace/port-class/", 

213 views.TracePortClassView.as_view(), 

214 name="trace_port_class", 

215 ), 

216 path( 

217 "trace-workspace/segment-policy/", 

218 views.TraceCableSegmentPolicyView.as_view(), 

219 name="trace_segment_policy", 

220 ), 

221 path( 

222 "trace-workspace/resolve-termination/", 

223 views.TraceResolveTerminationView.as_view(), 

224 name="trace_resolve_termination", 

225 ), 

226 path( 

227 "trace-workspace/resolve-device/", 

228 views.TraceResolveDeviceView.as_view(), 

229 name="trace_resolve_device", 

230 ), 

231 path( 

232 "trace-workspace/location-mapping/", 

233 views.TraceLocationMappingView.as_view(), 

234 name="trace_location_mapping", 

235 ), 

236 path( 

237 "trace-workspace/location-candidates/", 

238 views.TraceLocationCandidatesView.as_view(), 

239 name="trace_location_candidates", 

240 ), 

241 path("trace-workspace/proposals/", views.TraceProposalView.as_view(), name="trace_proposal"), 

242 path("trace-workspace/proposals/request/", views.TraceRequestProposalView.as_view(), name="trace_request_proposal"), 

243 path( 

244 "trace-workspace/proposals/request-all/", 

245 views.TraceRequestAllProposalsView.as_view(), 

246 name="trace_request_all_proposals", 

247 ), 

248 path("trace-workspace/proposals/cancel/", views.TraceCancelProposalView.as_view(), name="trace_cancel_proposal"), 

249 path("trace-workspace/proposals/accept/", views.TraceAcceptProposalView.as_view(), name="trace_accept_proposal"), 

250 path("trace-workspace/proposals/reject/", views.TraceRejectProposalView.as_view(), name="trace_reject_proposal"), 

251 # Per-row sync 

252 path("sync-single-row/", views.SyncSingleRowView.as_view(), name="sync_single_row"), 

253 path("unlink-device/", views.UnlinkDeviceView.as_view(), name="unlink_device"), 

254 # ImportExecution history 

255 path("executions/", views.ImportExecutionListView.as_view(), name="importexecution_list"), 

256]