def _create_tables(self, metadata=None, use_autoincrement=True, session_id_start=1000): """Create all the relevant tables. Parameters ---------- metadata : sqlalchemy.MetaData The instance for holding the relevant tables. use_autoincrement: bool A flag to set auto increment behavior on the Session table. session_id_start : int A new starting session Id for counting new simulations. """ if metadata is None: metadata = self.metadata self.session = tables.create_session(metadata, use_autoincrement, session_id_start) self.field = tables.create_field(metadata) self.target_history = tables.create_target_history(metadata) self.observation_history = tables.create_observation_history(metadata) self.slew_history = tables.create_slew_history(metadata) self.slew_initial_state = tables.create_slew_initial_state(metadata) self.slew_final_state = tables.create_slew_final_state(metadata) self.slew_activities = tables.create_slew_activities(metadata) self.slew_maxspeeds = tables.create_slew_maxspeeds(metadata) self.target_exposures = tables.create_target_exposures(metadata) self.observation_exposures = tables.create_observation_exposures(metadata) self.scheduled_downtime = tables.create_scheduled_downtime(metadata) self.unscheduled_downtime = tables.create_unscheduled_downtime(metadata) self.proposal = tables.create_proposal(metadata) self.observation_proposal_history = tables.create_observation_proposal_history(metadata) self.target_proposal_history = tables.create_target_proposal_history(metadata) self.config = tables.create_config(metadata) # self.seeing = tables.create_seeing(metadata) # self.cloud = tables.create_cloud(metadata) self.summary_all_props = tables.create_summary_all_props(metadata, self.observation_history, self.slew_history, self.slew_initial_state, self.proposal, self.observation_proposal_history, self.field)
def __init__(self, dialect="mysql", mysql_config_path=None, sqlite_save_path=None, session_id_start=None): """Initialize the class. Parameters ---------- dialect : str The flavor of the database to use. Options: mysql or sqlite. mysql_config_path : str An alternate path for the .my.cnf configuration file for MySQL. sqlite_save_path : str A path to save all resulting database files for SQLite. session_id_start : int A new starting session Id for counting new simulations. """ self.db_name = "SocsDB" self.log = logging.getLogger("database.SocsDatabase") self.db_dialect = dialect self.session_id = -1 self.session_start = session_id_start if session_id_start is not None else 1000 self.metadata = MetaData() self.engine = None self.mysql_config_path = mysql_config_path self.sqlite_save_path = sqlite_save_path # Parameters for SQLite operations self.session_engine = None self.session_metadata = MetaData() if self.db_dialect == "mysql": self._create_tables(session_id_start=self.session_start) self.engine = self._make_engine() if self.db_dialect == "sqlite": self.session_tracking = tables.create_session(self.metadata, autoincrement=False) sqlite_session_tracking_db = "{}_sessions.db".format(get_hostname()) self.engine = self._make_engine(sqlite_session_tracking_db) # Parameter for holding data lists self.data_list = collections.defaultdict(list)