tts_labeling / data /models.py
Navid Arabi
base app
bc1cd44
raw
history blame
5.85 kB
from sqlalchemy import (
Column,
Integer,
String,
Float,
Boolean,
DateTime,
ForeignKey,
Text,
)
from sqlalchemy.orm import relationship, declarative_base
Base = declarative_base()
# --------------------------------------------------------------------------- #
# TTSData #
# --------------------------------------------------------------------------- #
class TTSData(Base):
__tablename__ = "tts_data"
id = Column(Integer, primary_key=True)
filename = Column(String(255), nullable=False, unique=True)
sentence = Column(Text, nullable=False)
# --------------------------------------------------------------------------- #
# Annotator #
# --------------------------------------------------------------------------- #
class Annotator(Base):
__tablename__ = "annotators"
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False, unique=True)
password = Column(String(255), nullable=False)
last_login = Column(DateTime)
is_active = Column(Boolean, default=True)
# رابطه با Annotation
annotations = relationship(
"Annotation",
back_populates="annotator",
cascade="all, delete-orphan",
)
# رابطه با Validator ـ نقش «کسی که کارش ارزیابی می‌شود»
validation_records = relationship(
"Validator",
back_populates="annotated_annotator",
foreign_keys="Validator.annotator_id",
cascade="all, delete-orphan",
)
# رابطه با Validator ـ نقش «کسی که اعتبارسنجی می‌کند»
validations_done = relationship(
"Validator",
back_populates="validator_user",
foreign_keys="Validator.validator_id",
cascade="all, delete-orphan",
)
# بازه‌های واگذاری کار
annotation_intervals = relationship(
"AnnotationInterval",
back_populates="annotator",
cascade="all, delete-orphan",
)
# --------------------------------------------------------------------------- #
# Validator #
# --------------------------------------------------------------------------- #
class Validator(Base):
__tablename__ = "validators"
id = Column(Integer, primary_key=True)
# کسی که جمله را حاشیه‌نویسی کرده
annotator_id = Column(Integer, ForeignKey("annotators.id"), nullable=False)
# کسی که آن را اعتبارسنجی کرده
validator_id = Column(Integer, ForeignKey("annotators.id"), nullable=False)
# رابطه‌ها
annotated_annotator = relationship(
"Annotator",
foreign_keys=[annotator_id],
back_populates="validation_records",
)
validator_user = relationship(
"Annotator",
foreign_keys=[validator_id],
back_populates="validations_done",
)
# --------------------------------------------------------------------------- #
# AnnotationInterval #
# --------------------------------------------------------------------------- #
class AnnotationInterval(Base):
__tablename__ = "annotation_intervals"
id = Column(Integer, primary_key=True)
annotator_id = Column(Integer, ForeignKey("annotators.id"))
start_index = Column(Integer, nullable=True)
end_index = Column(Integer, nullable=True)
annotator = relationship("Annotator", back_populates="annotation_intervals")
# --------------------------------------------------------------------------- #
# Annotation #
# --------------------------------------------------------------------------- #
class Annotation(Base):
__tablename__ = "annotations"
id = Column(Integer, primary_key=True)
annotated_sentence = Column(Text, nullable=False)
validated = Column(Boolean, nullable=False)
annotated_at = Column(DateTime, nullable=False)
annotator_id = Column(Integer, ForeignKey("annotators.id"))
annotator = relationship("Annotator", back_populates="annotations")
audio_trims = relationship(
"AudioTrim", cascade="all, delete-orphan", back_populates="annotation"
)
validations = relationship(
"Validation", cascade="all, delete-orphan", back_populates="annotation"
)
# --------------------------------------------------------------------------- #
# AudioTrim #
# --------------------------------------------------------------------------- #
class AudioTrim(Base):
__tablename__ = "audio_trims"
id = Column(Integer, primary_key=True)
start = Column(Float, nullable=False)
end = Column(Float, nullable=False)
annotation_id = Column(Integer, ForeignKey("annotations.id"))
annotation = relationship("Annotation", back_populates="audio_trims")
# --------------------------------------------------------------------------- #
# Validation #
# --------------------------------------------------------------------------- #
class Validation(Base):
__tablename__ = "validations"
id = Column(Integer, primary_key=True)
annotation_id = Column(Integer, ForeignKey("annotations.id"))
validator_id = Column(Integer, ForeignKey("validators.id"))
validated = Column(Boolean, nullable=False)
description = Column(Text, nullable=True)
validated_at = Column(DateTime, nullable=False)
annotation = relationship("Annotation", back_populates="validations")
validator = relationship("Validator")