This fixes the following failure:
ERROR: test_cache_url_value (tests.test_values.ValueTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "…/django-configurations/configurations/values.py", line 158, in to_python
return self._caster(value)
File "…/django-configurations/.tox/py34-dj18/lib/python3.4/site-packages/django_cache_url.py", line 98, in parse
config['LOCATION'] = "%s:%s:%s" % (url.hostname, url.port, db)
File "…/pyenv/3.4.3/lib/python3.4/urllib/parse.py", line 156, in port
port = int(port, 10)
ValueError: invalid literal for int() with base 10: 'port'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "…/django-configurations/tests/test_values.py", line 415, in test_cache_url_value
value = CacheURLValue(cache_url)
File "…/django-configurations/configurations/values.py", line 420, in __init__
self.default = self.to_python(self.default)
File "…/django-configurations/configurations/values.py", line 423, in to_python
value = super(DictBackendMixin, self).to_python(value)
File "…/django-configurations/configurations/values.py", line 160, in to_python
raise ValueError(self.message.format(value))
ValueError: Cannot interpret cache URL value 'redis://user@host:port/1'
----------------------------------------------------------------------
Ran 63 tests in 1.132s
FAILED (errors=1)
Allows value setting to work when checking if setting variable is within
a list, i.e: settings.database in ['default', 'other']
Signed-off-by: Jannis Leidel <jannis@leidel.info>
When assigning False to a BooleanValue and reusing it was raising a
ValueError exception because BooleanValue was evaluating False as None.
Thanks to @abbottc for catching this error.
- this enables a value to load from environment if the env variable name is given at construction time
- cache value of environment value now in property value
- add __new__ to allow a construction of a given type from environment directly. In this case now Value instance is constructed but an instance of the desired type that is covered by the Value implementation. For Value it is str, for DictValue it is dict etc.
- extend tests for this new behavior
- extend test coverage for some other places