Skip to content

artist_renamer

Artist renaming service.

ArtistRenamer

ArtistRenamer(
    track_processor,
    console_logger,
    error_logger,
    *,
    config_path
)

Service that updates artist names based on a YAML mapping.

Source code in src/core/tracks/artist_renamer.py
def __init__(
    self,
    track_processor: TrackProcessorProtocol,
    console_logger: logging.Logger,
    error_logger: logging.Logger,
    *,
    config_path: Path,
) -> None:
    self._track_processor = track_processor
    self.console_logger = console_logger
    self.error_logger = error_logger
    self._config_path = config_path
    self._mapping = _load_mapping(config_path, error_logger)

has_mapping property

has_mapping

Return True when there is at least one rename rule.

rename_tracks async

rename_tracks(tracks)

Rename artists according to mapping. Returns list of updated tracks.

Source code in src/core/tracks/artist_renamer.py
async def rename_tracks(self, tracks: list[TrackDict]) -> list[TrackDict]:
    """Rename artists according to mapping. Returns list of updated tracks."""
    if not self._mapping:
        return []

    updated_tracks: list[TrackDict] = []
    for track in tracks:
        # Get normalized key for matching, but preserve original for display
        normalized_key = self._normalize_artist(track.artist)
        if normalized_key is None:
            continue

        # Original artist (stripped but case-preserved) for display/logging
        display_artist = track.artist.strip() if track.artist else ""

        new_artist = self._mapping.get(normalized_key)
        if not new_artist or normalize_for_matching(new_artist) == normalized_key:
            continue

        if not self._can_rename_track(track, display_artist, new_artist):
            continue

        if await self._apply_rename(track, display_artist, new_artist):
            updated_tracks.append(track)

    return updated_tracks