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 os
import tempfile import tempfile
from os.path import abspath, dirname, join, normcase, sep from os.path import abspath, dirname, join, normcase, sep
from pathlib import Path
from django.core.exceptions import SuspiciousFileOperation from django.core.exceptions import SuspiciousFileOperation
@ -47,3 +48,12 @@ def symlinks_supported():
except (OSError, NotImplementedError): except (OSError, NotImplementedError):
supported = False supported = False
return supported 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 os
import unittest import unittest
from pathlib import Path
from django.core.exceptions import SuspiciousFileOperation 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): class SafeJoinTests(unittest.TestCase):
@ -29,3 +30,14 @@ class SafeJoinTests(unittest.TestCase):
def test_parent_path(self): def test_parent_path(self):
with self.assertRaises(SuspiciousFileOperation): with self.assertRaises(SuspiciousFileOperation):
safe_join("/abc/", "../def") 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)