From 7d4d347ff0b8a233b36778311dc14d311211d850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markku=20Leini=C3=B6?= Date: Sat, 20 Jan 2024 16:51:01 +0200 Subject: [PATCH 1/4] Closes #14690: Pretty-format JSON fields in the config form --- netbox/core/forms/model_forms.py | 3 +++ netbox/netbox/config/parameters.py | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index ae891dd59e1..c617d0cd362 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -207,6 +207,9 @@ def __init__(self, *args, **kwargs): help_text += _(' (default)') self.fields[param.name].help_text = help_text + # Use the parameter-specific encoder + self.fields[param.name].encoder = param.encoder + def save(self, commit=True): instance = super().save(commit=False) diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py index 54c9027ccc6..9a62a76303d 100644 --- a/netbox/netbox/config/parameters.py +++ b/netbox/netbox/config/parameters.py @@ -1,8 +1,15 @@ +import json + from django import forms from django.contrib.postgres.forms import SimpleArrayField from django.utils.translation import gettext_lazy as _ +class PrettyJSONEncoder(json.JSONEncoder): + def __init__(self, indent, sort_keys, *args, **kwargs): + super().__init__(indent=4, sort_keys=True, *args, **kwargs) + + class ConfigParam: def __init__(self, name, label, default, description='', field=None, field_kwargs=None): @@ -12,6 +19,7 @@ def __init__(self, name, label, default, description='', field=None, field_kwarg self.field = field or forms.CharField self.description = description self.field_kwargs = field_kwargs or {} + self.encoder = PrettyJSONEncoder if self.field == forms.JSONField else None PARAMS = ( From 1d741b79e1e0c3c1ea81eca2e942fadcb2c232eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markku=20Leini=C3=B6?= Date: Thu, 18 Apr 2024 22:29:25 +0300 Subject: [PATCH 2/4] Revert changes --- netbox/core/forms/model_forms.py | 3 --- netbox/netbox/config/parameters.py | 8 -------- 2 files changed, 11 deletions(-) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index c617d0cd362..ae891dd59e1 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -207,9 +207,6 @@ def __init__(self, *args, **kwargs): help_text += _(' (default)') self.fields[param.name].help_text = help_text - # Use the parameter-specific encoder - self.fields[param.name].encoder = param.encoder - def save(self, commit=True): instance = super().save(commit=False) diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py index 9a62a76303d..54c9027ccc6 100644 --- a/netbox/netbox/config/parameters.py +++ b/netbox/netbox/config/parameters.py @@ -1,15 +1,8 @@ -import json - from django import forms from django.contrib.postgres.forms import SimpleArrayField from django.utils.translation import gettext_lazy as _ -class PrettyJSONEncoder(json.JSONEncoder): - def __init__(self, indent, sort_keys, *args, **kwargs): - super().__init__(indent=4, sort_keys=True, *args, **kwargs) - - class ConfigParam: def __init__(self, name, label, default, description='', field=None, field_kwargs=None): @@ -19,7 +12,6 @@ def __init__(self, name, label, default, description='', field=None, field_kwarg self.field = field or forms.CharField self.description = description self.field_kwargs = field_kwargs or {} - self.encoder = PrettyJSONEncoder if self.field == forms.JSONField else None PARAMS = ( From a7b949812475a07c967015ff2645a931ab773371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markku=20Leini=C3=B6?= Date: Thu, 18 Apr 2024 22:33:31 +0300 Subject: [PATCH 3/4] Use our own JSONField for config parameters for pretty editor outputs --- netbox/core/forms/model_forms.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index ae891dd59e1..b8e2c27941c 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -3,6 +3,7 @@ from django import forms from django.conf import settings +from django.forms.fields import JSONField as _JSONField from django.utils.translation import gettext_lazy as _ from core.forms.mixins import SyncedDataMixin @@ -12,7 +13,7 @@ from netbox.registry import registry from netbox.utils import get_data_backend_choices from utilities.forms import BootstrapMixin, get_field_value -from utilities.forms.fields import CommentField +from utilities.forms.fields import CommentField, JSONField from utilities.forms.widgets import HTMXSelect __all__ = ( @@ -132,6 +133,9 @@ def __new__(mcs, name, bases, attrs): 'help_text': param.description, } field_kwargs.update(**param.field_kwargs) + if param.field == _JSONField: + # Replace with our own JSONField to get pretty JSON in config editor + param.field = JSONField param_fields[param.name] = param.field(**field_kwargs) attrs.update(param_fields) From adc2c93682299e965e5fcdde2e0f76eda4d3daec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markku=20Leini=C3=B6?= Date: Thu, 18 Apr 2024 22:54:14 +0300 Subject: [PATCH 4/4] Compare identity instead of equality --- netbox/core/forms/model_forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index b8e2c27941c..0f4f971dca2 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -133,7 +133,7 @@ def __new__(mcs, name, bases, attrs): 'help_text': param.description, } field_kwargs.update(**param.field_kwargs) - if param.field == _JSONField: + if param.field is _JSONField: # Replace with our own JSONField to get pretty JSON in config editor param.field = JSONField param_fields[param.name] = param.field(**field_kwargs)