"""Model representing a release approval queue.""" from oto import response from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy import Integer from product_digital.connectors import mysql from product_digital.models import rejection_notes class ReleaseApprovalQueue(mysql.BaseModel): """Release Approval Queue model.""" __tablename__ = 'release_approval_queue' release_approval_id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) release_id = Column(Integer, nullable=False) status = Column(Enum('approved', 'checked_out', 'checked_in', 'rejected'), nullable=False) admin_approval = Column(Enum('Y', 'N'), nullable=True) last_updated = Column(DateTime, nullable=False) date_submitted = Column(DateTime, nullable=False) def to_dict(self): """Return dictionary of release approval queue data. Returns: dict: release approval queue metadata. """ return { 'release_approval_id': self.release_approval_id, 'release_id': self.release_id, 'status': self.status, 'admin_approval': self.admin_approval, 'last_updated': self.last_updated, 'date_submitted': self.date_submitted } def get_release_approval_ids(product_id, session): """Get the release apprval ids for the product.""" release_approval_ids = session.query(ReleaseApprovalQueue)\ .filter(ReleaseApprovalQueue.release_id == product_id) return release_approval_ids def delete(product_id, session): """Delete release_approval_queue entry for the product.""" release_approval_ids = [ release_approval.release_approval_id for release_approval in get_release_approval_ids(product_id, session) ] if not release_approval_ids: return response.Response(message={'status': 'ok'}) rejection_notes.delete(release_approval_ids, session) session.query(ReleaseApprovalQueue) \ .filter(ReleaseApprovalQueue.release_id == product_id) \ .delete()