[BUGFIX] Fix usage of ~ in paths (#981)
Fixes path with tildes in them, i.e. `~/videos/youtube`
This commit is contained in:
parent
64d3082a8a
commit
325d229061
5 changed files with 37 additions and 4 deletions
|
|
@ -716,7 +716,7 @@ to_native_filepath
|
||||||
:spec: ``to_native_filepath(filepath: String) -> String``
|
:spec: ``to_native_filepath(filepath: String) -> String``
|
||||||
|
|
||||||
Convert any unix-based path separators ('/') with the OS's native
|
Convert any unix-based path separators ('/') with the OS's native
|
||||||
separator.
|
separator. In addition, expand ~ to absolute directories.
|
||||||
|
|
||||||
truncate_filepath_if_too_long
|
truncate_filepath_if_too_long
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import os
|
||||||
|
import posixpath
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
@ -147,7 +149,8 @@ class ConfigOptions(StrictDictValidator):
|
||||||
The directory to temporarily store downloaded files before moving them into their final
|
The directory to temporarily store downloaded files before moving them into their final
|
||||||
directory. Defaults to .ytdl-sub-working-directory
|
directory. Defaults to .ytdl-sub-working-directory
|
||||||
"""
|
"""
|
||||||
return self._working_directory.value
|
# Expands tildas to actual paths, use native os sep
|
||||||
|
return os.path.expanduser(self._working_directory.value.replace(posixpath.sep, os.sep))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def umask(self) -> Optional[str]:
|
def umask(self) -> Optional[str]:
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,9 @@ class CustomFunctions:
|
||||||
def to_native_filepath(filepath: String) -> String:
|
def to_native_filepath(filepath: String) -> String:
|
||||||
"""
|
"""
|
||||||
Convert any unix-based path separators ('/') with the OS's native
|
Convert any unix-based path separators ('/') with the OS's native
|
||||||
separator.
|
separator. In addition, expand ~ to absolute directories.
|
||||||
"""
|
"""
|
||||||
return String(filepath.value.replace(posixpath.sep, os.sep))
|
return String(os.path.expanduser(filepath.value.replace(posixpath.sep, os.sep)))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def truncate_filepath_if_too_long(filepath: String) -> String:
|
def truncate_filepath_if_too_long(filepath: String) -> String:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
import os.path
|
||||||
import re
|
import re
|
||||||
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
|
@ -94,6 +96,18 @@ class TestConfigFilePartiallyValidatesPresets:
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_config_file_working_dir_home_dir(self):
|
||||||
|
out = ConfigFile(
|
||||||
|
name="test_tilda",
|
||||||
|
value={
|
||||||
|
"configuration": {"working_directory": "~/working/dir"},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert out.config_options.working_directory == str(
|
||||||
|
Path(os.path.expanduser("~")) / "working" / "dir"
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"preset_dict",
|
"preset_dict",
|
||||||
[
|
[
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
import os.path
|
||||||
import re
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
@ -37,6 +39,20 @@ class TestPreset:
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_preset_with_output_directory_tilda(self, config_file, output_options, youtube_video):
|
||||||
|
out = Preset(
|
||||||
|
config=config_file,
|
||||||
|
name="test",
|
||||||
|
value={
|
||||||
|
"download": youtube_video,
|
||||||
|
"output_options": {"output_directory": "~/output/dir", "file_name": "{dne_var}"},
|
||||||
|
"overrides": {"dne_var": "not dne"},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert out.overrides.apply_formatter(out.output_options.output_directory) == str(
|
||||||
|
Path(os.path.expanduser("~")) / "output" / "dir"
|
||||||
|
)
|
||||||
|
|
||||||
def test_preset_parent(self, config_file, output_options, youtube_video):
|
def test_preset_parent(self, config_file, output_options, youtube_video):
|
||||||
preset = Preset(
|
preset = Preset(
|
||||||
config=config_file,
|
config=config_file,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue