You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
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
|