summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2019-08-10 11:28:00 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-08-13 17:17:39 +0200
commit88c0b907e76bccfe1a25dc6580272b07aebd45d6 (patch)
treeb5c2d75e90c28d279ffde81bcfe4abdd2f4913de
parentc19ad2da4b573431843e5cead77f4139e29c77a0 (diff)
Refs #30461 -- Added django.utils._os.to_path().
-rw-r--r--django/utils/_os.py10
-rw-r--r--tests/utils_tests/test_os_utils.py14
2 files changed, 23 insertions, 1 deletions
diff --git a/django/utils/_os.py b/django/utils/_os.py
index c901d584c1..b2a2a9d426 100644
--- a/django/utils/_os.py
+++ b/django/utils/_os.py
@@ -1,6 +1,7 @@
import os
import tempfile
from os.path import abspath, dirname, join, normcase, sep
+from pathlib import Path
from django.core.exceptions import SuspiciousFileOperation
@@ -47,3 +48,12 @@ def symlinks_supported():
except (OSError, NotImplementedError):
supported = False
return supported
+
+
+def to_path(value):
+ """Convert value to a pathlib.Path instance, if not already a Path."""
+ if isinstance(value, Path):
+ return value
+ elif not isinstance(value, str):
+ raise TypeError('Invalid path type: %s' % type(value).__name__)
+ return Path(value)
diff --git a/tests/utils_tests/test_os_utils.py b/tests/utils_tests/test_os_utils.py
index e1bc3e5d83..76c0eda944 100644
--- a/tests/utils_tests/test_os_utils.py
+++ b/tests/utils_tests/test_os_utils.py
@@ -1,8 +1,9 @@
import os
import unittest
+from pathlib import Path
from django.core.exceptions import SuspiciousFileOperation
-from django.utils._os import safe_join
+from django.utils._os import safe_join, to_path
class SafeJoinTests(unittest.TestCase):
@@ -29,3 +30,14 @@ class SafeJoinTests(unittest.TestCase):
def test_parent_path(self):
with self.assertRaises(SuspiciousFileOperation):
safe_join("/abc/", "../def")
+
+
+class ToPathTests(unittest.TestCase):
+ def test_to_path(self):
+ for path in ('/tmp/some_file.txt', Path('/tmp/some_file.txt')):
+ with self.subTest(path):
+ self.assertEqual(to_path(path), Path('/tmp/some_file.txt'))
+
+ def test_to_path_invalid_value(self):
+ with self.assertRaises(TypeError):
+ to_path(42)