"""User Settings Model. This model represents a users settings """ import sqlalchemy from podcast.connectors import mysql from podcast.utils import exc class UserPodcastSettings(mysql.BaseModel): """User settings model.""" __tablename__ = 'user_podcast_settings' user_id = sqlalchemy.Column(sqlalchemy.INTEGER, sqlalchemy.ForeignKey('user.id'), primary_key=True) ad_notifications = sqlalchemy.Column(sqlalchemy.BOOLEAN, nullable=False, default=True) podcast_notifications = sqlalchemy.Column(sqlalchemy.BOOLEAN, nullable=False, default=True) transcription_notifications = sqlalchemy.Column(sqlalchemy.BOOLEAN, nullable=False, default=True) spike_notifications = sqlalchemy.Column(sqlalchemy.BOOLEAN, nullable=False, default=True) def to_dict(self): """Return the object as dictionary.""" return dict( ad_notifications=self.ad_notifications, podcast_notifications=self.podcast_notifications, transcription_notifications=self.transcription_notifications, spike_notifications=self.spike_notifications ) def get_user_settings(user_id): """Get user settings. Args: user_id (int): id Returns: dict: settings for that specific user """ with mysql.pod_db_session(read_only=True) as session: settings = session.query(UserPodcastSettings).filter(UserPodcastSettings.user_id == user_id).first() if not settings: raise exc.OwsError.not_found('No settings found for user id: {}.'.format(user_id)) return settings.to_dict() def create_user_settings(user_id): """Create user settings. Args: user_id (int): id Returns: dict: settings for that specific user """ with mysql.pod_db_session() as session: data = {'user_id': user_id} settings = UserPodcastSettings(**data) session.add(settings) session.flush() return settings.to_dict() def update_user_settings(user_id, data): """Update current user settings. Args: user_id (int): id data (dict): updated user settings """ with mysql.pod_db_session() as session: query = session.query(UserPodcastSettings).filter(UserPodcastSettings.user_id == user_id) query.update(data) return query.first().to_dict()