"""Product track model.""" from datetime import date from typing import Optional from dateutil import parser from db import db class ProductTrack(db.Model): """Product track model.""" __tablename__ = "ProductTrack" id = db.Column(db.BigInteger, primary_key=True) product_id = db.Column(db.BigInteger, db.ForeignKey("ProductFamily.id", ondelete="CASCADE"), nullable=False) isrc = db.Column(db.String, nullable=False) title = db.Column(db.String, nullable=False) title_supplementary = db.Column(db.String, nullable=True) type = db.Column(db.String, nullable=False) release_date = db.Column(db.String, nullable=True) product = db.relationship("ProductFamily") artists = db.relationship("ProductTrack", secondary="ProductTrackArtist") def formatted_release_date(self) -> Optional[date]: if self.release_date is not None: return parser.parse(str(self.release_date)).date() return None product_track_artist = db.Table( "ProductTrackArtist", db.Model.metadata, db.Column("product_track_id", db.Integer, db.ForeignKey("ProductTrack.id", ondelete="CASCADE"), nullable=False), db.Column("artist_id", db.Integer, db.ForeignKey("Artist.id", ondelete="CASCADE"), nullable=False), )