From 6d47a0dd164f0845d65012891691e7cc24f9f04a Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 3 Jun 2025 15:03:35 +1000 Subject: [PATCH] Add generic StringEnum class (#9731) * Add generic StringEnum class * Fix import --- src/backend/InvenTree/common/models.py | 8 ++------ src/backend/InvenTree/generic/enums.py | 15 +++++++++++++++ src/backend/InvenTree/generic/events.py | 8 ++------ src/backend/InvenTree/plugin/plugin.py | 8 ++------ src/backend/InvenTree/users/ruleset.py | 10 +++------- 5 files changed, 24 insertions(+), 25 deletions(-) create mode 100644 src/backend/InvenTree/generic/enums.py diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index d498a21143..d26006b44e 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -4,7 +4,6 @@ These models are 'generic' and do not fit a particular business logic object. """ import base64 -import enum import hashlib import hmac import json @@ -47,6 +46,7 @@ import InvenTree.models import InvenTree.ready import users.models from common.setting.type import InvenTreeSettingsKeyType, SettingsKeyType +from generic.enums import StringEnum from generic.states import ColorEnum from generic.states.custom import state_color_mappings from InvenTree.cache import get_session_cache, set_session_cache @@ -2354,13 +2354,9 @@ class DataOutput(models.Model): errors: JSON field for storing any errors generated during the data output generation process """ - class DataOutputTypes(str, enum.Enum): + class DataOutputTypes(StringEnum): """Enum for data output types.""" - def __str__(self): - """Return the string representation of the data output type.""" - return str(self.value) - LABEL = 'label' REPORT = 'report' EXPORT = 'export' diff --git a/src/backend/InvenTree/generic/enums.py b/src/backend/InvenTree/generic/enums.py new file mode 100644 index 0000000000..6bad2d52b9 --- /dev/null +++ b/src/backend/InvenTree/generic/enums.py @@ -0,0 +1,15 @@ +"""Generic enum type definitions.""" + +import enum + + +class StringEnum(str, enum.Enum): + """Base class for string-based enumerations.""" + + def __str__(self): + """Return the string representation of the enumeration value.""" + return str(self.value) + + def __repr__(self): + """Return the string representation of the enumeration value.""" + return str(self.value) diff --git a/src/backend/InvenTree/generic/events.py b/src/backend/InvenTree/generic/events.py index 496cf12ee5..4adf0ff3ee 100644 --- a/src/backend/InvenTree/generic/events.py +++ b/src/backend/InvenTree/generic/events.py @@ -1,11 +1,7 @@ """Generic event enumerations for InvenTree.""" -import enum +from generic.enums import StringEnum -class BaseEventEnum(str, enum.Enum): +class BaseEventEnum(StringEnum): """Base class for representing a set of 'events'.""" - - def __str__(self): - """Return the string representation of the event.""" - return str(self.value) diff --git a/src/backend/InvenTree/plugin/plugin.py b/src/backend/InvenTree/plugin/plugin.py index 2ba7de00b9..f3c8f02f1e 100644 --- a/src/backend/InvenTree/plugin/plugin.py +++ b/src/backend/InvenTree/plugin/plugin.py @@ -1,6 +1,5 @@ """Base Class for InvenTree plugins.""" -import enum import inspect import warnings from datetime import datetime @@ -16,18 +15,15 @@ from django.utils.translation import gettext_lazy as _ import structlog import InvenTree.helpers +from generic.enums import StringEnum from plugin.helpers import get_git_log logger = structlog.get_logger('inventree') -class PluginMixinEnum(str, enum.Enum): +class PluginMixinEnum(StringEnum): """Enumeration of the available plugin mixin types.""" - def __str__(self): - """Return the string representation of the mixin.""" - return self.value - BASE = 'base' ACTION = 'action' diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index 3668508d21..05897d875d 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -1,18 +1,14 @@ """Ruleset definitions which control the InvenTree user permissions.""" -import enum - from django.conf import settings from django.utils.translation import gettext_lazy as _ +from generic.enums import StringEnum -class RuleSetEnum(str, enum.Enum): + +class RuleSetEnum(StringEnum): """Enumeration of ruleset names.""" - def __str__(self): - """Return the string representation of the ruleset.""" - return str(self.value) - ADMIN = 'admin' PART_CATEGORY = 'part_category' PART = 'part'