Refs #28428 -- Made filepath_to_uri() support pathlib.Path.
This commit is contained in:
parent
4c762588ff
commit
6315a272c5
|
@ -253,7 +253,7 @@ def filepath_to_uri(path):
|
|||
return path
|
||||
# I know about `os.sep` and `os.altsep` but I want to leave
|
||||
# some flexibility for hardcoding separators.
|
||||
return quote(path.replace("\\", "/"), safe="/~!*()'")
|
||||
return quote(str(path).replace("\\", "/"), safe="/~!*()'")
|
||||
|
||||
|
||||
def get_system_encoding():
|
||||
|
|
|
@ -280,7 +280,8 @@ The functions defined in this module share the following properties:
|
|||
.. function:: filepath_to_uri(path)
|
||||
|
||||
Convert a file system path to a URI portion that is suitable for inclusion
|
||||
in a URL. The path is assumed to be either UTF-8 bytes or string.
|
||||
in a URL. The path is assumed to be either UTF-8 bytes, string, or a
|
||||
:class:`~pathlib.Path`.
|
||||
|
||||
This method will encode certain characters that would normally be
|
||||
recognized as special characters for URIs. Note that this method does not
|
||||
|
@ -289,6 +290,10 @@ The functions defined in this module share the following properties:
|
|||
|
||||
Returns an ASCII string containing the encoded result.
|
||||
|
||||
.. versionchanged:: 3.1
|
||||
|
||||
Support for :class:`pathlib.Path` ``path`` was added.
|
||||
|
||||
.. function:: escape_uri_path(path)
|
||||
|
||||
Escapes the unsafe characters from the path portion of a Uniform Resource
|
||||
|
|
|
@ -214,6 +214,12 @@ URLs
|
|||
|
||||
* ...
|
||||
|
||||
Utilities
|
||||
~~~~~~~~~
|
||||
|
||||
* :func:`~django.utils.encoding.filepath_to_uri` now supports
|
||||
:class:`pathlib.Path`.
|
||||
|
||||
Validators
|
||||
~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import datetime
|
||||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
|
@ -106,6 +107,8 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
|
|||
def test_filepath_to_uri(self):
|
||||
self.assertIsNone(filepath_to_uri(None))
|
||||
self.assertEqual(filepath_to_uri('upload\\чубака.mp4'), 'upload/%D1%87%D1%83%D0%B1%D0%B0%D0%BA%D0%B0.mp4')
|
||||
self.assertEqual(filepath_to_uri(Path('upload/test.png')), 'upload/test.png')
|
||||
self.assertEqual(filepath_to_uri(Path('upload\\test.png')), 'upload/test.png')
|
||||
|
||||
def test_iri_to_uri(self):
|
||||
cases = [
|
||||
|
|
Loading…
Reference in New Issue