tts_labeling / models.py
Navid Arabi
test mysql
ac40033
raw
history blame
2.66 kB
from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
from pydantic import BaseModel, ConfigDict
from typing import List
from datetime import datetime
Base = declarative_base()
class Annotator(Base):
__tablename__ = 'annotators'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False, unique=True)
password = Column(String, nullable=False)
last_login = Column(DateTime)
is_active = Column(Boolean, default=True)
annotations = relationship('Annotation', backref='annotator')
validators = relationship('Validator', backref='annotator')
annotation_intervals = relationship('AnnotationInterval', backref='annotator')
class Validator(Base):
__tablename__ = 'validators'
id = Column(Integer, primary_key=True)
annotator_id = Column(Integer, ForeignKey('annotators.id'))
validator_id = Column(Integer, ForeignKey('annotators.id'))
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)
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'))
class Annotation(Base):
__tablename__ = 'annotations'
id = Column(Integer, primary_key=True)
annotated_subtitle = Column(String, nullable=False)
validated = Column(Boolean, nullable=False)
create_at = Column(DateTime, nullable=False)
update_at = Column(DateTime, nullable=False)
audio_trims = relationship('AudioTrim', cascade='all, delete', backref='annotation')
json_data_id = Column(Integer, ForeignKey('json_data.id'))
annotator_id = Column(Integer, ForeignKey('annotators.id'))
class AudioTrimModel(BaseModel):
start: float
end: float
model_config = ConfigDict(from_attributes=True)
class AnnotationModel(BaseModel):
annotator: str
annotated_subtitle: str
is_first_phase_accepted: bool
create_at: datetime
update_at: datetime
audio_trims: List[AudioTrimModel]
model_config = ConfigDict(from_attributes=True)
class JsonDataModel(BaseModel):
id: int
voice_name: str
original_subtitle: str
ignore_it: bool
is_approved_in_second_phase: bool
annotations: List[AnnotationModel]
model_config = ConfigDict(from_attributes=True)