Refs #28428 -- Made filepath_to_uri() support pathlib.Path.

This commit is contained in:
Hasan Ramezani 2019-10-29 21:15:18 +01:00 committed by Mariusz Felisiak
parent 4c762588ff
commit 6315a272c5
4 changed files with 16 additions and 2 deletions

View File

@ -253,7 +253,7 @@ def filepath_to_uri(path):
return path return path
# I know about `os.sep` and `os.altsep` but I want to leave # I know about `os.sep` and `os.altsep` but I want to leave
# some flexibility for hardcoding separators. # some flexibility for hardcoding separators.
return quote(path.replace("\\", "/"), safe="/~!*()'") return quote(str(path).replace("\\", "/"), safe="/~!*()'")
def get_system_encoding(): def get_system_encoding():

View File

@ -280,7 +280,8 @@ The functions defined in this module share the following properties:
.. function:: filepath_to_uri(path) .. function:: filepath_to_uri(path)
Convert a file system path to a URI portion that is suitable for inclusion 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 This method will encode certain characters that would normally be
recognized as special characters for URIs. Note that this method does not 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. Returns an ASCII string containing the encoded result.
.. versionchanged:: 3.1
Support for :class:`pathlib.Path` ``path`` was added.
.. function:: escape_uri_path(path) .. function:: escape_uri_path(path)
Escapes the unsafe characters from the path portion of a Uniform Resource Escapes the unsafe characters from the path portion of a Uniform Resource

View File

@ -214,6 +214,12 @@ URLs
* ... * ...
Utilities
~~~~~~~~~
* :func:`~django.utils.encoding.filepath_to_uri` now supports
:class:`pathlib.Path`.
Validators Validators
~~~~~~~~~~ ~~~~~~~~~~

View File

@ -1,6 +1,7 @@
import datetime import datetime
import sys import sys
import unittest import unittest
from pathlib import Path
from unittest import mock from unittest import mock
from urllib.parse import quote_plus from urllib.parse import quote_plus
@ -106,6 +107,8 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
def test_filepath_to_uri(self): def test_filepath_to_uri(self):
self.assertIsNone(filepath_to_uri(None)) 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('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): def test_iri_to_uri(self):
cases = [ cases = [