diff --git a/invisible_cities/database/db_connection.py b/invisible_cities/database/db_connection.py index b401cdbe39..be5a8b2d6c 100644 --- a/invisible_cities/database/db_connection.py +++ b/invisible_cities/database/db_connection.py @@ -17,3 +17,10 @@ def connect_mysql(dbname): user='nextreader',passwd='readonly', db=dbname) cursor_mysql = conn_mysql .cursor() return connect_mysql, cursor_mysql + +@mark.skip(reason='server timeouts cause too many spurious test failures') +def connect_dolt_mysql(dbname): + conn_mysql = pymysql.connect(host="next.ific.uv.es", port=3307, + user='nextreader',passwd='readonly', db=dbname) + cursor_mysql = conn_mysql .cursor() + return connect_mysql, cursor_mysql diff --git a/invisible_cities/database/download.py b/invisible_cities/database/download.py index 844425e94f..9ddd5c32b8 100644 --- a/invisible_cities/database/download.py +++ b/invisible_cities/database/download.py @@ -5,11 +5,13 @@ import os import re from os import path +from datetime import datetime # Absolute imports to allow usage as standalone program: # python invisible_cities/database/download.py from invisible_cities.database.db_connection import connect_sqlite from invisible_cities.database.db_connection import connect_mysql +from invisible_cities.database.db_connection import connect_dolt_mysql def create_table_sqlite(cursorSqlite, cursorMySql, table): @@ -70,6 +72,27 @@ def loadDB(dbname : str, tables : list): # Copy data copy_all_rows(conn_sqlite, cursor_sqlite, cursor_mysql, table) +def write_db_version(dbname: str): + dbfile = path.join(os.environ['ICDIR'], 'database/localdb.'+dbname+'.sqlite3') + try: + conn_mysql , cursor_mysql = connect_dolt_mysql(dbname) + except pymysql.err.OperationalError: + print(f"DB versioning not implemented for database {dbname}") + return + conn_sqlite, cursor_sqlite = connect_sqlite(dbfile) + sql = 'select commit_hash, date from dolt_diff order by date desc limit 1' + cursor_mysql.execute(sql) + data = cursor_mysql.fetchall() + if len(data) == 1: + db_version = data[0][0] + date = data[0][1] + timestamp = datetime.timestamp(date) + sql_table = "create table db_version(version VARCHAR(20), date timestamp null)" + cursor_sqlite.execute(sql_table) + sql_value = f'insert into db_version (version, date) values ("{db_version}", {timestamp})' + cursor_sqlite.execute(sql_value) + conn_sqlite.commit() + dbnames = ('NEWDB', 'DEMOPPDB', 'NEXT100DB', 'Flex100DB') common_tables = ('DetectorGeo','PmtBlr','ChannelGain','ChannelMapping','ChannelMask', @@ -85,6 +108,8 @@ def loadDB(dbname : str, tables : list): if len(sys.argv) > 1: dbname = sys.argv[1] loadDB(dbname, table_dict[dbname]) + write_db_version(dbname) else: for dbname, tables in table_dict.items(): loadDB(dbname, tables) + write_db_version(dbname) diff --git a/invisible_cities/database/load_db.py b/invisible_cities/database/load_db.py index a7dec46f45..e8b43df5fe 100644 --- a/invisible_cities/database/load_db.py +++ b/invisible_cities/database/load_db.py @@ -163,3 +163,13 @@ def RadioactivityData(db_file, version=None): return ( activity .drop(columns="MAX(Version)") , efficiency.drop(columns="MAX(Version)")) + +def read_db_version(db_file): + conn = sqlite3.connect(get_db(db_file)) + sql = 'select * from db_version' + try: + data = pd.read_sql_query(sql, conn) + return data + except pd.io.sql.DatabaseError: + # Deal with this... + print("Database does not have db_version table")