ソースを参照

16149 add (optional) obj hyperlink to script list table (#16271)

* 16149 add (optional) obj hyperlink to script list table

* 16149 add (optional) obj hyperlink to script list table

* 16149 review feedback

* 16149 review changes
Arthur Hanson 1 年間 前
コミット
85fd232614

+ 5 - 5
docs/customization/custom-scripts.md

@@ -138,11 +138,11 @@ These two methods will load data in YAML or JSON format, respectively, from file
 
 The Script object provides a set of convenient functions for recording messages at different severity levels:
 
-* `log_debug(message, object=None)`
-* `log_success(message, object=None)`
-* `log_info(message, object=None)`
-* `log_warning(message, object=None)`
-* `log_failure(message, object=None)`
+* `log_debug(message, obj=None)`
+* `log_success(message, obj=None)`
+* `log_info(message, obj=None)`
+* `log_warning(message, obj=None)`
+* `log_failure(message, obj=None)`
 
 Log messages are returned to the user upon execution of the script. Markdown rendering is supported for log messages. A message may optionally be associated with a particular object by passing it as the second argument to the logging method.
 

+ 2 - 0
netbox/extras/scripts.py

@@ -500,6 +500,8 @@ class BaseScript:
                 'time': timezone.now().isoformat(),
                 'status': level,
                 'message': str(message),
+                'obj': str(obj) if obj else None,
+                'url': obj.get_absolute_url() if hasattr(obj, 'get_absolute_url') else None,
             })
 
             # Record to the system log

+ 20 - 1
netbox/extras/tables/tables.py

@@ -1,6 +1,7 @@
 import json
 
 import django_tables2 as tables
+from django.utils.html import format_html
 from django.utils.translation import gettext_lazy as _
 
 from extras.models import *
@@ -545,6 +546,9 @@ class ScriptResultsTable(BaseTable):
         template_code="""{% load log_levels %}{% log_level record.status %}""",
         verbose_name=_('Level')
     )
+    object = tables.Column(
+        verbose_name=_('Object')
+    )
     message = columns.MarkdownColumn(
         verbose_name=_('Message')
     )
@@ -552,9 +556,18 @@ class ScriptResultsTable(BaseTable):
     class Meta(BaseTable.Meta):
         empty_text = _(EMPTY_TABLE_TEXT)
         fields = (
-            'index', 'time', 'status', 'message',
+            'index', 'time', 'status', 'object', 'message',
+        )
+        default_columns = (
+            'index', 'time', 'status', 'object', 'message',
         )
 
+    def render_object(self, value, record):
+        return format_html("<a href='{}'>{}</a>", record['url'], value)
+
+    def render_url(self, value):
+        return format_html("<a href='{}'>{}</a>", value, value)
+
 
 class ReportResultsTable(BaseTable):
     index = tables.Column(
@@ -585,3 +598,9 @@ class ReportResultsTable(BaseTable):
         fields = (
             'index', 'method', 'time', 'status', 'object', 'url', 'message',
         )
+
+    def render_object(self, value, record):
+        return format_html("<a href='{}'>{}</a>", record['url'], value)
+
+    def render_url(self, value):
+        return format_html("<a href='{}'>{}</a>", value, value)

+ 2 - 0
netbox/extras/views.py

@@ -1201,6 +1201,8 @@ class ScriptResultView(TableMixin, generic.ObjectView):
                         'time': log.get('time'),
                         'status': log.get('status'),
                         'message': log.get('message'),
+                        'object': log.get('obj'),
+                        'url': log.get('url'),
                     }
                     data.append(result)
 

+ 1 - 1
netbox/templates/extras/script_result.html

@@ -44,7 +44,7 @@
       {# Object table controls #}
       <div class="row mb-3">
         <div class="col-auto ms-auto d-print-none">
-          {% if request.user.is_authenticated %}
+          {% if request.user.is_authenticated and job.completed %}
             <div class="table-configure input-group">
               <button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}" data-bs-target="#ObjectTable_config"
                 class="btn">