Introduced environ_required parameter for Value class. Refs #118.

This commit is contained in:
Jannis Leidel 2015-08-09 14:54:55 +02:00
parent 8ba1804ff2
commit 010067b433
3 changed files with 18 additions and 2 deletions

View file

@ -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 '

View file

@ -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()

View file

@ -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()