2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-04-04 10:31:03 +00:00

Better ordering for plugin settings (#11646)

* Better ordering for plugin settings

- Followup to https://github.com/inventree/InvenTree/pull/11643
- Use order as provided by plugin

* Bug fix
This commit is contained in:
Oliver
2026-04-01 16:18:55 +11:00
committed by GitHub
parent 6243aec9b7
commit 080edc870f
3 changed files with 15 additions and 20 deletions

View File

@@ -10,6 +10,7 @@ import json
import math import math
import os import os
import uuid import uuid
from collections import OrderedDict
from datetime import timedelta, timezone from datetime import timedelta, timezone
from email.utils import make_msgid from email.utils import make_msgid
from enum import Enum from enum import Enum
@@ -363,9 +364,15 @@ class BaseInvenTreeSetting(models.Model):
# Specify any "default" values which are not in the database # Specify any "default" values which are not in the database
settings_definition = settings_definition or cls.SETTINGS settings_definition = settings_definition or cls.SETTINGS
all_settings = OrderedDict()
for key, setting in settings_definition.items(): for key, setting in settings_definition.items():
if key.upper() not in settings: # If the setting is already in the database, use that value
settings[key.upper()] = cls( if key.upper() in settings:
all_settings[key] = settings[key.upper()]
else:
all_settings[key.upper()] = cls(
key=key.upper(), key=key.upper(),
value=cls.get_setting_default(key, **filters), value=cls.get_setting_default(key, **filters),
**filters, **filters,
@@ -373,10 +380,10 @@ class BaseInvenTreeSetting(models.Model):
# remove any hidden settings # remove any hidden settings
if exclude_hidden and setting.get('hidden', False): if exclude_hidden and setting.get('hidden', False):
del settings[key.upper()] del all_settings[key.upper()]
# format settings values and remove protected # format settings values and remove protected
for key, setting in settings.items(): for key, setting in all_settings.items():
validator = cls.get_setting_validator(key, **filters) validator = cls.get_setting_validator(key, **filters)
if cls.is_protected(key, **filters) and setting.value != '': if cls.is_protected(key, **filters) and setting.value != '':
@@ -389,7 +396,7 @@ class BaseInvenTreeSetting(models.Model):
except ValueError: except ValueError:
setting.value = cls.get_setting_default(key, **filters) setting.value = cls.get_setting_default(key, **filters)
return settings return all_settings
@classmethod @classmethod
def allValues( def allValues(

View File

@@ -97,12 +97,8 @@ class MachineSettingList(APIView):
) )
all_settings.extend(list(settings_dict.values())) all_settings.extend(list(settings_dict.values()))
# Sort settings by the 'key' field before returning,
# to ensure a deterministic order in the API response
all_settings = sorted(all_settings, key=lambda x: x.key)
results = MachineSerializers.MachineSettingSerializer( results = MachineSerializers.MachineSettingSerializer(
all_settings, many=True list(all_settings), many=True
).data ).data
return Response(results) return Response(results)

View File

@@ -380,12 +380,8 @@ class PluginAllSettingList(APIView):
settings_definition=settings, plugin=plugin.plugin_config() settings_definition=settings, plugin=plugin.plugin_config()
) )
# Sort settings by the 'key' field before returning,
# to ensure a deterministic order in the API response
settings_values = sorted(settings_dict.values(), key=lambda x: x.key)
results = PluginSerializers.PluginSettingSerializer( results = PluginSerializers.PluginSettingSerializer(
settings_values, many=True list(settings_dict.values()), many=True
).data ).data
return Response(results) return Response(results)
@@ -448,12 +444,8 @@ class PluginUserSettingList(APIView):
user=request.user, user=request.user,
) )
# Sort settings by the 'key' field before returning,
# to ensure a deterministic order in the API response
settings_values = sorted(settings_dict.values(), key=lambda x: x.key)
results = PluginSerializers.PluginUserSettingSerializer( results = PluginSerializers.PluginUserSettingSerializer(
settings_values, many=True list(settings_dict.values()), many=True
).data ).data
return Response(results) return Response(results)