mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 17:08:41 -06:00
Move config parameter value population to ConfigRevisionForm init
This commit is contained in:
parent
acdebea7f1
commit
1e317f82f5
@ -14,25 +14,14 @@ EMPTY_VALUES = ('', None, [], ())
|
|||||||
class FormMetaclass(forms.models.ModelFormMetaclass):
|
class FormMetaclass(forms.models.ModelFormMetaclass):
|
||||||
|
|
||||||
def __new__(mcs, name, bases, attrs):
|
def __new__(mcs, name, bases, attrs):
|
||||||
config = get_config()
|
|
||||||
|
|
||||||
# Emulate a declared field for each supported configuration parameter
|
# Emulate a declared field for each supported configuration parameter
|
||||||
param_fields = {}
|
param_fields = {}
|
||||||
for param in PARAMS:
|
for param in PARAMS:
|
||||||
is_static = hasattr(settings, param.name)
|
|
||||||
help_text = f'{param.description}<br />' if param.description else ''
|
|
||||||
value = getattr(config, param.name)
|
|
||||||
if value:
|
|
||||||
help_text += f'Current value: <strong>{value}</strong>'
|
|
||||||
if is_static:
|
|
||||||
help_text += ' (defined statically)'
|
|
||||||
elif value == param.default:
|
|
||||||
help_text += ' (default)'
|
|
||||||
field_kwargs = {
|
field_kwargs = {
|
||||||
'required': False,
|
'required': False,
|
||||||
'disabled': is_static,
|
|
||||||
'label': param.label,
|
'label': param.label,
|
||||||
'help_text': help_text,
|
'help_text': param.description,
|
||||||
}
|
}
|
||||||
field_kwargs.update(**param.field_kwargs)
|
field_kwargs.update(**param.field_kwargs)
|
||||||
param_fields[param.name] = param.field(**field_kwargs)
|
param_fields[param.name] = param.field(**field_kwargs)
|
||||||
@ -50,6 +39,24 @@ class ConfigRevisionForm(forms.BaseModelForm, metaclass=FormMetaclass):
|
|||||||
'comment': forms.Textarea(),
|
'comment': forms.Textarea(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Append current parameter values to form field help texts and check for static configurations
|
||||||
|
config = get_config()
|
||||||
|
for param in PARAMS:
|
||||||
|
value = getattr(config, param.name)
|
||||||
|
is_static = hasattr(settings, param.name)
|
||||||
|
if value:
|
||||||
|
help_text = f'<br />Current value: <strong>{value}</strong>'
|
||||||
|
if is_static:
|
||||||
|
help_text += ' (defined statically)'
|
||||||
|
elif value == param.default:
|
||||||
|
help_text += ' (default)'
|
||||||
|
self.fields[param.name].help_text += help_text
|
||||||
|
if is_static:
|
||||||
|
self.fields[param.name].disabled = True
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
instance = super().save(commit=False)
|
instance = super().save(commit=False)
|
||||||
|
|
||||||
|
@ -78,16 +78,15 @@ class Config:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
revision = ConfigRevision.objects.last()
|
revision = ConfigRevision.objects.last()
|
||||||
|
if revision is None:
|
||||||
|
logger.debug("No previous configuration found in database; proceeding with default values")
|
||||||
|
return
|
||||||
logger.debug("Loaded configuration data from database")
|
logger.debug("Loaded configuration data from database")
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
# The database may not be available yet (e.g. when running a management command)
|
# The database may not be available yet (e.g. when running a management command)
|
||||||
logger.warning(f"Skipping config initialization (database unavailable)")
|
logger.warning(f"Skipping config initialization (database unavailable)")
|
||||||
return
|
return
|
||||||
|
|
||||||
if revision is None:
|
|
||||||
logger.debug("No previous configuration found in database; proceeding with default values")
|
|
||||||
return
|
|
||||||
|
|
||||||
revision.activate()
|
revision.activate()
|
||||||
logger.debug("Filled cache with data from latest ConfigRevision")
|
logger.debug("Filled cache with data from latest ConfigRevision")
|
||||||
self._populate_from_cache()
|
self._populate_from_cache()
|
||||||
|
@ -4,7 +4,7 @@ from django.contrib.postgres.forms import SimpleArrayField
|
|||||||
|
|
||||||
class ConfigParam:
|
class ConfigParam:
|
||||||
|
|
||||||
def __init__(self, name, label, default, description=None, field=None, field_kwargs=None):
|
def __init__(self, name, label, default, description='', field=None, field_kwargs=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.label = label
|
self.label = label
|
||||||
self.default = default
|
self.default = default
|
||||||
|
Loading…
Reference in New Issue
Block a user