mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 01:48:38 -06:00
17219 fix custom validator display if function (#17247)
* 17219 fix custom validator display if function * 17219 fix custom validator display if function * 17219 use custom json encoder * Fix system config export --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
parent
c2d67fa17e
commit
d23b9370f6
@ -25,12 +25,14 @@ from rq.registry import (
|
|||||||
from rq.worker import Worker
|
from rq.worker import Worker
|
||||||
from rq.worker_registration import clean_worker_registry
|
from rq.worker_registration import clean_worker_registry
|
||||||
|
|
||||||
|
from extras.validators import CustomValidator
|
||||||
from netbox.config import get_config, PARAMS
|
from netbox.config import get_config, PARAMS
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from netbox.views.generic.base import BaseObjectView
|
from netbox.views.generic.base import BaseObjectView
|
||||||
from netbox.views.generic.mixins import TableMixin
|
from netbox.views.generic.mixins import TableMixin
|
||||||
from utilities.forms import ConfirmationForm
|
from utilities.forms import ConfirmationForm
|
||||||
from utilities.htmx import htmx_partial
|
from utilities.htmx import htmx_partial
|
||||||
|
from utilities.json import ConfigJSONEncoder
|
||||||
from utilities.query import count_related
|
from utilities.query import count_related
|
||||||
from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view
|
from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view
|
||||||
from . import filtersets, forms, tables
|
from . import filtersets, forms, tables
|
||||||
@ -572,13 +574,17 @@ class SystemView(UserPassesTestMixin, View):
|
|||||||
k: getattr(config, k) for k in sorted(params)
|
k: getattr(config, k) for k in sorted(params)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
response = HttpResponse(json.dumps(data, indent=4), content_type='text/json')
|
response = HttpResponse(json.dumps(data, cls=ConfigJSONEncoder, indent=4), content_type='text/json')
|
||||||
response['Content-Disposition'] = 'attachment; filename="netbox.json"'
|
response['Content-Disposition'] = 'attachment; filename="netbox.json"'
|
||||||
return response
|
return response
|
||||||
|
|
||||||
plugins_table = tables.PluginTable(plugins, orderable=False)
|
plugins_table = tables.PluginTable(plugins, orderable=False)
|
||||||
plugins_table.configure(request)
|
plugins_table.configure(request)
|
||||||
|
|
||||||
|
# Serialize any CustomValidator classes
|
||||||
|
if hasattr(config, 'CUSTOM_VALIDATORS') and config.CUSTOM_VALIDATORS:
|
||||||
|
config.CUSTOM_VALIDATORS = json.dumps(config.CUSTOM_VALIDATORS, cls=ConfigJSONEncoder, indent=4)
|
||||||
|
|
||||||
return render(request, 'core/system.html', {
|
return render(request, 'core/system.html', {
|
||||||
'stats': stats,
|
'stats': stats,
|
||||||
'plugins_table': plugins_table,
|
'plugins_table': plugins_table,
|
||||||
|
@ -95,7 +95,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="ps-3">{% trans "Custom validators" %}</th>
|
<th scope="row" class="ps-3">{% trans "Custom validators" %}</th>
|
||||||
{% if config.CUSTOM_VALIDATORS %}
|
{% if config.CUSTOM_VALIDATORS %}
|
||||||
<td><pre>{{ config.CUSTOM_VALIDATORS|json }}</pre></td>
|
<td><pre>{{ config.CUSTOM_VALIDATORS }}</pre></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>{{ ''|placeholder }}</td>
|
<td>{{ ''|placeholder }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -3,6 +3,7 @@ import decimal
|
|||||||
from django.core.serializers.json import DjangoJSONEncoder
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
|
'ConfigJSONEncoder',
|
||||||
'CustomFieldJSONEncoder',
|
'CustomFieldJSONEncoder',
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,3 +16,16 @@ class CustomFieldJSONEncoder(DjangoJSONEncoder):
|
|||||||
if isinstance(o, decimal.Decimal):
|
if isinstance(o, decimal.Decimal):
|
||||||
return float(o)
|
return float(o)
|
||||||
return super().default(o)
|
return super().default(o)
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigJSONEncoder(DjangoJSONEncoder):
|
||||||
|
"""
|
||||||
|
Override Django's built-in JSON encoder to serialize CustomValidator classes as strings.
|
||||||
|
"""
|
||||||
|
def default(self, o):
|
||||||
|
from extras.validators import CustomValidator
|
||||||
|
|
||||||
|
if issubclass(type(o), CustomValidator):
|
||||||
|
return type(o).__name__
|
||||||
|
|
||||||
|
return super().default(o)
|
||||||
|
Loading…
Reference in New Issue
Block a user