From 6af4fc394829dee3347e941c7eabbb15abf8d42c Mon Sep 17 00:00:00 2001 From: mrsobakin <68982655+mrsobakin@users.noreply.github.com> Date: Tue, 13 Aug 2024 21:30:16 +0500 Subject: [PATCH] Add `console_script`, load configs from config dir. --- lyrics_dl/__main__.py | 36 ++---------------------------------- lyrics_dl/config.py | 32 ++++++++++++++++++++++++++++++-- lyrics_dl/main.py | 40 ++++++++++++++++++++++++++++++++++++++++ setup.py | 5 ++++- 4 files changed, 76 insertions(+), 37 deletions(-) create mode 100644 lyrics_dl/main.py diff --git a/lyrics_dl/__main__.py b/lyrics_dl/__main__.py index 65df76e..ed334a4 100644 --- a/lyrics_dl/__main__.py +++ b/lyrics_dl/__main__.py @@ -1,35 +1,3 @@ -import argparse -from pathlib import Path +from lyrics_dl.main import main -from lyrics_dl.config import LyricsDlConfig -from lyrics_dl.logger import DefaultLogger -from lyrics_dl import LyricsDl - - -parser = argparse.ArgumentParser() -parser.add_argument("path", type=Path, help="Path to the song file or directory") -parser.add_argument("-c", "--config", type=Path, help="Config file for lyrics-dl") -parser.add_argument("-e", "--extensions", type=str, help="Music files extensions, separated by a comma. For example: wav,flac,mp3") -parser.add_argument("-f", "--force-override", action="store_true", help="Force override .lrc file, if it already exists") -args = parser.parse_args() - - -logger = DefaultLogger() - -if args.config: - config = LyricsDlConfig.from_file(args.config) -else: - config = LyricsDlConfig() - -lyrics_dl = LyricsDl(config=config, logger=logger) - - -if args.path.is_dir(): - if not args.extensions: - extensions = ["flac", "alac", "mp3", "m4a", "mp4", "aac", "wav", "opus", "ogg"] - else: - extensions = args.extensions.split(",") - - lyrics_dl.process_directory(args.path, extensions, args.force_override) -else: - lyrics_dl.process_file(args.path, args.force_override) +main() diff --git a/lyrics_dl/config.py b/lyrics_dl/config.py index e25a012..fbe4323 100644 --- a/lyrics_dl/config.py +++ b/lyrics_dl/config.py @@ -1,7 +1,22 @@ -from typing import Self -import tomllib from dataclasses import dataclass, field from pathlib import Path +from typing import Self +import os +import tomllib + +from lyrics_dl.logger import DefaultLogger + + +def _get_config_file() -> Path | None: + config_dir = os.environ.get("XDG_CONFIG_HOME") + + if config_dir is None: + return None + + return Path(config_dir) / "lyrics-dl" / "config.toml" + + +CONFIG_PATH = _get_config_file() @dataclass @@ -18,3 +33,16 @@ class LyricsDlConfig: order=config["providers"].pop("order"), providers_configs=config["providers"], ) + + @classmethod + def default(cls) -> Self: + try: + if CONFIG_PATH is not None: + return cls.from_file(CONFIG_PATH) + except FileNotFoundError: + DefaultLogger().warning( + f"Warning: Missing config file ({CONFIG_PATH})." + " Falling back to default parameters." + ) + + return cls() diff --git a/lyrics_dl/main.py b/lyrics_dl/main.py new file mode 100644 index 0000000..9e5c195 --- /dev/null +++ b/lyrics_dl/main.py @@ -0,0 +1,40 @@ +import argparse +from pathlib import Path + +from lyrics_dl.config import LyricsDlConfig +from lyrics_dl.logger import DefaultLogger +from lyrics_dl import LyricsDl + + +DEFAULT_EXTENSIONS = ["flac", "alac", "mp3", "m4a", "mp4", "aac", "wav", "opus", "ogg"] + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("path", type=Path, help="Path to the song file or directory") + parser.add_argument("-c", "--config", type=Path, help="Config file for lyrics-dl") + parser.add_argument("-e", "--extensions", type=str, help="Music files extensions, separated by a comma. For example: wav,flac,mp3") + parser.add_argument("-f", "--force-override", action="store_true", help="Force override .lrc file, if it already exists") + return parser.parse_args() + + +def main(): + args = parse_args() + logger = DefaultLogger() + + if args.config: + config = LyricsDlConfig.from_file(args.config) + else: + config = LyricsDlConfig.default() + + lyrics_dl = LyricsDl(config=config, logger=logger) + + if args.path.is_dir(): + if not args.extensions: + extensions = DEFAULT_EXTENSIONS + else: + extensions = args.extensions.split(",") + + lyrics_dl.process_directory(args.path, extensions, args.force_override) + else: + lyrics_dl.process_file(args.path, args.force_override) diff --git a/setup.py b/setup.py index ef46353..841f9b5 100644 --- a/setup.py +++ b/setup.py @@ -2,12 +2,15 @@ from setuptools import setup setup( name='lyrics_dl', - version='0.0.1', + version='0.0.2', description='An ultimate cli tool for downloading song lyrics, inspired by other awesome *-dl programs.', packages=[ "lyrics_dl", "lyrics_dl.providers", ], + entry_points={ + 'console_scripts': ['lyrics-dl=lyrics_dl:__main__'], + }, install_requires=[ "httpx>=0.24.1", "mutagen>=1.46.0",