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)