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.
This commit is contained in:
Warry
2025-12-29 20:54:26 +01:00
parent f413240b51
commit 7b60f92a48
10 changed files with 162 additions and 135 deletions
+1 -2
View File
@@ -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.
+3 -1
View File
@@ -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: