mirror of
https://github.com/jazzband/django-configurations.git
synced 2026-03-16 22:20:27 +00:00
Introduced environ_required parameter for Value class. Refs #118.
This commit is contained in:
parent
8ba1804ff2
commit
010067b433
3 changed files with 18 additions and 2 deletions
|
|
@ -27,6 +27,7 @@ class Value(object):
|
|||
"""
|
||||
multiple = False
|
||||
late_binding = False
|
||||
environ_required = False
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
|
|
@ -57,7 +58,8 @@ class Value(object):
|
|||
return instance
|
||||
|
||||
def __init__(self, default=None, environ=True, environ_name=None,
|
||||
environ_prefix='DJANGO', *args, **kwargs):
|
||||
environ_prefix='DJANGO', environ_required=False,
|
||||
*args, **kwargs):
|
||||
if isinstance(default, Value) and default.default is not None:
|
||||
self.default = copy.copy(default.default)
|
||||
else:
|
||||
|
|
@ -67,6 +69,7 @@ class Value(object):
|
|||
environ_prefix = environ_prefix[:-1]
|
||||
self.environ_prefix = environ_prefix
|
||||
self.environ_name = environ_name
|
||||
self.environ_required = environ_required
|
||||
|
||||
def __str__(self):
|
||||
return str(self.value)
|
||||
|
|
@ -92,6 +95,10 @@ class Value(object):
|
|||
full_environ_name = self.full_environ_name(name)
|
||||
if full_environ_name in os.environ:
|
||||
value = self.to_python(os.environ[full_environ_name])
|
||||
elif self.environ_required:
|
||||
raise ValueError('Value {0!r} is required to be set as the '
|
||||
'environment variable {1!r}'
|
||||
.format(name, full_environ_name))
|
||||
self.value = value
|
||||
return value
|
||||
|
||||
|
|
@ -378,6 +385,7 @@ class SecretValue(Value):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['environ'] = True
|
||||
kwargs['environ_required'] = True
|
||||
super(SecretValue, self).__init__(*args, **kwargs)
|
||||
if self.default is not None:
|
||||
raise ValueError('Secret values are only allowed to '
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ the prefix.
|
|||
``Value`` class
|
||||
---------------
|
||||
|
||||
.. class:: Value(default, [environ=True, environ_name=None, environ_prefix='DJANGO'])
|
||||
.. class:: Value(default, [environ=True, environ_name=None, environ_prefix='DJANGO', environ_required=False])
|
||||
|
||||
The ``Value`` class takes one required and several optional parameters.
|
||||
|
||||
|
|
@ -147,9 +147,11 @@ the prefix.
|
|||
:param environ: toggle for environment use
|
||||
:param environ_name: name of environment variable to look for
|
||||
:param environ_prefix: prefix to use when looking for environment variable
|
||||
:param environ_required: wheter or not the value is required to be set as an environment variable
|
||||
:type environ: bool
|
||||
:type environ_name: capitalized string or None
|
||||
:type environ_prefix: capitalized string
|
||||
:type environ_required: bool
|
||||
|
||||
The ``default`` parameter is effectively the value the setting has
|
||||
right now in your ``settings.py``.
|
||||
|
|
@ -538,6 +540,11 @@ Other values
|
|||
|
||||
:raises: ``ValueError`` when given a default value
|
||||
|
||||
.. versionchanged:: 1.0
|
||||
|
||||
This value class has the ``environ_required`` parameter turned to
|
||||
``True``.
|
||||
|
||||
::
|
||||
|
||||
SECRET_KEY = values.SecretValue()
|
||||
|
|
|
|||
|
|
@ -336,6 +336,7 @@ class ValueTests(TestCase):
|
|||
self.assertEqual(value.setup('TEST'), '/does/not/exist')
|
||||
|
||||
def test_secret_value(self):
|
||||
# no default allowed, only environment values are
|
||||
self.assertRaises(ValueError, SecretValue, 'default')
|
||||
|
||||
value = SecretValue()
|
||||
|
|
|
|||
Loading…
Reference in a new issue