Skip to content

Commit

Permalink
16149 add (optional) obj hyperlink to script list table (netbox-commu…
Browse files Browse the repository at this point in the history
…nity#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
  • Loading branch information
arthanson authored Jun 21, 2024
1 parent dda0b0b commit 85fd232
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 7 deletions.
10 changes: 5 additions & 5 deletions docs/customization/custom-scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
2 changes: 2 additions & 0 deletions netbox/extras/scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,8 @@ def _log(self, message, obj=None, level=LogLevelChoices.LOG_DEFAULT):
'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
Expand Down
21 changes: 20 additions & 1 deletion netbox/extras/tables/tables.py
Original file line number Diff line number Diff line change
@@ -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 *
Expand Down Expand Up @@ -545,16 +546,28 @@ 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')
)

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(
Expand Down Expand Up @@ -585,3 +598,9 @@ class Meta(BaseTable.Meta):
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 changes: 2 additions & 0 deletions netbox/extras/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1201,6 +1201,8 @@ def get_table(self, job, request, bulk_actions=True):
'time': log.get('time'),
'status': log.get('status'),
'message': log.get('message'),
'object': log.get('obj'),
'url': log.get('url'),
}
data.append(result)

Expand Down
2 changes: 1 addition & 1 deletion netbox/templates/extras/script_result.html
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down

0 comments on commit 85fd232

Please sign in to comment.