onscreen-translator/data.py

60 lines
2.2 KiB
Python

from sqlalchemy import create_engine, Column, Index, Integer, String, MetaData, Table, DateTime, ForeignKey, Boolean
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import relationship, declarative_base, sessionmaker
import logging
from logging_config import logger
import os
# Set up the database connection
data_dir = os.path.join(os.path.dirname(__file__), 'database')
os.makedirs(data_dir, exist_ok=True)
database_file = os.path.join(os.path.dirname(__file__), data_dir, 'translations.db')
engine = create_engine(f'sqlite:///{database_file}', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING)
class Api(Base):
__tablename__ = 'api'
id = Column(Integer, primary_key=True, autoincrement=True)
model_name = Column(String, nullable=False)
site = Column(Integer, nullable=False)
rpmin = Column(Integer) # rate per minute
rph = Column(Integer) # rate per hour
rpd = Column(Integer) # rate per day
rpw = Column(Integer) # rate per week
rpmth = Column(Integer) # rate per month
rpy = Column(Integer) # rate per year
translations = relationship("Translations", back_populates="api")
class Translations(Base):
__tablename__ = 'translations'
id = Column(Integer, primary_key=True, autoincrement=True)
model_id = Column(Integer, ForeignKey('api.id'), nullable=False)
source_texts = Column(String, nullable=False) # as a json string
translated_texts = Column(String, nullable=False) # as a json string
source_lang = Column(String, nullable=False)
target_lang = Column(String, nullable=False)
timestamp = Column(DateTime, nullable=False)
translation_mismatch = Column(Boolean, nullable=False)
api = relationship("Api", back_populates="translations")
__table_args__ = (
Index('idx_timestamp', 'timestamp'),
)
def create_tables():
if not os.path.exists(database_file):
Base.metadata.create_all(engine)
logger.info(f"Database created at {database_file}")
else:
logger.info(f"Using Pre-existing Database at {database_file}.")