diff options
| author | Claude Paroz <claude@2xlibre.net> | 2013-03-22 17:55:12 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2013-03-22 17:58:36 +0100 |
| commit | deec020bf5927abbdd667912f80794c32c03e609 (patch) | |
| tree | 384ebba3b5ddbf35c9fdf4983be4176ec8702137 | |
| parent | dd897e4eeb20cab9ac708c46f34c5f09758205c8 (diff) | |
[1.5.x] Fixed #20108 -- Fixed filepath_to_uri decoding error
This was a regression due to unicode_literals usage. Thanks Ivan
Virabyan for the report and the initial patch.
Backport of 164528acc8 from master.
| -rw-r--r-- | django/utils/encoding.py | 2 | ||||
| -rw-r--r-- | tests/regressiontests/utils/encoding.py | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/django/utils/encoding.py b/django/utils/encoding.py index 15215849b2..f08d417e93 100644 --- a/django/utils/encoding.py +++ b/django/utils/encoding.py @@ -232,7 +232,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(force_bytes(path.replace("\\", "/")), safe=b"/~!*()'") + return quote(force_bytes(path).replace(b"\\", b"/"), safe=b"/~!*()'") # The encoding of the default system locale but falls back to the # given fallback encoding if the encoding is unsupported by python or could diff --git a/tests/regressiontests/utils/encoding.py b/tests/regressiontests/utils/encoding.py index d191845518..7aaba25a7a 100644 --- a/tests/regressiontests/utils/encoding.py +++ b/tests/regressiontests/utils/encoding.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils import unittest -from django.utils.encoding import force_bytes +from django.utils.encoding import force_bytes, filepath_to_uri class TestEncodingUtils(unittest.TestCase): @@ -15,3 +15,9 @@ class TestEncodingUtils(unittest.TestCase): exc = ValueError(error_msg) result = force_bytes(exc) self.assertEqual(result, error_msg.encode('utf-8')) + + def test_filepath_to_uri(self): + 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'.encode('utf-8')), + 'upload/%D1%87%D1%83%D0%B1%D0%B0%D0%BA%D0%B0.mp4') |
