Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added '--add-description' option #459

Merged
merged 10 commits into from
Jul 26, 2024
1 change: 1 addition & 0 deletions README.md
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ scdl me -f
--auth-token [token] Specify the auth token to use
--overwrite Overwrite file if it already exists
--strict-playlist Abort playlist downloading if one track fails to download
--add-description Adds the description to a seperate txt file (can be read by some players)
--no-playlist Skip downloading playlists
--opus Prefer downloading opus streams over mp3 streams
```
Expand Down
21 changes: 21 additions & 0 deletions scdl/scdl.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
[--original-name][--original-metadata][--no-original][--only-original]
[--name-format <format>][--strict-playlist][--playlist-name-format <format>]
[--client-id <id>][--auth-token <token>][--overwrite][--no-playlist][--opus]
[--add-description]

scdl -h | --help
scdl --version
Expand Down Expand Up @@ -68,6 +69,7 @@
--overwrite Overwrite file if it already exists
--strict-playlist Abort playlist downloading if one track fails to download
--no-playlist Skip downloading playlists
--add-description Adds the description to a separate txt file
--opus Prefer downloading opus streams over mp3 streams
"""

Expand Down Expand Up @@ -147,6 +149,7 @@
class SCDLArgs(TypedDict):
C: bool
a: bool
add_description: bool
addtimestamp: bool
addtofile: bool
auth_token: Optional[str]
Expand Down Expand Up @@ -1070,6 +1073,8 @@ def download_track(
files_to_keep.append(filename)

record_download_archive(track, kwargs)
if kwargs["add_description"]:
create_description_file(track.description, filename)

to_stdout = is_downloading_to_stdout(kwargs)

Expand Down Expand Up @@ -1111,6 +1116,22 @@ def can_convert(filename: str) -> bool:
return "wav" in ext or "aif" in ext


def create_description_file(description: Optional[str], filename: str) -> None:
"""
Creates txt file containing the description
"""
desc = description or ""
if desc:
try:
description_filename = pathlib.Path(filename).with_suffix(".txt")
with open(description_filename, "w", encoding="utf-8") as f:
f.write(desc)
logger.info("Created description txt file")
except OSError as ioe:
logger.error("Error trying to write description txt file...")
logger.error(ioe)


def already_downloaded(
track: Union[BasicTrack, Track],
title: str,
Expand Down
24 changes: 24 additions & 0 deletions tests/test_track.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from tests.utils import assert_not_track, assert_track, call_scdl_with_auth


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_original_download(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand Down Expand Up @@ -54,6 +55,7 @@ def test_mp3_to_stdout(tmp_path: Path) -> None:
assert_track(tmp_path, "track.mp3")


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_flac_to_stdout(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand All @@ -73,6 +75,7 @@ def test_flac_to_stdout(tmp_path: Path) -> None:
assert_track(tmp_path, "track.flac", "copy", "saves", None)


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_flac(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand All @@ -86,6 +89,7 @@ def test_flac(tmp_path: Path) -> None:
assert_track(tmp_path, "track.flac", "copy", "saves", None)


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_m4a(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand Down Expand Up @@ -163,6 +167,7 @@ def test_original_art(tmp_path: Path) -> None:
assert_track(tmp_path, "track.mp3", expected_artwork_len=3409)


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_original_name(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand All @@ -176,6 +181,7 @@ def test_original_name(tmp_path: Path) -> None:
assert_track(tmp_path, "original.wav", check_metadata=False)


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_original_metadata(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand All @@ -189,6 +195,7 @@ def test_original_metadata(tmp_path: Path) -> None:
assert_track(tmp_path, "track.wav", "og title", "og artist", "og genre", 0)


@pytest.mark.skipif(not os.getenv("AUTH_TOKEN"), reason="No auth token specified")
def test_force_metadata(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
Expand Down Expand Up @@ -378,3 +385,20 @@ def test_download_archive(tmp_path: Path) -> None:
)
assert r.returncode == 1
assert "already exists" in r.stderr


def test_description_file(tmp_path: Path) -> None:
os.chdir(tmp_path)
r = call_scdl_with_auth(
"-l",
"https://soundcloud.com/one-thousand-and-one/test-track",
"--name-format",
"track",
"--onlymp3",
"--add-description",
)
assert r.returncode == 0
desc_file = Path("./track.txt")
assert desc_file.exists()
with open(desc_file, encoding="utf-8") as f:
assert f.read().splitlines() == ["test description:", "9439290883"]
3 changes: 1 addition & 2 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ def call_scdl_with_auth(
*args: str,
encoding: Optional[str] = "utf-8",
) -> subprocess.CompletedProcess:
auth_token = os.getenv("AUTH_TOKEN")
assert auth_token
auth_token = os.getenv("AUTH_TOKEN", "")
args = ("scdl", *args, f"--auth-token={auth_token}", f"--client-id={client_id}")
return subprocess.run(
args,
Expand Down
Loading