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

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