Coverage for netbox_data_import/urls.py: 100%
4 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-09 20:50 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-09 20:50 +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 # AI backends (Inference Backend, specification 8.2)
56 path("ai-backends/", views.InferenceBackendListView.as_view(), name="inferencebackend_list"),
57 path("ai-backends/add/", views.InferenceBackendEditView.as_view(), name="inferencebackend_add"),
58 path("ai-backends/<int:pk>/", views.InferenceBackendView.as_view(), name="inferencebackend"),
59 path("ai-backends/<int:pk>/edit/", views.InferenceBackendEditView.as_view(), name="inferencebackend_edit"),
60 path("ai-backends/<int:pk>/delete/", views.InferenceBackendDeleteView.as_view(), name="inferencebackend_delete"),
61 path(
62 "ai-backends/<int:pk>/changelog/",
63 views.InferenceBackendChangeLogView.as_view(),
64 name="inferencebackend_changelog",
65 kwargs={"model": InferenceBackend},
66 ),
67 path(
68 "ai-backends/<int:pk>/connection-test/",
69 views.InferenceBackendConnectionTestView.as_view(),
70 name="inferencebackend_connection_test",
71 ),
72 # Device Type Mappings
73 path(
74 "profiles/<int:profile_pk>/device-types/add/",
75 views.DeviceTypeMappingAddView.as_view(),
76 name="devicetypemapping_add",
77 ),
78 path(
79 "device-type-mappings/<int:pk>/edit/", views.DeviceTypeMappingEditView.as_view(), name="devicetypemapping_edit"
80 ),
81 path(
82 "device-type-mappings/<int:pk>/delete/",
83 views.DeviceTypeMappingDeleteView.as_view(),
84 name="devicetypemapping_delete",
85 ),
86 # Column Transform Rules
87 path(
88 "profiles/<int:profile_pk>/transforms/add/",
89 views.ColumnTransformRuleAddView.as_view(),
90 name="columntransformrule_add",
91 ),
92 path(
93 "column-transforms/<int:pk>/edit/", views.ColumnTransformRuleEditView.as_view(), name="columntransformrule_edit"
94 ),
95 path(
96 "column-transforms/<int:pk>/delete/",
97 views.ColumnTransformRuleDeleteView.as_view(),
98 name="columntransformrule_delete",
99 ),
100 # Import Wizard
101 path("import/", views.ImportSetupView.as_view(), name="import_setup"),
102 path("import/preview/", views.ImportPreviewView.as_view(), name="import_preview"),
103 path("import/run/", views.ImportRunView.as_view(), name="import_run"),
104 path("import/progress/<int:pk>/", views.ImportProgressView.as_view(), name="import_progress"),
105 path(
106 "import/progress/<int:pk>/status/",
107 views.ImportProgressStatusView.as_view(),
108 name="import_progress_status",
109 ),
110 path("import/results/", views.ImportResultsView.as_view(), name="import_results"),
111 # Ignore / Unignore device
112 path("ignore-device/", views.IgnoreDeviceView.as_view(), name="ignore_device"),
113 path("unignore-device/", views.UnignoreDeviceView.as_view(), name="unignore_device"),
114 path(
115 "ignore-field-difference/",
116 views.IgnoreFieldDifferenceView.as_view(),
117 name="ignore_field_difference",
118 ),
119 path(
120 "unignore-field-difference/",
121 views.UnignoreFieldDifferenceView.as_view(),
122 name="unignore_field_difference",
123 ),
124 # Quick-resolve views
125 path("remove-extra-ip/", views.RemoveExtraIpView.as_view(), name="remove_extra_ip"),
126 path("sync-device-field/", views.SyncDeviceFieldView.as_view(), name="sync_device_field"),
127 path("sync-placement/", views.SyncPlacementView.as_view(), name="sync_placement"),
128 path("contact-lookup/", views.ContactLookupView.as_view(), name="contact_lookup"),
129 path("contact-suggestion/", views.ContactSuggestionView.as_view(), name="contact_suggestion"),
130 # Save resolution (rerere)
131 path("save-resolution/", views.SaveResolutionView.as_view(), name="save_resolution"),
132 path("resolve-duplicate-name/", views.ResolveDuplicateNameView.as_view(), name="resolve_duplicate_name"),
133 path(
134 "ignore-duplicate-serial/",
135 views.IgnoreDuplicateSerialView.as_view(),
136 name="ignore_duplicate_serial",
137 ),
138 # Source resolutions list (per profile)
139 path(
140 "profiles/<int:profile_pk>/resolutions/",
141 views.SourceResolutionListView.as_view(),
142 name="source_resolution_list",
143 ),
144 path(
145 "source-resolutions/<int:pk>/delete/",
146 views.SourceResolutionDeleteView.as_view(),
147 name="source_resolution_delete",
148 ),
149 # Device type analysis
150 path("analysis/", views.DeviceTypeAnalysisView.as_view(), name="device_type_analysis"),
151 path("analysis/<int:profile_pk>/", views.DeviceTypeAnalysisView.as_view(), name="device_type_analysis_profile"),
152 # Bulk YAML import
153 path("profiles/<int:profile_pk>/bulk-yaml/", views.BulkYamlImportView.as_view(), name="bulk_yaml_import"),
154 # Profile YAML export / full-profile import
155 path("profiles/<int:pk>/export-yaml/", views.ExportProfileYamlView.as_view(), name="exportprofile_yaml"),
156 path("import-profile-yaml/", views.ImportProfileYamlView.as_view(), name="import_profile_yaml"),
157 # AJAX helpers
158 path("check-device/", views.CheckDeviceNameView.as_view(), name="check_device"),
159 path("search-objects/", views.SearchNetBoxObjectsView.as_view(), name="search_objects"),
160 # Quick-resolve views (POST from preview inline fix buttons)
161 path(
162 "quick-resolve-manufacturer/", views.QuickResolveManufacturerView.as_view(), name="quick_resolve_manufacturer"
163 ),
164 path("quick-resolve-device-type/", views.QuickResolveDeviceTypeView.as_view(), name="quick_resolve_device_type"),
165 path("quick-add-class-mapping/", views.QuickAddClassRoleMappingView.as_view(), name="quick_add_class_mapping"),
166 path("quick-add-column-mapping/", views.QuickAddColumnMappingView.as_view(), name="quick_add_column_mapping"),
167 path("quick-create-role/", views.QuickCreateDeviceRoleView.as_view(), name="quick_create_role"),
168 path("match-existing-device/", views.MatchExistingDeviceView.as_view(), name="match_existing_device"),
169 path("auto-match-devices/", views.AutoMatchDevicesView.as_view(), name="auto_match_devices"),
170 # Trace Review Workspace (section 10.2)
171 path("trace-workspace/", views.TraceReviewWorkspaceView.as_view(), name="trace_workspace"),
172 path("trace-workspace/re-read/", views.TraceWorkspaceRereadView.as_view(), name="trace_workspace_reread"),
173 path(
174 "trace-workspace/candidates/",
175 views.TraceTerminationCandidatesView.as_view(),
176 name="trace_termination_candidates",
177 ),
178 path("trace-workspace/sync/", views.TraceSyncView.as_view(), name="trace_sync"),
179 path(
180 "trace-workspace/resolve-termination/",
181 views.TraceResolveTerminationView.as_view(),
182 name="trace_resolve_termination",
183 ),
184 # Per-row sync
185 path("sync-single-row/", views.SyncSingleRowView.as_view(), name="sync_single_row"),
186 path("unlink-device/", views.UnlinkDeviceView.as_view(), name="unlink_device"),
187 # ImportExecution history
188 path("executions/", views.ImportExecutionListView.as_view(), name="importexecution_list"),
189]