fix: navidrome subsonic api errors incorrectly tripping circuit breaker (#9)

This commit is contained in:
Harvey
2026-04-04 15:32:52 +01:00
committed by GitHub
parent c141b9fcdf
commit c696eae987
10 changed files with 151 additions and 24 deletions
+13 -8
View File
@@ -38,19 +38,24 @@ async def get_navidrome_albums(
genre: str = Query(default=""),
service: NavidromeLibraryService = Depends(get_navidrome_library_service),
) -> NavidromeAlbumPage:
subsonic_type = "byGenre" if genre else _SORT_MAP.get(sort_by, "alphabeticalByName")
try:
if genre:
subsonic_type = "byGenre"
else:
subsonic_type = _SORT_MAP.get(sort_by, "alphabeticalByName")
items = await service.get_albums(type=subsonic_type, size=limit, offset=offset, genre=genre if genre else None)
stats = await service.get_stats()
total = stats.total_albums if len(items) >= limit else offset + len(items)
return NavidromeAlbumPage(items=items, total=total)
items = await service.get_albums(
type=subsonic_type, size=limit, offset=offset, genre=genre if genre else None,
)
except ExternalServiceError as e:
logger.error("Navidrome service error getting albums: %s", e)
raise HTTPException(status_code=502, detail="Failed to communicate with Navidrome")
try:
stats = await service.get_stats()
total = stats.total_albums if len(items) >= limit else offset + len(items)
except ExternalServiceError:
logger.warning("Navidrome stats unavailable, using heuristic pagination total")
total = offset + len(items) + (1 if len(items) >= limit else 0)
return NavidromeAlbumPage(items=items, total=total)
@router.get("/albums/{album_id}", response_model=NavidromeAlbumDetail)
async def get_navidrome_album_detail(