60 lines
2.2 KiB
Python
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}.")
|
|
|
|
|