Spaces:
Runtime error
Runtime error
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, Float,JSON | |
from sqlalchemy.orm import relationship | |
from datetime import datetime | |
from database import Base | |
import random | |
def get_random_album_art(): | |
number = random.randint(1, 30) | |
return f"https://storage.googleapis.com/mippia-userfile-bucket/userfiles/default_albumart/thumbnail_240_{number:02}.png" | |
class Result(Base): # ํ๊ธ path, ์์ด path, data_pkl # 3๊ฐ๊ฐ result๊ฐ ์์ 1ํตํฉ -> migration์ํ๋ฉด ์ง๊ธ ๋๊ณ ์๋ ์ฌ์ดํธ์๋ ์ํฅ์ด๊ฐ | |
__tablename__ = "files" | |
id = Column(Integer, primary_key=True, index=True) | |
path = Column(String, index=True, default = None) # deprecated | |
music_id = Column(Integer, ForeignKey("musics.id")) | |
rank = Column(Integer) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
title = Column(String, index=True) | |
music = relationship("Music", back_populates="results") | |
plagiarism_rate = Column(Float) | |
data_pkl = Column(String) | |
def __repr__(self): | |
return f"<Result(id={self.id}, name='{self.path}')>" | |
class Visual_Result(Base): # ํ๊ธ path, ์์ด path, data_pkl # 3๊ฐ๊ฐ result๊ฐ ์์ 1ํตํฉ -> migration์ํ๋ฉด ์ง๊ธ ๋๊ณ ์๋ ์ฌ์ดํธ์๋ ์ํฅ์ด๊ฐ | |
__tablename__ = "visual_results" | |
id = Column(Integer, primary_key=True) | |
ko_path = Column(String, default = None) # default = None | |
en_path = Column(String, default = None) # default = None, path2๊ฐ๋ ๊ฑฐ์ deprecated๋ ์ํ์ผ๋ฏ? | |
music_id = Column(Integer, ForeignKey("musics.id"), index=True) | |
rank = Column(Integer) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
title = Column(String, index=True) | |
music = relationship("Music", back_populates="visual_results") | |
plagiarism_rate = Column(Float) | |
data_pkl = Column(String) # data json์ธ๋ฐ ใ ใ .. column name ๋ฐ๊พธ๋ ค๋ค๊ฐ ํฐ์ง ์ ์์ด์.. | |
opened = Column(Boolean, default = False) | |
share_token = Column(String, default = None) | |
def __repr__(self): | |
return f"<Visual_Result(id={self.id}, name='{self.ko_path}')>" | |
class Monitoring_Visual_Result(Base): | |
__tablename__ = "monitoring_visual_results" | |
id = Column(Integer, primary_key=True) | |
music_id = Column(Integer, ForeignKey("musics.id"), index=True) | |
rank = Column(Integer) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
title = Column(String, index=True) | |
primary_artist = Column(String, index=True) | |
other_artist = Column(String) | |
distributor = Column(String, index=True) | |
release_date = Column(String) | |
additional_info = Column(JSON) | |
copyright_owner = Column(String) | |
music = relationship("Music", back_populates="monitoring_visual_results") | |
plagiarism_rate = Column(Float) | |
data_pkl = Column(String) | |
opened = Column(Boolean, default = False) | |
share_token = Column(String, default = None) | |
inst = Column(String) | |
def __repr__(self): | |
return f"<Visual_Result(id={self.id})>" | |
class Music(Base): # ์ ์ฒญ ๋ฐ์ ๊ณก | |
__tablename__ = "musics" | |
id = Column(Integer, primary_key=True, index=True) | |
music_path = Column(String) | |
preview_music_path = Column(String) | |
title = Column(String) # ์ด๊ฑฐ ์๋ง ์ ๋ํด์ผํ ๋ฏ? ์๋ง ๋ค์ด ์ดํ์ ๊ตฌํด์ง๊ฑฐ์. ๋ฌผ๋ก ๊ณก์ ์ ๋ก๋ํ๊ฒฝ์ฐ์๋ ๋ฐ๋ก ์ ๋๋ ๊ฐ๋ฅํ ๋ฏ | |
user_input = Column(String) # ์ด๊ฒ ๊ณก์ด๋ฉด music_path๋ ๋๊ฐ๊ณ , ๋งํฌ๋ฉด, ์ด๊ฑฐ๋ ๋งํฌ์ธ๋ฐ music_path๋ ์ฌ๊ธฐ ๋ก์ปฌ path์ | |
user_id = Column(Integer, ForeignKey("users.id")) | |
user = relationship("User", back_populates="musics") | |
results = relationship("Result", back_populates="music", cascade="all, delete-orphan") | |
visual_results = relationship("Visual_Result", back_populates="music", cascade="all, delete-orphan") | |
key_change = Column(Integer, default=0) | |
key = Column(String, nullable=True) | |
status = Column(String) | |
inst = Column(String) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
bpm = Column(Integer, nullable=True) | |
language = Column(String) | |
processed_in_aibackend = Column(Boolean) | |
is_monitoring = Column(Boolean, default=False) # ์๋ก์ด ์์ฑ ์ถ๊ฐ | |
monitoring_music = relationship("Monitoring_Music", back_populates="music") | |
monitoring_visual_results = relationship("Monitoring_Visual_Result", back_populates="music", cascade="all, delete-orphan") | |
ai_detection_musics = relationship("AI_Detection_Music", back_populates="music", cascade="all, delete-orphan") | |
deleted = Column(Boolean, default=False) | |
info_link = Column(String) | |
new_info_link = Column(String) | |
duration = Column(Float) | |
new_version = Column(Boolean, default = True) | |
credit = Column(Integer) | |
music_task = Column(String) #['monitoring', 'analysis', 'plagiarism_check','ai_detector',...] | |
# ์ด๊ฑฐ๋ก monitoring, 1v1, 1๋๋ค ๋ฑ๋ฑ ๊ตฌ๋ถํ ์ ์๋๋ก. ์ฅ๊ฐํ๋ฉด Adminํ์ธ์ฉ์ผ๋ก!. ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์จ๋ ๋๊ธดํ ๊ฑด๋ฐ enumํํ๋ ์๋๋ผ ๊น๋ค๋ก์ธ๊ฑฐ์ | |
opened = Column(Boolean, default = False) | |
def __repr__(self): | |
return f"<Music(id={self.id}, name='{self.title}')>" | |
def user_name(self): | |
return self.user.user_info.name if self.user and self.user.user_info else None | |
class Monitoring_Music(Base): | |
__tablename__ = "monitoring_musics" | |
id = Column(Integer, primary_key=True, index=True) | |
music_id = Column(Integer, ForeignKey("musics.id")) | |
music = relationship("Music", back_populates="monitoring_music") | |
title = Column(String) | |
artist = Column(String) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
release_date = Column(DateTime) | |
album_art = Column(String, default=get_random_album_art) | |
detected_count = Column(Integer, default=0) | |
find_count = Column(Integer, default=0) | |
criteria = Column(Integer) | |
mail_agree = Column(Boolean, default=False) | |
deleted = Column(Boolean, default=False) | |
deleted_reason = Column(String, nullable=True, default=None) | |
is_monitoring = Column(Boolean, default=True) | |
# ์จ๋ฒ๊ณผ์ ๊ด๊ณ. ์ฌ๊ธฐ์ ์จ๋ฒ์ ๋ชจ๋ํฐ๋ง์์๋ง ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค | |
album_id = Column(Integer, ForeignKey("albums.id"), nullable=True) # ์จ๋ฒ ID (์ต์ ) | |
album = relationship("Album", back_populates="monitoring_musics") # ์จ๋ฒ์ ๋ํ ์ญ์ฐธ์กฐ\ | |
track_number = Column(Integer, nullable=True) | |
def __repr__(self): | |
return f"<Monitoring_Music(id={self.id}, music_id={self.music_id})>" | |
def to_dict(self): | |
music_dict = {"id": self.id, "title": self.title, "artist": self.artist, | |
"requested_at": self.requested_at, "release_date": self.release_date, | |
"album_art": self.album_art, "detected_count": self.detected_count} | |
return music_dict | |
class Album(Base): | |
__tablename__ = "albums" | |
id = Column(Integer, primary_key=True, index=True) | |
user_id = Column(Integer, ForeignKey("users.id")) # ์จ๋ฒ ์์ ์ | |
user = relationship("User", back_populates="albums") | |
title = Column(String, nullable=False) # ์จ๋ฒ ์ ๋ชฉ | |
artist = Column(String) | |
album_art = Column(String, default=get_random_album_art) | |
created_at = Column(DateTime, default=datetime.utcnow) | |
deleted = Column(Boolean, default=False) | |
music_number = Column(Integer, default=0) | |
# ๋ชจ๋ํฐ๋ง ๊ณก๊ณผ์ ๊ด๊ณ | |
monitoring_musics = relationship("Monitoring_Music", back_populates="album") | |
def __repr__(self): | |
return f"<Album(id={self.id}, title='{self.title}')>" | |
class Now_Monitoring(Base): | |
__tablename__ = "now_monitoring" | |
id = Column(Integer, primary_key=True, index=True) | |
music_title = Column(String) | |
primary_artist = Column(String, index=True) | |
other_artist = Column(String) | |
distributor = Column(String, index=True) | |
release_date = Column(String) | |
additional_info = Column(JSON) | |
copyright_owner = Column(String) | |
now_index = Column(Integer, default=0) | |
class AI_Detection_Music(Base): | |
__tablename__ = "ai_detection_musics" | |
id = Column(Integer, primary_key=True, index=True) | |
user_id = Column(Integer, ForeignKey("users.id")) | |
music_id = Column(Integer, ForeignKey("musics.id")) | |
music = relationship("Music", back_populates="ai_detection_musics") | |
title = Column(String) | |
ai_percentage = Column(Float) | |
processed_in_ai_backend = Column(Boolean, default=False) | |
requested_at = Column(DateTime, default=datetime.utcnow) | |
vocal_percentage = Column(Float) | |
inst_percentage = Column(Float) | |
opened = Column(Boolean, default = False) | |
link = Column(String, default = None) | |
status = Column(String, default = None) | |
deleted = Column(Boolean, default=False) | |
user = relationship("User", back_populates="ai_detection_musics") | |
def to_dict(self): | |
return { | |
"id": self.id, | |
"music_id": self.music_id, | |
"title": self.title, | |
"ai_percentage": self.ai_percentage, | |
"processed_in_ai_backend": self.processed_in_ai_backend, | |
"requested_at": self.requested_at.isoformat() if self.requested_at else None, | |
"vocal_percentage": self.vocal_percentage, | |
"inst_percentage": self.inst_percentage | |
} | |