Files
beets/beetsplug/lastgenre/utils.py
2026-06-29 11:20:15 +02:00

45 lines
1.3 KiB
Python

"""Lastgenre plugin shared utilities and types."""
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import re
from beets.logging import BeetsLogger
GenreIgnorePatterns = dict[str, list[re.Pattern[str]]]
"""Mapping of artist name to list of compiled case-insensitive patterns."""
def drop_ignored_genres(
logger: BeetsLogger,
ignore_patterns: GenreIgnorePatterns,
genres: list[str],
artist: str | None = None,
) -> list[str]:
"""Drop genres that match the ignorelist."""
return [
g for g in genres if not is_ignored(logger, ignore_patterns, g, artist)
]
def is_ignored(
logger: BeetsLogger,
ignore_patterns: GenreIgnorePatterns,
genre: str,
artist: str | None = None,
) -> bool:
"""Check if genre tag should be ignored."""
genre_lower = genre.lower()
for pattern in ignore_patterns.get("*") or []:
if pattern.fullmatch(genre_lower):
logger.extra_debug("ignored (global): {}", genre)
return True
for pattern in ignore_patterns.get((artist or "").lower()) or []:
if pattern.fullmatch(genre_lower):
logger.extra_debug("ignored (artist: {}): {}", artist, genre)
return True
return False