"""Participant Model. This model represents a Participant """ import sqlalchemy from sqlalchemy import ForeignKey from sqlalchemy.dialects.mysql import INTEGER from podcast.connectors import mysql from podcast.constants.participant import ROLES class Participant(mysql.BaseModel): """Participant model.""" __tablename__ = 'participant' id = sqlalchemy.Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True) # noqa podcast_id = sqlalchemy.Column( INTEGER, ForeignKey('podcast.id'), nullable=False ) name = sqlalchemy.Column(sqlalchemy.VARCHAR(255), nullable=False) role = sqlalchemy.Column(sqlalchemy.Enum(*ROLES)) participant_id = sqlalchemy.Column(sqlalchemy.Integer(), nullable=False) def to_dict(self): """Return the object as dictionary.""" return dict( id=self.id, podcast_id=self.podcast_id, name=self.name, role=self.role, participant_id=self.participant_id ) def create_participants(podcast_id, participants, session=None): """Create a new participant. Args: data (dict): the data from which to create the participant. Returns: dict: containing the created participant dict. """ if session: return _create_participants(podcast_id, participants, session) with mysql.pod_db_session() as session: return _create_participants(podcast_id, participants, session) def _create_participants(podcast_id, participants, session): delete_participants_by_podcast_id(podcast_id, session) participant_results = [] for participant in participants: participant['podcast_id'] = podcast_id participant_model = Participant(**participant) session.add(participant_model) participant_results.append(participant_model) session.flush() return [participant.to_dict() for participant in participant_results] def delete_participants_by_podcast_id(podcast_id, session): """Delete participants by podcast id. Args: podcast_id (int) session (obj) Returns: None """ session.query(Participant).filter( Participant.podcast_id == podcast_id ).delete()