mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-14 01:41:22 -06:00
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
This commit is contained in:
parent
dda0b0bbd1
commit
85fd232614
@ -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:
|
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
||||||
|
|
||||||
* `log_debug(message, object=None)`
|
* `log_debug(message, obj=None)`
|
||||||
* `log_success(message, object=None)`
|
* `log_success(message, obj=None)`
|
||||||
* `log_info(message, object=None)`
|
* `log_info(message, obj=None)`
|
||||||
* `log_warning(message, object=None)`
|
* `log_warning(message, obj=None)`
|
||||||
* `log_failure(message, object=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.
|
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.
|
||||||
|
|
||||||
|
@ -500,6 +500,8 @@ class BaseScript:
|
|||||||
'time': timezone.now().isoformat(),
|
'time': timezone.now().isoformat(),
|
||||||
'status': level,
|
'status': level,
|
||||||
'message': str(message),
|
'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
|
# Record to the system log
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
|
from django.utils.html import format_html
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from extras.models import *
|
from extras.models import *
|
||||||
@ -545,6 +546,9 @@ class ScriptResultsTable(BaseTable):
|
|||||||
template_code="""{% load log_levels %}{% log_level record.status %}""",
|
template_code="""{% load log_levels %}{% log_level record.status %}""",
|
||||||
verbose_name=_('Level')
|
verbose_name=_('Level')
|
||||||
)
|
)
|
||||||
|
object = tables.Column(
|
||||||
|
verbose_name=_('Object')
|
||||||
|
)
|
||||||
message = columns.MarkdownColumn(
|
message = columns.MarkdownColumn(
|
||||||
verbose_name=_('Message')
|
verbose_name=_('Message')
|
||||||
)
|
)
|
||||||
@ -552,8 +556,17 @@ class ScriptResultsTable(BaseTable):
|
|||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
empty_text = _(EMPTY_TABLE_TEXT)
|
empty_text = _(EMPTY_TABLE_TEXT)
|
||||||
fields = (
|
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):
|
class ReportResultsTable(BaseTable):
|
||||||
@ -585,3 +598,9 @@ class ReportResultsTable(BaseTable):
|
|||||||
fields = (
|
fields = (
|
||||||
'index', 'method', 'time', 'status', 'object', 'url', 'message',
|
'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)
|
||||||
|
@ -1201,6 +1201,8 @@ class ScriptResultView(TableMixin, generic.ObjectView):
|
|||||||
'time': log.get('time'),
|
'time': log.get('time'),
|
||||||
'status': log.get('status'),
|
'status': log.get('status'),
|
||||||
'message': log.get('message'),
|
'message': log.get('message'),
|
||||||
|
'object': log.get('obj'),
|
||||||
|
'url': log.get('url'),
|
||||||
}
|
}
|
||||||
data.append(result)
|
data.append(result)
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
{# Object table controls #}
|
{# Object table controls #}
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-auto ms-auto d-print-none">
|
<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">
|
<div class="table-configure input-group">
|
||||||
<button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}" data-bs-target="#ObjectTable_config"
|
<button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}" data-bs-target="#ObjectTable_config"
|
||||||
class="btn">
|
class="btn">
|
||||||
|
Loading…
Reference in New Issue
Block a user