Add console_script, load configs from config dir.

This commit is contained in:
mrsobakin 2024-08-13 21:30:16 +05:00
parent c8c8e36dfe
commit 6af4fc3948
No known key found for this signature in database
GPG key ID: 325CBF665E4FFD6E
4 changed files with 76 additions and 37 deletions

View file

@ -1,35 +1,3 @@
import argparse from lyrics_dl.main import main
from pathlib import Path
from lyrics_dl.config import LyricsDlConfig main()
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)

View file

@ -1,7 +1,22 @@
from typing import Self
import tomllib
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pathlib import Path 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 @dataclass
@ -18,3 +33,16 @@ class LyricsDlConfig:
order=config["providers"].pop("order"), order=config["providers"].pop("order"),
providers_configs=config["providers"], 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()

40
lyrics_dl/main.py Normal file
View file

@ -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)

View file

@ -2,12 +2,15 @@ from setuptools import setup
setup( setup(
name='lyrics_dl', 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.', description='An ultimate cli tool for downloading song lyrics, inspired by other awesome *-dl programs.',
packages=[ packages=[
"lyrics_dl", "lyrics_dl",
"lyrics_dl.providers", "lyrics_dl.providers",
], ],
entry_points={
'console_scripts': ['lyrics-dl=lyrics_dl:__main__'],
},
install_requires=[ install_requires=[
"httpx>=0.24.1", "httpx>=0.24.1",
"mutagen>=1.46.0", "mutagen>=1.46.0",