فهرست منبع

fix(lint+test): remove unused imports, fix bare except, update delete button tests

Ruff fixes:
- Remove unused imports: Response, atexit, Tuple, Dict, Any, Union (main.py)
- Remove unused Tuple import (png_cache_manager.py)
- Remove unused Signal import (pattern_model.py, playlist_model.py)
- Replace bare except with except Exception (dune-weaver-touch/main.py)

Test fixes:
- Update playlist delete button selectors to match Trash2 lucide icon
  (component switched from material-icons to lucide-react Trash2)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
tuanchris 5 روز پیش
والد
کامیت
49ee730824

+ 1 - 1
dune-weaver-touch/main.py

@@ -93,7 +93,7 @@ def is_pi5():
         with open('/proc/device-tree/model', 'r') as f:
             model = f.read()
             return 'Pi 5' in model
-    except:
+    except Exception:
         return False
 
 def main():

+ 1 - 1
dune-weaver-touch/models/pattern_model.py

@@ -1,4 +1,4 @@
-from PySide6.QtCore import QAbstractListModel, Qt, Slot, Signal
+from PySide6.QtCore import QAbstractListModel, Qt, Slot
 from PySide6.QtQml import QmlElement
 from pathlib import Path
 

+ 1 - 1
dune-weaver-touch/models/playlist_model.py

@@ -1,4 +1,4 @@
-from PySide6.QtCore import QAbstractListModel, Qt, Slot, Signal
+from PySide6.QtCore import QAbstractListModel, Qt, Slot
 from PySide6.QtQml import QmlElement
 from pathlib import Path
 import json

+ 1 - 1
dune-weaver-touch/png_cache_manager.py

@@ -7,7 +7,7 @@ import asyncio
 import os
 import logging
 from pathlib import Path
-from typing import List, Tuple
+from typing import List
 try:
     from PIL import Image
 except ImportError:

+ 2 - 2
frontend/src/__tests__/integration/playlistFlow.test.tsx

@@ -192,10 +192,10 @@ describe('Playlist Flow Integration', () => {
       const parentDiv = playlistItem.closest('[class*="group"]')
       expect(parentDiv).toBeTruthy()
 
-      // Find delete button within the same row
+      // Find delete button within the same row (uses Trash2 lucide icon with text-destructive class)
       const deleteButtons = parentDiv!.querySelectorAll('button')
       const deleteButton = Array.from(deleteButtons).find(btn =>
-        btn.querySelector('.material-icons-outlined')?.textContent === 'delete'
+        btn.classList.contains('text-destructive') || btn.className.includes('text-destructive')
       )
 
       expect(deleteButton).toBeTruthy()

+ 2 - 2
frontend/src/__tests__/pages/PlaylistsPage.test.tsx

@@ -172,9 +172,9 @@ describe('PlaylistsPage', () => {
         expect(screen.getByText('geometric')).toBeInTheDocument()
       })
 
-      // Find delete buttons (trash icons) - each playlist item should have one
+      // Find delete buttons (Trash2 icon) - each playlist item should have one
       const deleteButtons = screen.getAllByRole('button').filter(btn =>
-        btn.querySelector('.material-icons-outlined')?.textContent?.includes('delete')
+        btn.classList.contains('text-destructive') || btn.className.includes('text-destructive')
       )
 
       // Should have at least one delete button (for each playlist)

+ 2 - 3
main.py

@@ -1,11 +1,10 @@
 from fastapi import FastAPI, UploadFile, File, HTTPException, BackgroundTasks, WebSocket, WebSocketDisconnect, Request
-from fastapi.responses import JSONResponse, FileResponse, Response
+from fastapi.responses import JSONResponse, FileResponse
 from fastapi.staticfiles import StaticFiles
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.templating import Jinja2Templates
 from pydantic import BaseModel
-from typing import List, Optional, Tuple, Dict, Any, Union
-import atexit
+from typing import List, Optional
 import os
 import logging
 from datetime import datetime, time