diff options
| author | Claude Paroz <claude@2xlibre.net> | 2019-08-10 11:28:00 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-08-13 17:17:39 +0200 |
| commit | 88c0b907e76bccfe1a25dc6580272b07aebd45d6 (patch) | |
| tree | b5c2d75e90c28d279ffde81bcfe4abdd2f4913de | |
| parent | c19ad2da4b573431843e5cead77f4139e29c77a0 (diff) | |
Refs #30461 -- Added django.utils._os.to_path().
| -rw-r--r-- | django/utils/_os.py | 10 | ||||
| -rw-r--r-- | tests/utils_tests/test_os_utils.py | 14 |
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) |
