Source code for bout_runners.metadata.metadata_updater

"""Module containing the MetadataUpdater class."""


from datetime import datetime
from typing import Union

from bout_runners.database.database_connector import DatabaseConnector
from bout_runners.database.database_writer import DatabaseWriter


[docs]class MetadataUpdater: r""" Class which updates dynamic data about the run. Attributes ---------- __db_writer : DatabaseWriter Class used to write to the database run_id : int The id of the run to update Methods ------- update_start_time(start_time) Update the start time update_end_time(end_time) Update the end time update_latest_status(status) Update the latest status Examples -------- >>> from pathlib import Path >>> from datetime import datetime >>> from bout_runners.database.database_connector import DatabaseConnector >>> db_root_path = Path().joinpath('path', 'to', 'db_root') >>> db_connector = DatabaseConnector('name_of_db', db_root_path) >>> run_id = 1 # This must be a valid id in the run table >>> metadata_updater = MetadataUpdater(db_connector, run_id) >>> metadata_updater.update_start_time(datetime.now()) >>> metadata_updater.update_stop_time(datetime.now()) >>> metadata_updater.update_latest_status('error') """ def __init__(self, db_connector: DatabaseConnector, run_id: int) -> None: """ Set the database and id to use. Parameters ---------- db_connector : DatabaseConnector The database connector run_id : int The id of the run to update """ self.__db_writer = DatabaseWriter(db_connector) self.run_id = run_id
[docs] def update_start_time(self, start_time: datetime) -> None: """ Update the start time. Parameters ---------- start_time : datetime The start time of the execution """ self.update_field("start_time", start_time)
[docs] def update_stop_time(self, end_time: datetime) -> None: """ Update the end time. Parameters ---------- end_time : datetime The end time of the execution """ self.update_field("stop_time", end_time)
[docs] def update_latest_status(self, status: str) -> None: """ Update the latest status. Parameters ---------- status : str The latest status """ self.update_field("latest_status", status)
[docs] def update_field(self, column: str, value: Union[datetime, str]) -> None: """ Update a field with a certain row in the run table. Parameters ---------- column : str The column to update value : object The updating value """ update_str = self.__db_writer.create_update_string( field_names=(column,), table_name="run", search_condition=f"id = {self.run_id}", ) self.__db_writer.update(update_str, (value,))