"""Release Status Model.""" from oto import response from sqlalchemy import Column from sqlalchemy import Date from sqlalchemy import Enum from sqlalchemy import func as sql_func from sqlalchemy import Integer from product_digital.connectors import mysql from product_digital.models import release class ReleaseStatus(mysql.BaseModel): """Release Status Model. Represents ReleaseStatus metadata """ __tablename__ = 'release_status' release_status_id = Column( Integer, primary_key=True, autoincrement=True, nullable=False) release_id = Column(Integer, nullable=False) status = Column( Enum(*release.STATUS_TYPES), nullable=False, default='orchard_processing') date = Column(Date, nullable=False) changed_by = Column(Integer, nullable=False) changed_by_type = Column(Enum('vendor', 'oa'), nullable=False) def to_dict(self): """Create a dictionary of this release's properties.""" return { 'release_status_id': self.release_status_id, 'release_id': self.release_id, 'status': self.status, 'date': self.date.strftime('%Y-%m-%d'), 'changed_by': self.changed_by, 'changed_by_type': self.changed_by_type} def create(release_status_data, session=None): """Create a new release_status entry. Returns: Response: Response containing the release status entry saved. """ release_status = ReleaseStatus( release_id=release_status_data.get('release_id'), status=release_status_data.get('status'), date=sql_func.current_date(), changed_by=release_status_data.get('changed_by'), changed_by_type=release_status_data.get('changed_by_type')) if session: session.add(release_status) session.flush() return response.Response(message=release_status.to_dict(), status=201) else: with mysql.db_session() as session: session.add(release_status) session.flush() return response.Response( message=release_status.to_dict(), status=201) def delete(product_id, session): """Delete a release_status entry.""" session.query(ReleaseStatus) \ .filter(ReleaseStatus.release_id == product_id) \ .delete()