From d4bc770ad7449b479c20ba2744f6111a4b5c45f2 Mon Sep 17 00:00:00 2001 From: awais qureshi Date: Sat, 9 Aug 2025 13:17:29 +0500 Subject: [PATCH] fix: Correctly handle Django lazy translation objects. If `value` is an instance of `Promise`, it is now explicitly converted to a string using `str(value)`. --- .../util/management/commands/dump_settings.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/openedx/core/djangoapps/util/management/commands/dump_settings.py b/openedx/core/djangoapps/util/management/commands/dump_settings.py index 965ea16c6d27..5d667c313687 100644 --- a/openedx/core/djangoapps/util/management/commands/dump_settings.py +++ b/openedx/core/djangoapps/util/management/commands/dump_settings.py @@ -7,7 +7,7 @@ from django.conf import settings from django.core.management.base import BaseCommand - +from django.utils.functional import Promise SETTING_NAME_REGEX = re.compile(r'^[A-Z][A-Z0-9_]*$') @@ -78,10 +78,11 @@ def _to_json_friendly_repr(value: object) -> object: if not isinstance(subkey, (str, int)): raise ValueError(f"Unexpected dict key {subkey} of type {type(subkey)}") return {subkey: _to_json_friendly_repr(subval) for subkey, subval in value.items()} - if proxy_args := getattr(value, "_proxy____args", None): - if len(proxy_args) == 1 and isinstance(proxy_args[0], str): - # Print gettext_lazy as simply the wrapped string - return proxy_args[0] + + # Directly convert Promise objects (gettext_lazy) to their string representation + if isinstance(value, Promise): + return str(value) + try: module = value.__module__ qualname = value.__qualname__