Replace legacy URLs with redirects

This commit is contained in:
Jeremy Stretch 2024-02-14 14:44:54 -05:00
parent 638c303bf0
commit 6422049d13
2 changed files with 22 additions and 68 deletions

View File

@ -120,15 +120,15 @@ urlpatterns = [
path('scripts/', views.ScriptListView.as_view(), name='script_list'), path('scripts/', views.ScriptListView.as_view(), name='script_list'),
path('scripts/add/', views.ScriptModuleCreateView.as_view(), name='scriptmodule_add'), path('scripts/add/', views.ScriptModuleCreateView.as_view(), name='scriptmodule_add'),
path('scripts/results/<int:job_pk>/', views.ScriptResultView.as_view(), name='script_result'), path('scripts/results/<int:job_pk>/', views.ScriptResultView.as_view(), name='script_result'),
path('scripts/<int:pk>/', include(get_model_urls('extras', 'scriptmodule'))), path('scripts/<int:pk>/', views.ScriptView.as_view(), name='script'),
path('scripts/<int:pk>/source/', views.ScriptSourceView.as_view(), name='script_source'),
path('scripts/<int:pk>/jobs/', views.ScriptJobsView.as_view(), name='script_jobs'),
path('script-modules/<int:pk>/', include(get_model_urls('extras', 'scriptmodule'))),
path('scripts/<str:module>/<str:name>/', views.ScriptModuleView.as_view(), name='script_module'), # Redirects for legacy script URLs
path('scripts/<str:module>/<str:name>/source/', views.ScriptModuleSourceView.as_view(), name='script_module_source'), # TODO: Remove in NetBox v4.1
path('scripts/<str:module>/<str:name>/jobs/', views.ScriptModuleJobsView.as_view(), name='script_module_jobs'), path('scripts/<str:module>/<str:name>/', views.LegacyScriptRedirectView.as_view()),
path('scripts/<str:module>/<str:name>/<path:path>/', views.LegacyScriptRedirectView.as_view()),
path('script-modules/<int:pk>/', views.ScriptView.as_view(), name='script'),
path('scripts-modules/<int:pk>/source/', views.ScriptSourceView.as_view(), name='script_source'),
path('scripts-modules/<int:pk>/jobs/', views.ScriptJobsView.as_view(), name='script_jobs'),
# Markdown # Markdown
path('render/markdown/', views.RenderMarkdownView.as_view(), name="render_markdown"), path('render/markdown/', views.RenderMarkdownView.as_view(), name="render_markdown"),

View File

@ -1132,25 +1132,6 @@ class ScriptView(BaseScriptView):
}) })
class ScriptModuleView(ScriptView):
def get(self, request, module, name):
if ret := self.get_script_by_module_name(request, module, name):
return ret
form = None
if self.script_class:
form = self.script_class.as_form(initial=normalize_querydict(request.GET))
return render(request, 'extras/script.html', {
'job_count': self.jobs.count(),
'module': self.script.module,
'script': self.script,
'script_class': self.script_class,
'form': form,
})
class ScriptSourceView(BaseScriptView): class ScriptSourceView(BaseScriptView):
def get(self, request, pk): def get(self, request, pk):
@ -1166,21 +1147,6 @@ class ScriptSourceView(BaseScriptView):
}) })
class ScriptModuleSourceView(ScriptSourceView):
def get(self, request, module, name):
if ret := self.get_script_by_module_name(request, module, name):
return ret
return render(request, 'extras/script/source.html', {
'job_count': self.jobs.count(),
'module': self.script.module,
'script': self.script,
'script_class': self.script_class,
'tab': 'source',
})
class ScriptJobsView(ContentTypePermissionRequiredMixin, View): class ScriptJobsView(ContentTypePermissionRequiredMixin, View):
script = None script = None
script_class = None script_class = None
@ -1218,35 +1184,23 @@ class ScriptJobsView(ContentTypePermissionRequiredMixin, View):
}) })
class ScriptModuleJobsView(ScriptJobsView): class LegacyScriptRedirectView(ContentTypePermissionRequiredMixin, View):
def get(self, request, module, name): """
module = get_script_module(module, request) Redirect legacy (pre-v4.0) script URLs. Examples:
self.script = get_object_or_404(Script.objects.all(), module=module, name=name) /extras/scripts/<module>/<name>/ --> /extras/scripts/<id>/
/extras/scripts/<module>/<name>/source/ --> /extras/scripts/<id>/source/
/extras/scripts/<module>/<name>/jobs/ --> /extras/scripts/<id>/jobs/
"""
def get_required_permission(self):
return 'extras.view_script'
if self.script.python_class: def get(self, request, module, name, path=''):
self.script_class = self.script.python_class() module = get_object_or_404(ScriptModule.objects.restrict(request.user), file_path__regex=f"^{module}\\.")
else: script = get_object_or_404(Script.objects.all(), module=module, name=name)
self.script.delete_if_no_jobs()
if not self.script.id:
messages.error(request, _("Script class has been deleted from module: ") + str(self.script.module))
return redirect('extras:script_list')
self.jobs = self.script.jobs.all() url = reverse('extras:script', kwargs={'pk': script.pk})
jobs_table = JobTable( return redirect(f'{url}{path}')
data=self.jobs,
orderable=False,
user=request.user
)
jobs_table.configure(request)
return render(request, 'extras/script/jobs.html', {
'job_count': self.jobs.count(),
'module': self.script.module,
'script': self.script,
'table': jobs_table,
'tab': 'jobs',
})
class ScriptResultView(BaseScriptView): class ScriptResultView(BaseScriptView):