[cache] Fix writing to paths with unicode characters
authorJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Tue, 18 Nov 2014 22:28:42 +0000 (23:28 +0100)
committerJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Tue, 18 Nov 2014 23:02:24 +0000 (00:02 +0100)
* Use "compat_getenv"
* "write_json_file" now expects the filename to be a string

youtube_dl/YoutubeDL.py
youtube_dl/cache.py
youtube_dl/utils.py

index 5c875b4972f61e2ce925c40d13a94fa53fb059d3..94c50903c737ea298b44e772b55500766b2f904b 100755 (executable)
@@ -1001,7 +1001,7 @@ class YoutubeDL(object):
             else:
                 self.to_screen('[info] Writing video description metadata as JSON to: ' + infofn)
                 try:
-                    write_json_file(info_dict, encodeFilename(infofn))
+                    write_json_file(info_dict, infofn)
                 except (OSError, IOError):
                     self.report_error('Cannot write metadata to JSON file ' + infofn)
                     return
index 2d9b426cb5e1d33bd64015a0d47ba80a5074403c..5fe839eb1269586db95b9e25b4c8dabcdcd965d9 100644 (file)
@@ -8,7 +8,7 @@ import re
 import shutil
 import traceback
 
-from .compat import compat_expanduser
+from .compat import compat_expanduser, compat_getenv
 from .utils import write_json_file
 
 
@@ -19,7 +19,7 @@ class Cache(object):
     def _get_root_dir(self):
         res = self._ydl.params.get('cachedir')
         if res is None:
-            cache_root = os.environ.get('XDG_CACHE_HOME', '~/.cache')
+            cache_root = compat_getenv('XDG_CACHE_HOME', '~/.cache')
             res = os.path.join(cache_root, 'youtube-dl')
         return compat_expanduser(res)
 
index 50e515a04a71d76aec89cf313aca9b74c10045ec..94b496dd0a693ae61997881458e1e202a184a330 100644 (file)
@@ -73,6 +73,7 @@ def preferredencoding():
 def write_json_file(obj, fn):
     """ Encode obj as JSON and write it to fn, atomically """
 
+    fn = encodeFilename(fn)
     if sys.version_info < (3, 0):
         encoding = get_filesystem_encoding()
         # os.path.basename returns a bytes object, but NamedTemporaryFile