from typing import Any from sqlalchemy.orm import Session from contributor.queries.mysql import ( artist_info, artist_yt_delivery_settings, project, release, release_artist, track_artist, track_writer, ) def rename_art_relations_contributor_records( session: Session, name: str, vendor_id: int, current_name: str ): """ Performs all queries necessary to update art_relations records related to the name of a contributor. Raises: HTTPException: If the new name is already associated with a different artist for the same vendor. """ existing_artist_info: dict[str, Any] | None = artist_info.get( session=session, vendor_id=vendor_id, name=current_name ) new_artist_info: dict[str, Any] | None = artist_info.get( session=session, vendor_id=vendor_id, name=name ) if existing_artist_info and new_artist_info: if existing_artist_info["artist_id"] == new_artist_info["artist_id"]: return for rename_method in [ release_artist.rename_release_artists, track_artist.rename_track_artists, track_writer.rename_track_writers, ]: rename_method( session=session, current_artist_name=current_name, vendor_id=vendor_id, new_artist_name=name, ) def reassign_contributor_content( *, session: Session, contributor_artist_info_id: int, duplicate_artist_info_id: int, ) -> None: """ Performs all queries necessary to reassign content from one contributor to another. """ for reassign_method in [ release.reassign_contributor_releases, project.reassign_contributor_projects, ]: reassign_method( session=session, contributor_artist_info_id=contributor_artist_info_id, duplicate_artist_info_id=duplicate_artist_info_id, ) def remove_artist_info_references(*, session: Session, artist_info_id: int) -> None: """ Remove all references to the given artist_info_id in the artist_yt_delivery_settings table. """ artist_yt_delivery_settings.remove_artist_info_references( session=session, artist_info_id=artist_info_id, ) def reassign_artist_info( *, session: Session, artist_name: str, artist_info_id: int, duplicate_artist_info_id: int, ) -> None: """ Reassign track artists from duplicate_artist_info_id to artist_info_id, updating the artist name at the same time. """ for reassign_method in [ release_artist.reassign_artist_info, track_artist.reassign_artist_info, track_writer.reassign_artist_info, ]: reassign_method( session=session, artist_name=artist_name, artist_info_id=artist_info_id, duplicate_artist_info_id=duplicate_artist_info_id, )