From 2fd13a6b3f73347f11148d7825794c3a53da5ebd Mon Sep 17 00:00:00 2001 From: Nose Date: Mon, 9 Feb 2026 17:45:57 -0800 Subject: [PATCH] h --- .luarc.json | 28 ++++++++++++++++++++++++++++ CLI.py | 4 ++-- SYS/config.py | 5 +---- SYS/logger.py | 3 +++ cmdnat/pipe.py | 7 +++++-- tool/ytdlp.py | 44 ++++++++++++++++++-------------------------- 6 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 .luarc.json diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..b1605b1 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,28 @@ +{ + "runtime": { + "version": "LuaJIT", + "path": [ + "?.lua", + "?/init.lua", + "MPV/portable_config/scripts/uosc/scripts/uosc/?.lua", + "MPV/portable_config/scripts/uosc/scripts/uosc/?/init.lua", + "MPV/LUA/?.lua", + "MPV/LUA/?/init.lua" + ] + }, + "workspace": { + "library": [ + "MPV/portable_config/scripts/uosc/scripts/uosc", + "MPV/portable_config/scripts/uosc/scripts/uosc/lib", + "MPV/LUA" + ], + "checkThirdParty": false + }, + "diagnostics": { + "disable": [ + "undefined-global", + "undefined-field", + "need-check-nil" + ] + } +} diff --git a/CLI.py b/CLI.py index 883b56c..2fb90ab 100644 --- a/CLI.py +++ b/CLI.py @@ -41,7 +41,7 @@ import uuid from copy import deepcopy from pathlib import Path -from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, cast, Callable +from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, cast import typer from prompt_toolkit import PromptSession @@ -98,7 +98,7 @@ from ProviderCore.registry import provider_inline_query_choices # Selection parsing and REPL lexer moved to SYS.cli_parsing -from SYS.cli_parsing import Lexer, DRIVE_RE, KEY_PREFIX_RE, TOKEN_PATTERN, SELECTION_RANGE_RE, SelectionSyntax, SelectionFilterSyntax, MedeiaLexer +from SYS.cli_parsing import SelectionSyntax, SelectionFilterSyntax, MedeiaLexer # SelectionFilterSyntax moved to SYS.cli_parsing (imported above) diff --git a/SYS/config.py b/SYS/config.py index 4c2e5ff..65e57ee 100644 --- a/SYS/config.py +++ b/SYS/config.py @@ -6,11 +6,8 @@ import json import sqlite3 import time import os -import traceback import datetime import sys -import getpass -import hashlib import tempfile from copy import deepcopy from pathlib import Path @@ -19,7 +16,7 @@ from SYS.logger import log import logging logger = logging.getLogger(__name__) from SYS.utils import expand_path -from SYS.database import db, get_config_all, save_config_value, rows_to_config +from SYS.database import db, get_config_all, rows_to_config SCRIPT_DIR = Path(__file__).resolve().parent diff --git a/SYS/logger.py b/SYS/logger.py index bc847b3..56aad4e 100644 --- a/SYS/logger.py +++ b/SYS/logger.py @@ -2,12 +2,15 @@ import sys import inspect +import logging import threading from pathlib import Path from typing import Optional from SYS.rich_display import console_for +logger = logging.getLogger(__name__) + # Global DB logger set later to avoid circular imports _DB_LOGGER = None diff --git a/cmdnat/pipe.py b/cmdnat/pipe.py index 81bd2bf..a8aff56 100644 --- a/cmdnat/pipe.py +++ b/cmdnat/pipe.py @@ -1,3 +1,4 @@ +# pyright: reportUnusedFunction=false from typing import Any, Dict, Sequence, List, Optional import os import sys @@ -124,10 +125,12 @@ def _repo_log_dir() -> Path: return d +# pyright: ignore[reportUnusedFunction] def _helper_log_file() -> Path: return _repo_log_dir() / "medeia-mpv-helper.log" +# pyright: ignore[reportUnusedFunction] def _lua_log_file() -> Path: return _repo_log_dir() / "medeia-mpv-lua.log" @@ -2089,7 +2092,7 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int: else: print("MPV logs from database (mpv module, most recent first):") if mpv_logs: - for timestamp, level, module, message in mpv_logs: + for timestamp, level, _module, message in mpv_logs: ts = str(timestamp or "").strip() if ts: print(f"[{ts}] [{level}] {message}") @@ -2248,7 +2251,7 @@ def _start_mpv( except Exception as e: debug(f"Error starting MPV: {e}", file=sys.stderr) - +# pyright: ignore[reportCallIssue] CMDLET = Cmdlet( name=".mpv", alias=[".pipe", "pipe", "playlist", "queue", "ls-pipe"], diff --git a/tool/ytdlp.py b/tool/ytdlp.py index 554e294..7a44a96 100644 --- a/tool/ytdlp.py +++ b/tool/ytdlp.py @@ -1,3 +1,4 @@ +# pyright: reportUnusedFunction=false from __future__ import annotations import hashlib @@ -960,26 +961,20 @@ class YtDlpTool: # Special handling for format keywords explicitly passed in via options if opts.ytdl_format == "audio": try: - opts = opts._replace(mode="audio", ytdl_format=None) - except Exception: - try: - import dataclasses as _dc + import dataclasses as _dc - opts = _dc.replace(opts, mode="audio", ytdl_format=None) - except Exception: - from SYS.logger import logger - logger.exception("Failed to set opts mode to audio via dataclasses.replace") + opts = _dc.replace(opts, mode="audio", ytdl_format=None) + except Exception: + from SYS.logger import logger + logger.exception("Failed to set opts mode to audio via dataclasses.replace") elif opts.ytdl_format == "video": try: - opts = opts._replace(mode="video", ytdl_format=None) - except Exception: - try: - import dataclasses as _dc + import dataclasses as _dc - opts = _dc.replace(opts, mode="video", ytdl_format=None) - except Exception: - from SYS.logger import logger - logger.exception("Failed to set opts mode to video via dataclasses.replace") + opts = _dc.replace(opts, mode="video", ytdl_format=None) + except Exception: + from SYS.logger import logger + logger.exception("Failed to set opts mode to video via dataclasses.replace") if opts.no_playlist: base_options["noplaylist"] = True @@ -992,15 +987,12 @@ class YtDlpTool: if configured_format.lower() == "audio": # Default to audio-only downloads try: - opts = opts._replace(mode="audio") - except Exception: - try: - import dataclasses as _dc + import dataclasses as _dc - opts = _dc.replace(opts, mode="audio") - except Exception: - from SYS.logger import logger - logger.exception("Failed to set opts mode to audio via dataclasses.replace (configured default)") + opts = _dc.replace(opts, mode="audio") + except Exception: + from SYS.logger import logger + logger.exception("Failed to set opts mode to audio via dataclasses.replace (configured default)") ytdl_format = None else: # Leave ytdl_format None so that default_format(opts.mode) @@ -1854,7 +1846,7 @@ def download_media(opts: DownloadOptions, *, config: Optional[Dict[str, Any]] = info = None else: with yt_dlp.YoutubeDL(ytdl_options) as ydl: # type: ignore[arg-type] - info = ydl.extract_info(opts.url, download=True) + info = cast(Dict[str, Any], ydl.extract_info(opts.url, download=True)) except Exception as exc: retry_attempted = False if _is_http_403(exc) and not ytdl_options.get("download_sections"): @@ -1879,7 +1871,7 @@ def download_media(opts: DownloadOptions, *, config: Optional[Dict[str, Any]] = fallback_options["extractor_args"] = extractor_args with yt_dlp.YoutubeDL(fallback_options) as ydl: # type: ignore[arg-type] - info = ydl.extract_info(opts.url, download=True) + info = cast(Dict[str, Any], ydl.extract_info(opts.url, download=True)) except Exception as exc2: log(f"yt-dlp failed: {exc2}", file=sys.stderr) if debug_logger is not None: