From 8b62e40874b09be62cdf217a2b62d552a64328df Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 24 Jun 2024 09:39:27 -0400 Subject: [PATCH] Closes #16307: Enable calling log_* methods on Script without a log message --- docs/customization/custom-scripts.md | 12 ++++++----- netbox/extras/scripts.py | 30 +++++++++++++++------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index 75463d871..e6f6bb85f 100644 --- a/docs/customization/custom-scripts.md +++ b/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, obj=None)` -* `log_success(message, obj=None)` -* `log_info(message, obj=None)` -* `log_warning(message, obj=None)` -* `log_failure(message, obj=None)` +* `log_debug(message=None, obj=None)` +* `log_success(message=None, obj=None)` +* `log_info(message=None, obj=None)` +* `log_warning(message=None, obj=None)` +* `log_failure(message=None, 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. @@ -152,6 +152,8 @@ A script can define one or more test methods to report on certain conditions. Al These methods are detected and run automatically when the script is executed, unless its `run()` method has been overridden. (When overriding `run()`, `run_tests()` can be called to run all test methods present in the script.) +Calling any of these logging methods without a message will increment the relevant counter, but will not generate an output line in the script's log. + !!! info This functionality was ported from [legacy reports](./reports.md) in NetBox v4.0. diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index ae27aa0fb..b54302870 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -480,19 +480,21 @@ class BaseScript: # A test method is currently active, so log the message using legacy Report logging if self._current_test: - # TODO: Use a dataclass for test method logs - self.tests[self._current_test]['log'].append(( - timezone.now().isoformat(), - level, - str(obj) if obj else None, - obj.get_absolute_url() if hasattr(obj, 'get_absolute_url') else None, - str(message), - )) - # Increment the event counter for this level if level in self.tests[self._current_test]: self.tests[self._current_test][level] += 1 + # Record message (if any) to the report log + if message: + # TODO: Use a dataclass for test method logs + self.tests[self._current_test]['log'].append(( + timezone.now().isoformat(), + level, + str(obj) if obj else None, + obj.get_absolute_url() if hasattr(obj, 'get_absolute_url') else None, + str(message), + )) + elif message: # Record to the script's log @@ -509,19 +511,19 @@ class BaseScript: message = f"{obj}: {message}" self.logger.log(LogLevelChoices.SYSTEM_LEVELS[level], message) - def log_debug(self, message, obj=None): + def log_debug(self, message=None, obj=None): self._log(message, obj, level=LogLevelChoices.LOG_DEBUG) - def log_success(self, message, obj=None): + def log_success(self, message=None, obj=None): self._log(message, obj, level=LogLevelChoices.LOG_SUCCESS) - def log_info(self, message, obj=None): + def log_info(self, message=None, obj=None): self._log(message, obj, level=LogLevelChoices.LOG_INFO) - def log_warning(self, message, obj=None): + def log_warning(self, message=None, obj=None): self._log(message, obj, level=LogLevelChoices.LOG_WARNING) - def log_failure(self, message, obj=None): + def log_failure(self, message=None, obj=None): self._log(message, obj, level=LogLevelChoices.LOG_FAILURE) self.failed = True