"""Release Model.""" from oto import response from sqlalchemy import BigInteger from sqlalchemy import Column from sqlalchemy import Date from sqlalchemy import Enum from sqlalchemy import Integer from sqlalchemy import String from connectors import mysql STATUS_TYPES = [ 'orchard_processing', 'label_confirmation', 'transfer_to_content', 'label_processing', 'in_content'] STATUS_IN_PROGRESS_WORKSTATION = ['label_processing'] STATUS_IN_PROGRESS_OA = ['label_processing', 'in_content'] PROPERTIES_FOR_UPDATE = [ 'artist_id', 'c_line', 'description', 'genre_id', 'itunes_previewable', 'label', 'manufacturer_upc', 'meta_language', 'preorder_date', 'product_code', 'release_date', 'release_format', 'release_status', 'release_name', 'sale_start_date', 'special_instructions', 'vendor_release_identifier', 'version', ] class Release(mysql.ArModel): """Release Model. Represents Release metadata """ __tablename__ = 'releases' release_id = Column( Integer, primary_key=True, autoincrement=True, nullable=False) artist_id = Column(Integer) c_line = Column(String) description = Column(String) display_upc = Column(String) distribution_format_id = Column(Integer) genre_id = Column(Integer) itunes_previewable = Column(Enum('yes', 'no')) label = Column(String) manufacturer_upc = Column(String) meta_language = Column(String) preorder_date = Column(Date) product_code = Column(String) product_type_id = Column(Integer) project_id = Column(BigInteger) release_date = Column(Date) release_format = Column('format', String) release_name = Column(String) release_status = Column(Enum(*STATUS_TYPES), default='orchard_processing') sale_start_date = Column(Date) special_instructions = Column(String) subaccount_id = Column(Integer) upc = Column(BigInteger, nullable=False) vendor_catalog_number = Column(String) vendor_release_identifier = Column(String) version = Column(String(255)) def to_dict(self): """Return a dictionary of this release's properties.""" return { 'artist_id': self.artist_id, 'c_line': self.c_line, 'description': self.description, 'display_upc': self.display_upc, 'distribution_format_id': self.distribution_format_id, 'format': self.release_format, 'genre_id': self.genre_id, 'itunes_previewable': self.itunes_previewable, 'label': self.label, 'manufacturer_upc': self.manufacturer_upc, 'meta_language': self.meta_language, 'preorder_date': self.preorder_date, 'product_code': self.product_code, 'product_type_id': self.product_type_id, 'project_id': self.project_id, 'release_date': self.release_date, 'release_id': self.release_id, 'release_name': self.release_name, 'release_status': self.release_status, 'sale_start_date': self.sale_start_date, 'special_instructions': self.special_instructions, 'subaccount_id': self.subaccount_id, 'upc': self.upc, 'vendor_catalog_number': self.vendor_catalog_number, 'vendor_release_identifier': self.vendor_release_identifier, 'version': self.version} def get_release_instance(upc, session): """Return release instance. Args: release_id (int): release_id for the release to be retrieved. Returns: Release: Release information. """ return session.query(Release).filter(Release.upc == upc).first()