Improved test runtime from 352 seconds to 59 seconds by implementing an in-memory sqlite DB and including an option to run migrations on this newly created database by adding a config option called run_migrations to the config_spec and passing it along in app.py to the setup_database function.
This commit is contained in:
parent
c1b342ba95
commit
4a698535bc
@ -86,7 +86,7 @@ class MediaGoblinApp(object):
|
|||||||
setup_plugins()
|
setup_plugins()
|
||||||
|
|
||||||
# Set up the database
|
# Set up the database
|
||||||
self.db = setup_database()
|
self.db = setup_database(app_config['run_migrations'])
|
||||||
|
|
||||||
# Register themes
|
# Register themes
|
||||||
self.theme_registry, self.current_theme = register_themes(app_config)
|
self.theme_registry, self.current_theme = register_themes(app_config)
|
||||||
|
@ -10,7 +10,8 @@ media_types = string_list(default=list("mediagoblin.media_types.image"))
|
|||||||
|
|
||||||
# database stuff
|
# database stuff
|
||||||
sql_engine = string(default="sqlite:///%(here)s/mediagoblin.db")
|
sql_engine = string(default="sqlite:///%(here)s/mediagoblin.db")
|
||||||
|
# Flag used during testing to determine if migrations should be run before the ORM is loaded
|
||||||
|
run_migrations = boolean(default=False)
|
||||||
# Where temporary files used in processing and etc are kept
|
# Where temporary files used in processing and etc are kept
|
||||||
workbench_path = string(default="%(here)s/user_dev/media/workbench")
|
workbench_path = string(default="%(here)s/user_dev/media/workbench")
|
||||||
|
|
||||||
|
@ -110,14 +110,22 @@ def run_dbupdate(app_config, global_config):
|
|||||||
in the future, plugins)
|
in the future, plugins)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Set up the database
|
||||||
|
db = setup_connection_and_db_from_config(app_config, migrations=True)
|
||||||
|
#Run the migrations
|
||||||
|
run_all_migrations(db, app_config, global_config)
|
||||||
|
|
||||||
|
|
||||||
|
def run_all_migrations(db, app_config, global_config):
|
||||||
|
"""
|
||||||
|
Moved the migration part of run_dbupdate to a separate function so
|
||||||
|
it can be used to initialize the database during tests.
|
||||||
|
"""
|
||||||
# Gather information from all media managers / projects
|
# Gather information from all media managers / projects
|
||||||
dbdatas = gather_database_data(
|
dbdatas = gather_database_data(
|
||||||
app_config['media_types'],
|
app_config['media_types'],
|
||||||
global_config.get('plugins', {}).keys())
|
global_config.get('plugins', {}).keys())
|
||||||
|
|
||||||
# Set up the database
|
|
||||||
db = setup_connection_and_db_from_config(app_config, migrations=True)
|
|
||||||
|
|
||||||
Session = sessionmaker(bind=db.engine)
|
Session = sessionmaker(bind=db.engine)
|
||||||
|
|
||||||
# Setup media managers for all dbdata, run init/migrate and print info
|
# Setup media managers for all dbdata, run init/migrate and print info
|
||||||
|
@ -58,16 +58,20 @@ def setup_global_and_app_config(config_path):
|
|||||||
return global_config, app_config
|
return global_config, app_config
|
||||||
|
|
||||||
|
|
||||||
def setup_database():
|
def setup_database(run_migrations=False):
|
||||||
app_config = mg_globals.app_config
|
app_config = mg_globals.app_config
|
||||||
|
global_config = mg_globals.global_config
|
||||||
|
|
||||||
# Load all models for media types (plugins, ...)
|
# Load all models for media types (plugins, ...)
|
||||||
load_models(app_config)
|
load_models(app_config)
|
||||||
|
|
||||||
# Set up the database
|
# Set up the database
|
||||||
db = setup_connection_and_db_from_config(app_config)
|
db = setup_connection_and_db_from_config(app_config, run_migrations)
|
||||||
|
if run_migrations:
|
||||||
check_db_migrations_current(db)
|
#Run the migrations to initialize/update the database.
|
||||||
|
from mediagoblin.gmg_commands.dbupdate import run_all_migrations
|
||||||
|
run_all_migrations(db, app_config, global_config)
|
||||||
|
else:
|
||||||
|
check_db_migrations_current(db)
|
||||||
|
|
||||||
setup_globals(database=db)
|
setup_globals(database=db)
|
||||||
|
|
||||||
|
@ -3,8 +3,9 @@ direct_remote_path = /test_static/
|
|||||||
email_sender_address = "notice@mediagoblin.example.org"
|
email_sender_address = "notice@mediagoblin.example.org"
|
||||||
email_debug_mode = true
|
email_debug_mode = true
|
||||||
|
|
||||||
# TODO: Switch to using an in-memory database
|
#Runs with an in-memory sqlite db for speed.
|
||||||
sql_engine = "sqlite:///%(here)s/user_dev/mediagoblin.db"
|
sql_engine = "sqlite://"
|
||||||
|
run_migrations = true
|
||||||
|
|
||||||
# Celery shouldn't be set up by the application as it's setup via
|
# Celery shouldn't be set up by the application as it's setup via
|
||||||
# mediagoblin.init.celery.from_celery
|
# mediagoblin.init.celery.from_celery
|
||||||
|
@ -3,8 +3,9 @@ direct_remote_path = /test_static/
|
|||||||
email_sender_address = "notice@mediagoblin.example.org"
|
email_sender_address = "notice@mediagoblin.example.org"
|
||||||
email_debug_mode = true
|
email_debug_mode = true
|
||||||
|
|
||||||
# TODO: Switch to using an in-memory database
|
#Runs with an in-memory sqlite db for speed.
|
||||||
sql_engine = "sqlite:///%(here)s/user_dev/mediagoblin.db"
|
sql_engine = "sqlite://"
|
||||||
|
run_migrations = true
|
||||||
|
|
||||||
# Celery shouldn't be set up by the application as it's setup via
|
# Celery shouldn't be set up by the application as it's setup via
|
||||||
# mediagoblin.init.celery.from_celery
|
# mediagoblin.init.celery.from_celery
|
||||||
|
@ -3,8 +3,9 @@ direct_remote_path = /test_static/
|
|||||||
email_sender_address = "notice@mediagoblin.example.org"
|
email_sender_address = "notice@mediagoblin.example.org"
|
||||||
email_debug_mode = true
|
email_debug_mode = true
|
||||||
|
|
||||||
# TODO: Switch to using an in-memory database
|
#Runs with an in-memory sqlite db for speed.
|
||||||
sql_engine = "sqlite:///%(here)s/user_dev/mediagoblin.db"
|
sql_engine = "sqlite://"
|
||||||
|
run_migrations = true
|
||||||
|
|
||||||
# tag parsing
|
# tag parsing
|
||||||
tags_max_length = 50
|
tags_max_length = 50
|
||||||
|
Loading…
x
Reference in New Issue
Block a user