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:
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user