"""Performer Modeling.""" from sqlalchemy import Column from sqlalchemy import Enum from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import orm from sqlalchemy import String from backend.connectors import mysql from backend.constants import performer as performer_const class PerformerRole(mysql.OwsTrackBaseModel): """Model for Performer Roles.""" __tablename__ = 'performer_role' performer_role_id = Column(Integer, primary_key=True) performer_role = Column(String(100)) display_order = Column(Integer) def to_dict(self): """Performer role data dictionary. Returns: dict """ return { 'performer_role_id': self.performer_role_id, 'performer_role': self.performer_role } class Performer(mysql.OwsTrackBaseModel): """Model for Performers.""" __tablename__ = 'performer' performer_id = Column(Integer, primary_key=True) performer_type = Column( Enum(*performer_const.PERFORMER_TYPES), nullable=False) performer_role_id = Column( ForeignKey('performer_role.performer_role_id'), nullable=False) birth_name = Column(String(1000), nullable=False) tuid = Column('unique_track_id', Integer, nullable=False) @orm.validates('performer_type') def validate_performer_type(self, key, value): """Validate performer_type has a valid value. Args: key (string): Name of column value (string): Value of column Returns: str Raises: ValueError """ if value not in performer_const.PERFORMER_TYPES: raise ValueError('`{}` is an invalid performer type'.format(value)) return value @orm.validates('birth_name') def validate_birth_name(self, key, value): """Validate birth_name has a valid value. Args: key (string): Name of column value (string): Value of column Returns: str Raises: ValueError """ if not value or not value.strip(): raise ValueError('Birth name cannot be blank') return value def to_dict(self): """Performer data dictionary. Returns: dict """ return { 'performer_id': self.performer_id, 'type': self.performer_type, 'performer_role_id': self.performer_role_id, 'birth_name': self.birth_name, 'tuid': self.tuid }