Improved test runtime from 352 seconds to 59 seconds by implementing an in-memory...
[mediagoblin.git] / mediagoblin / init / __init__.py
index ab6e6399b27c097583a7e5bb4ffbd4b4b0db18f2..e0711416378cbf4c1e5cf7ceb874297a544bffb3 100644 (file)
@@ -14,8 +14,6 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from beaker.cache import CacheManager
-from beaker.util import parse_cache_config_options
 import jinja2
 
 from mediagoblin.tools import staticdirect
@@ -26,7 +24,8 @@ from mediagoblin import mg_globals
 from mediagoblin.mg_globals import setup_globals
 from mediagoblin.db.open import setup_connection_and_db_from_config, \
     check_db_migrations_current, load_models
-from mediagoblin.workbench import WorkbenchManager
+from mediagoblin.tools.pluginapi import hook_runall
+from mediagoblin.tools.workbench import WorkbenchManager
 from mediagoblin.storage import storage_system_from_config
 
 
@@ -59,16 +58,20 @@ def setup_global_and_app_config(config_path):
     return global_config, app_config
 
 
-def setup_database():
+def setup_database(run_migrations=False):
     app_config = mg_globals.app_config
+    global_config = mg_globals.global_config
 
     # Load all models for media types (plugins, ...)
     load_models(app_config)
-
     # Set up the database
-    db = setup_connection_and_db_from_config(app_config)
-
-    check_db_migrations_current(db)
+    db = setup_connection_and_db_from_config(app_config, run_migrations)
+    if run_migrations:
+        #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)
 
@@ -118,6 +121,12 @@ def get_staticdirector(app_config):
     direct_domains = {None: app_config['direct_remote_path'].strip()}
     direct_domains['theme'] = app_config['theme_web_path'].strip()
 
+    # Let plugins load additional paths
+    for plugin_static in hook_runall("static_setup"):
+        direct_domains[plugin_static.name] = "%s/%s" % (
+            app_config['plugin_web_path'].rstrip('/'),
+            plugin_static.name)
+
     return staticdirect.StaticDirect(
         direct_domains)
 
@@ -146,16 +155,3 @@ def setup_workbench():
     workbench_manager = WorkbenchManager(app_config['workbench_path'])
 
     setup_globals(workbench_manager=workbench_manager)
-
-
-def setup_beaker_cache():
-    """
-    Setup the Beaker Cache manager.
-    """
-    cache_config = mg_globals.global_config['beaker.cache']
-    cache_config = dict(
-        [(u'cache.%s' % key, value)
-         for key, value in cache_config.iteritems()])
-    cache = CacheManager(**parse_cache_config_options(cache_config))
-    setup_globals(cache=cache)
-    return cache