Spaces:
Sleeping
Sleeping
| """ | |
| Audio File Model | |
| """ | |
| from datetime import datetime | |
| from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum | |
| from sqlalchemy.orm import relationship | |
| import enum | |
| from .base import Base | |
| class AudioFileStatus(str, enum.Enum): | |
| """Audio file processing status""" | |
| UPLOADED = "uploaded" | |
| PROCESSING = "processing" | |
| DONE = "done" | |
| FAILED = "failed" | |
| class AudioFile(Base): | |
| """Audio file database model""" | |
| __tablename__ = "audio_files" | |
| id = Column(Integer, primary_key=True, index=True) | |
| # user_id removed | |
| storage_path = Column(String(500), nullable=False) | |
| original_filename = Column(String(255), nullable=True) | |
| duration = Column(Float, nullable=True) # Duration in seconds | |
| format = Column(String(20), nullable=True) # wav, mp3, etc. | |
| sample_rate = Column(Integer, nullable=True) | |
| channels = Column(Integer, nullable=True) | |
| file_size = Column(Integer, nullable=True) # Size in bytes | |
| language = Column(String(10), nullable=True) # User-specified language | |
| detected_language = Column(String(10), nullable=True) # Auto-detected language | |
| status = Column(String(20), default=AudioFileStatus.UPLOADED.value, index=True) | |
| error_message = Column(String(500), nullable=True) | |
| created_at = Column(DateTime, default=datetime.utcnow, index=True) | |
| processed_at = Column(DateTime, nullable=True) | |
| # Relationships | |
| # user relationship removed | |
| transcripts = relationship("Transcript", back_populates="audio_file") | |
| def __repr__(self): | |
| return f"<AudioFile(id={self.id}, filename={self.original_filename}, status={self.status})>" | |