"""Track Artist Model.""" from sqlalchemy import Column from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import String from ows_product_physical.connector import mysql class TrackArtist(mysql.BaseModel): """Track Model. Represents track table in art_relations. """ __tablename__ = 'track_artist' id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) # noqa track_id = Column(Integer, ForeignKey('track.id')) # Track Id name = Column(String, nullable=False) type = Column(String, nullable=False, default='performer') # noqa def to_dict(self): """Dictionary representation of Track Artist.""" return { 'id': self.id, 'track_id': self.track_id, 'name': self.name, 'type': self.type } def create(artists, track_id, session): """Insert artists in track_artists table for a particular track. Args: session (object): database connection object artists (list): list of performer names track_id (int): id of track associated with the performer Response: None """ for artist_name in artists: session.add(TrackArtist(track_id=track_id, name=artist_name)) session.flush() def delete_by_track_id(track_id, session): """Delete artists in track_artists table for a particular track. Args: session (object): database connection object track_id (int): id of track associated with the performer Response: None """ session.query(TrackArtist) \ .filter(TrackArtist.track_id == track_id) \ .delete() def bulk_delete_by_track_id(track_numbers, session): """Delete all artists for all tracks. Args: track_numbers (list): list of track numbers to delete artists for. session (object): database connection object """ session.query(TrackArtist) \ .filter(TrackArtist.track_id.in_(track_numbers)) \ .delete(synchronize_session=False)