Opt database bootstrapping
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import os, click
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy import create_engine, inspect
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
# Import the full model package so SQLAlchemy registers every mapped class
|
||||
@@ -14,6 +14,7 @@ from ffx.constants import DATABASE_VERSION
|
||||
|
||||
|
||||
DATABASE_VERSION_KEY = 'database_version'
|
||||
EXPECTED_TABLE_NAMES = set(Base.metadata.tables.keys())
|
||||
|
||||
class DatabaseVersionException(Exception):
|
||||
def __init__(self, errorMessage):
|
||||
@@ -37,7 +38,7 @@ def databaseContext(databasePath: str = ''):
|
||||
databaseContext['engine'] = create_engine(databaseContext['url'])
|
||||
databaseContext['session'] = sessionmaker(bind=databaseContext['engine'])
|
||||
|
||||
Base.metadata.create_all(databaseContext['engine'])
|
||||
bootstrapDatabaseIfNeeded(databaseContext)
|
||||
|
||||
# isSyncronuous = False
|
||||
# while not isSyncronuous:
|
||||
@@ -54,6 +55,19 @@ def databaseContext(databasePath: str = ''):
|
||||
|
||||
return databaseContext
|
||||
|
||||
|
||||
def databaseNeedsBootstrap(databaseContext) -> bool:
|
||||
inspector = inspect(databaseContext['engine'])
|
||||
existingTableNames = set(inspector.get_table_names())
|
||||
return not EXPECTED_TABLE_NAMES.issubset(existingTableNames)
|
||||
|
||||
|
||||
def bootstrapDatabaseIfNeeded(databaseContext):
|
||||
if not databaseNeedsBootstrap(databaseContext):
|
||||
return
|
||||
|
||||
Base.metadata.create_all(databaseContext['engine'])
|
||||
|
||||
def ensureDatabaseVersion(databaseContext):
|
||||
|
||||
currentDatabaseVersion = getDatabaseVersion(databaseContext)
|
||||
|
||||
Reference in New Issue
Block a user