mirror of
https://github.com/jazzband/django-configurations.git
synced 2026-05-19 13:01:09 +00:00
Uses pathlib.Path in PathValue
This commit is contained in:
parent
d89fe5a2cb
commit
b4764ed903
2 changed files with 23 additions and 10 deletions
|
|
@ -3,6 +3,7 @@ import copy
|
|||
import decimal
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from django.core import validators
|
||||
from django.core.exceptions import ValidationError, ImproperlyConfigured
|
||||
|
|
@ -391,14 +392,15 @@ class RegexValue(ValidationMixin, Value):
|
|||
class PathValue(Value):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.check_exists = kwargs.pop('check_exists', True)
|
||||
self.use_pathlib = kwargs.pop('use_pathlib', True)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def setup(self, name):
|
||||
value = super().setup(name)
|
||||
value = os.path.expanduser(value)
|
||||
if self.check_exists and not os.path.exists(value):
|
||||
value = Path(value).expanduser()
|
||||
if self.check_exists and not value.exists():
|
||||
raise ValueError('Path {0!r} does not exist.'.format(value))
|
||||
return os.path.abspath(value)
|
||||
return value.absolute() if self.use_pathlib else str(value)
|
||||
|
||||
|
||||
class SecretValue(Value):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import decimal
|
||||
import os
|
||||
from contextlib import contextmanager
|
||||
from pathlib import Path
|
||||
|
||||
from django.test import TestCase
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
|
@ -335,22 +336,32 @@ class ValueTests(TestCase):
|
|||
def test_path_values_with_check(self):
|
||||
value = PathValue()
|
||||
with env(DJANGO_TEST='/'):
|
||||
self.assertEqual(value.setup('TEST'), '/')
|
||||
self.assertEqual(value.setup('TEST'), Path('/'))
|
||||
with env(DJANGO_TEST='~/'):
|
||||
self.assertEqual(value.setup('TEST'), os.path.expanduser('~'))
|
||||
self.assertEqual(value.setup('TEST'), Path.home())
|
||||
with env(DJANGO_TEST='/does/not/exist'):
|
||||
self.assertRaises(ValueError, value.setup, 'TEST')
|
||||
|
||||
def test_path_values_no_check(self):
|
||||
value = PathValue(check_exists=False)
|
||||
with env(DJANGO_TEST='/'):
|
||||
self.assertEqual(value.setup('TEST'), '/')
|
||||
self.assertEqual(value.setup('TEST'), Path('/'))
|
||||
with env(DJANGO_TEST='~/spam/eggs'):
|
||||
self.assertEqual(value.setup('TEST'),
|
||||
os.path.join(os.path.expanduser('~'),
|
||||
'spam', 'eggs'))
|
||||
self.assertEqual(
|
||||
value.setup('TEST'),
|
||||
Path.home() / 'spam' / 'eggs'
|
||||
)
|
||||
with env(DJANGO_TEST='/does/not/exist'):
|
||||
self.assertEqual(value.setup('TEST'), '/does/not/exist')
|
||||
self.assertEqual(value.setup('TEST'), Path('/does/not/exist'))
|
||||
|
||||
def test_path_values_without_pathlib(self):
|
||||
value = PathValue(use_pathlib=False)
|
||||
with env(DJANGO_TEST='/'):
|
||||
self.assertEqual(value.setup('TEST'), '/')
|
||||
with env(DJANGO_TEST='~/'):
|
||||
self.assertEqual(value.setup('TEST'), os.path.expanduser('~'))
|
||||
with env(DJANGO_TEST='/does/not/exist'):
|
||||
self.assertRaises(ValueError, value.setup, 'TEST')
|
||||
|
||||
def test_secret_value(self):
|
||||
# no default allowed, only environment values are
|
||||
|
|
|
|||
Loading…
Reference in a new issue