Allow settings to serialize lazy translations.
This commit is contained in:
@@ -3,6 +3,8 @@ from __future__ import unicode_literals
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.utils.functional import Promise, allow_lazy
|
||||||
|
from django.utils.encoding import force_text
|
||||||
|
|
||||||
|
|
||||||
class Namespace(object):
|
class Namespace(object):
|
||||||
@@ -32,6 +34,17 @@ class Namespace(object):
|
|||||||
|
|
||||||
|
|
||||||
class Setting(object):
|
class Setting(object):
|
||||||
|
@staticmethod
|
||||||
|
def serialize_value(value):
|
||||||
|
if isinstance(value, Promise):
|
||||||
|
value = force_text(value)
|
||||||
|
|
||||||
|
return yaml.safe_dump(value, allow_unicode=True)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def deserialize_value(value):
|
||||||
|
return yaml.safe_load(value)
|
||||||
|
|
||||||
def __init__(self, namespace, global_name, default, help_text=None, is_path=False):
|
def __init__(self, namespace, global_name, default, help_text=None, is_path=False):
|
||||||
self.global_name = global_name
|
self.global_name = global_name
|
||||||
self.default = default
|
self.default = default
|
||||||
@@ -46,18 +59,14 @@ class Setting(object):
|
|||||||
@property
|
@property
|
||||||
def serialized_value(self):
|
def serialized_value(self):
|
||||||
if not self.yaml:
|
if not self.yaml:
|
||||||
self.yaml = yaml.safe_dump(getattr(settings, self.global_name, self.default), allow_unicode=True)
|
self.yaml = Setting.serialize_value(getattr(settings, self.global_name, self.default))
|
||||||
|
|
||||||
return self.yaml
|
return self.yaml
|
||||||
|
|
||||||
@serialized_value.setter
|
|
||||||
def serialized_value(self, value):
|
|
||||||
self.yaml = value
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def value(self):
|
def value(self):
|
||||||
return yaml.safe_load(self.serialized_value)
|
return Setting.deserialize_value(self.serialized_value)
|
||||||
|
|
||||||
@value.setter
|
@value.setter
|
||||||
def value(self, value):
|
def value(self, value):
|
||||||
self.serialized_value = value
|
self.yaml = value
|
||||||
|
|||||||
Reference in New Issue
Block a user