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
« 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
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]