from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship, sessionmaker, Mapped, backref from .show import Base from .track import Track from ffx.media_descriptor import MediaDescriptor class Pattern(Base): __tablename__ = 'patterns' # v1.x id = Column(Integer, primary_key=True) pattern = Column(String) # v2.0 # id: Mapped[int] = mapped_column(Integer, primary_key=True) # pattern: Mapped[str] = mapped_column(String, nullable=False) # v1.x show_id = Column(Integer, ForeignKey('shows.id', ondelete="CASCADE")) show = relationship('Show', back_populates='patterns') # v2.0 # show_id: Mapped[int] = mapped_column(ForeignKey("shows.id", ondelete="CASCADE")) # show: Mapped["Show"] = relationship(back_populates="patterns") tracks = relationship('Track', back_populates='pattern', cascade="all, delete") media_tags = relationship('MediaTag', back_populates='pattern', cascade="all, delete") def getDescriptor(self): descriptor = {} descriptor['id'] = int(self.id) descriptor['pattern'] = str(self.pattern) descriptor['show_id'] = int(self.show_id) descriptor['tags'] = {} for t in self.media_tags: descriptor['tags'][str(t.key)] = str(t.value) return descriptor def getMediaDescriptor(self): md = MediaDescriptor(tags = self.getDescriptor()['tags']) for t in self.tracks: md.appendTrack(t.getDescriptor()) return md