From 7b60f92a48b4ff54604e8179503488800866ca6f Mon Sep 17 00:00:00 2001 From: Warry Date: Mon, 29 Dec 2025 20:54:26 +0100 Subject: feat: Refactor playlist management, error handling, and testing infrastructure - Improved playlist item handling with pagination, error logging, and dedicated request hooks. - Consolidated reusable helpers for track ID normalization, playlist validation, and removal logic. - Enhanced error handling by introducing `PlaylistNotFound` and `UserNotAuthenticated` exceptions. - Refined Pytest `qapp` fixture for headless CI compatibility and session-scoped reuse. - Replaced redundant fixtures in multiple test files for consistency. - Improved playlist management GUI with detailed debug logging for notifications and operations. - Added `deptry` configuration to handle transitive dependencies and ignored exclusions. - Updated Pytest and Tox configurations for consistent environment setup during CI/CD runs. --- tidal_dl_ng/gui/dialog_playlist_manager.py | 3 +-- tidal_dl_ng/gui/playlist_membership.py | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'tidal_dl_ng/gui') diff --git a/tidal_dl_ng/gui/dialog_playlist_manager.py b/tidal_dl_ng/gui/dialog_playlist_manager.py index 0066e72..f665543 100644 --- a/tidal_dl_ng/gui/dialog_playlist_manager.py +++ b/tidal_dl_ng/gui/dialog_playlist_manager.py @@ -316,8 +316,7 @@ class PlaylistManagerDialog(QtWidgets.QDialog): TODO: Integrate with app's notification system (Toast/Snackbar) """ - # Silent - errors are shown via UI notifications - pass + logger_gui.debug(f"PlaylistManagerDialog notification: {message}") def closeEvent(self, event: QtGui.QCloseEvent) -> None: """Handle dialog close event. diff --git a/tidal_dl_ng/gui/playlist_membership.py b/tidal_dl_ng/gui/playlist_membership.py index 927c96b..31d9d2d 100644 --- a/tidal_dl_ng/gui/playlist_membership.py +++ b/tidal_dl_ng/gui/playlist_membership.py @@ -508,14 +508,16 @@ class PlaylistContextLoader(QtCore.QRunnable): Set of track UUIDs in this playlist """ try: - # If a low-level request hook is present, use it to fetch all items req = getattr(self.session, "request", None) if callable(req): return self._fetch_via_request_hook(playlist_uuid, playlist_name) return self._fetch_via_tidalapi(playlist_uuid, playlist_name) + except RequestException: + raise except Exception as e: + logger_gui.debug(f"Unexpected error fetching items for {playlist_uuid}: {e}") raise RequestException(f"Failed to fetch items for playlist {playlist_uuid}: {e}") from e # noqa: TRY003 def request_abort(self) -> None: -- cgit v1.3.1