Files
tiddl-gui/tiddl/cli/__init__.py
T
2025-09-22 16:36:21 +02:00

74 lines
2.0 KiB
Python

import click
import logging
from rich.logging import RichHandler
from tiddl.config import HOME_PATH
from tiddl.cli.ctx import ContextObj, passContext, Context
from tiddl.cli.auth import AuthGroup
from tiddl.cli.download import UrlGroup, FavGroup, SearchGroup, FileGroup
from tiddl.cli.config import ConfigCommand
from tiddl.cli.auth import refresh
@click.group()
@passContext
@click.option("--verbose", "-v", is_flag=True, help="Show debug logs.")
@click.option("--quiet", "-q", is_flag=True, help="Suppress logs.")
@click.option(
"--no-cache", "-nc", is_flag=True, help="Omit Tidal API requests caching."
)
def cli(ctx: Context, verbose: bool, quiet: bool, no_cache: bool):
"""TIDDL - Tidal Downloader \u266b"""
ctx.obj = ContextObj()
# latest logs
file_handler = logging.FileHandler(
HOME_PATH / "tiddl.log", mode="w", encoding="utf-8"
)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(
logging.Formatter(
"%(levelname)s [%(name)s.%(funcName)s] %(message)s", datefmt="[%X]"
)
)
LEVEL = logging.DEBUG if verbose else logging.ERROR if quiet else logging.INFO
rich_handler = RichHandler(console=ctx.obj.console, rich_tracebacks=True)
rich_handler.setLevel(LEVEL)
if LEVEL == logging.DEBUG:
rich_handler.setFormatter(
logging.Formatter("[%(name)s.%(funcName)s] %(message)s", datefmt="[%X]")
)
logging.basicConfig(
level=logging.DEBUG,
handlers=[
rich_handler,
file_handler,
],
format="%(message)s",
datefmt="[%X]",
)
logging.getLogger("urllib3").setLevel(logging.ERROR)
if ctx.invoked_subcommand in ("fav", "file", "search", "url"):
ctx.invoke(refresh)
ctx.obj.initApi(omit_cache=no_cache)
cli.add_command(ConfigCommand)
cli.add_command(AuthGroup)
cli.add_command(UrlGroup)
cli.add_command(FavGroup)
cli.add_command(SearchGroup)
cli.add_command(FileGroup)
if __name__ == "__main__":
cli()