[cache] Fix writing to paths with unicode characters
* Use "compat_getenv" * "write_json_file" now expects the filename to be a string
This commit is contained in:
parent
37eddd3143
commit
92120217eb
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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…
Reference in New Issue
Block a user