Source code for param_study.database
import os
from pathlib import Path
from typing import Optional, List
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, Boolean
from sqlalchemy.orm import sessionmaker
Path(f'{os.path.abspath(os.path.dirname(__file__))}/../../param_study').mkdir(parents=True, exist_ok=True)
engine = create_engine(f'sqlite:///{os.path.abspath(os.path.dirname(__file__))}/../../param_study/database.db')
Base = declarative_base()
Session = sessionmaker(bind=engine)
[docs]class TestCase(Base):
__tablename__ = 'test_cases'
id = Column(Integer, primary_key=True)
parameter_study_name = Column(String)
index = Column(Integer)
started = Column(Boolean)
finished = Column(Boolean)
[docs] @staticmethod
def create(parameter_study_name: str, index: int) -> 'TestCase':
test_case = TestCase()
test_case.parameter_study_name = parameter_study_name
test_case.index = index
test_case.started = False
test_case.finished = False
return test_case
[docs] @staticmethod
def find_next_unstarted_for_study(session: Session, parameter_study_name: str) -> Optional['TestCase']:
return session.query(TestCase).filter_by(parameter_study_name=parameter_study_name).filter_by(started=False).order_by(TestCase.index).first()
[docs] @staticmethod
def find_finished_for_study(session: Session, parameter_study_name: str) -> List['TestCase']:
return session.query(TestCase).filter_by(parameter_study_name=parameter_study_name).filter_by(finished=True).order_by(TestCase.index).all()
Base.metadata.create_all(engine)