Refs #30461 -- Added django.utils._os.to_path().

This commit is contained in:
Claude Paroz 2019-08-10 11:28:00 +02:00 committed by Mariusz Felisiak
parent c19ad2da4b
commit 88c0b907e7
2 changed files with 23 additions and 1 deletions

View File

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

View File

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