Browse Source

[cache] Fix writing to paths with unicode characters

* Use "compat_getenv"
* "write_json_file" now expects the filename to be a string
totalwebcasting
Jaime Marquínez Ferrándiz 10 years ago
parent
commit
92120217eb
3 changed files with 4 additions and 3 deletions
  1. +1
    -1
      youtube_dl/YoutubeDL.py
  2. +2
    -2
      youtube_dl/cache.py
  3. +1
    -0
      youtube_dl/utils.py

+ 1
- 1
youtube_dl/YoutubeDL.py View File

@ -1001,7 +1001,7 @@ class YoutubeDL(object):
else: else:
self.to_screen('[info] Writing video description metadata as JSON to: ' + infofn) self.to_screen('[info] Writing video description metadata as JSON to: ' + infofn)
try: try:
write_json_file(info_dict, encodeFilename(infofn))
write_json_file(info_dict, infofn)
except (OSError, IOError): except (OSError, IOError):
self.report_error('Cannot write metadata to JSON file ' + infofn) self.report_error('Cannot write metadata to JSON file ' + infofn)
return return


+ 2
- 2
youtube_dl/cache.py View File

@ -8,7 +8,7 @@ import re
import shutil import shutil
import traceback import traceback
from .compat import compat_expanduser
from .compat import compat_expanduser, compat_getenv
from .utils import write_json_file from .utils import write_json_file
@ -19,7 +19,7 @@ class Cache(object):
def _get_root_dir(self): def _get_root_dir(self):
res = self._ydl.params.get('cachedir') res = self._ydl.params.get('cachedir')
if res is None: 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') res = os.path.join(cache_root, 'youtube-dl')
return compat_expanduser(res) return compat_expanduser(res)


+ 1
- 0
youtube_dl/utils.py View File

@ -73,6 +73,7 @@ def preferredencoding():
def write_json_file(obj, fn): def write_json_file(obj, fn):
""" Encode obj as JSON and write it to fn, atomically """ """ Encode obj as JSON and write it to fn, atomically """
fn = encodeFilename(fn)
if sys.version_info < (3, 0): if sys.version_info < (3, 0):
encoding = get_filesystem_encoding() encoding = get_filesystem_encoding()
# os.path.basename returns a bytes object, but NamedTemporaryFile # os.path.basename returns a bytes object, but NamedTemporaryFile


Loading…
Cancel
Save