Source code for pylhc_submitter.sixdesk_tools.extract_data_from_db
"""
Extract Data From DataBase
-----------------------------
These functions operate on the SixDesk database and help to extract data
form it.
TODO: Implement extraction of data into ``.csv`` (and/or tfs?)
like fvanderv does.
"""
from __future__ import annotations
import logging
import sqlite3 as sql
from contextlib import contextmanager
from typing import TYPE_CHECKING
import pandas as pd
from tfs import TfsDataFrame
from pylhc_submitter.constants.autosix import (
ALOST1,
ALOST2,
AMP,
ANGLE,
MAX,
MIN,
SEED,
get_database_path,
)
if TYPE_CHECKING:
from pathlib import Path
LOG = logging.getLogger(__name__)
[docs]
def extract_da_data(jobname: str, basedir: Path) -> TfsDataFrame:
"""Extract DA data directly from the database.
Args:
jobname (str): Name of the Job
basedir (Path): SixDesk Basefolder Location
"""
with _get_database(jobname, basedir) as db:
df_da = pd.read_sql(
"SELECT seed, angle, alost1, alost2, Amin, Amax FROM da_post ORDER BY seed, angle", db
)
df_da = df_da.rename(
columns={
"seed": SEED,
"angle": ANGLE,
"alost1": ALOST1,
"alost2": ALOST2,
"Amin": f"{MIN}{AMP}",
"Amax": f"{MAX}{AMP}",
}
)
return TfsDataFrame(df_da)
[docs]
def extract_meta_data(jobname: str, basedir: Path) -> TfsDataFrame:
"""Extract the meta-data directly from the database.
Args:
jobname (str): Name of the Job
basedir (Path): SixDesk Basefolder Location
"""
with _get_database(jobname, basedir) as db:
df_da = pd.read_sql("SELECT keyname, value FROM env", db)
return TfsDataFrame(df_da)
@contextmanager
def _get_database(jobname, basedir):
"""Context to connect to DataBase and always close the connection afterwards.
Args:
jobname (str): Name of the Job
basedir (Path): SixDesk Basefolder Location
"""
db_path = get_database_path(jobname, basedir)
db = sql.connect(db_path)
yield db
db.close()