import marshmallow as ma from community_qa_bot.db import Session from community_qa_bot.models.slack import SlackAIChannel, SlackInstalledBot class SlackAIChannelSchema(ma.Schema): id = ma.fields.Int() team_id = ma.fields.Str() channel_id = ma.fields.Str() comment = ma.fields.Str() class CreateSlackAIChannelSchema(ma.Schema): team_id = ma.fields.Str(required=True) channel_id = ma.fields.Str(required=True) comment = ma.fields.Str(required=False) @ma.validates('team_id') def validate_team_id(self, value): with Session() as session: if not ( session.query(SlackInstalledBot) .filter(SlackInstalledBot.team_id == value) .first() ): raise ma.ValidationError('This team is not supported.') @ma.validates_schema() def validate_schema(self, data, **kwargs): with Session() as session: if ( session.query(SlackAIChannel) .filter(SlackAIChannel.team_id == data['team_id']) .filter(SlackAIChannel.channel_id == data['channel_id']) .first() ): raise ma.ValidationError('This channel is already added.')