Create load_models().
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Tue, 20 Mar 2012 11:39:15 +0000 (12:39 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Tue, 20 Mar 2012 11:45:40 +0000 (12:45 +0100)
So all models are ready when connecting to the db and so
our "db" object has all models listed on it, create a
function to load all models from the media_types, etc. Call
it in setup_database()

Problem: This gives celery warnings, because celery is
imported before being setup properly. No idea how to fix
this now. So media-type loading is excluded from
load_models for now.

mediagoblin/db/mongo/open.py
mediagoblin/db/open.py
mediagoblin/db/sql/open.py
mediagoblin/init/__init__.py

index bedc497bc443ca0dfd088379f98d2930cb147dc7..c4f37b42adfa4607f3f7c3ef32047ff61e0d3da5 100644 (file)
@@ -21,6 +21,10 @@ from mediagoblin.db.mongo import models
 from mediagoblin.db.mongo.util import MigrationManager
 
 
+def load_models(app_config):
+    pass
+
+
 def connect_database_from_config(app_config, use_pymongo=False):
     """
     Connect to the main database, take config from app_config
index 0163469ffb2c191a10d4b55f14e993e5f7ad52e6..f4c38511a4cf2a48a5263ec5324622308ddde6c7 100644 (file)
@@ -21,7 +21,9 @@ except ImportError:
 
 if use_sql:
     from mediagoblin.db.sql.open import \
-        setup_connection_and_db_from_config, check_db_migrations_current
+        setup_connection_and_db_from_config, check_db_migrations_current, \
+        load_models
 else:
     from mediagoblin.db.mongo.open import \
-        setup_connection_and_db_from_config, check_db_migrations_current
+        setup_connection_and_db_from_config, check_db_migrations_current, \
+        load_models
index 7362b1c588fe37dc67e11e9ebbf61c5f0a82da77..2520bb49b5f2496de2337f37d839617da20c94c1 100644 (file)
@@ -20,6 +20,8 @@ import logging
 
 from mediagoblin.db.sql.base import Base, Session
 
+_log = logging.getLogger(__name__)
+
 
 class DatabaseMaster(object):
     def __init__(self, engine):
@@ -40,6 +42,16 @@ class DatabaseMaster(object):
         Session.remove()
 
 
+def load_models(app_config):
+    import mediagoblin.db.sql.models
+
+    # TODO/Fix: This breaks celery
+    if False:
+        for media_type in app_config['media_types']:
+            _log.debug("Loading %s.models", media_type)
+            __import__(media_type + ".models")
+
+
 def setup_connection_and_db_from_config(app_config):
     engine = create_engine(app_config['sql_engine'])
     # logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
index 7ac59db1a4379250ebe85f53b61659a4969bbaaf..1d8115cbec9b4fc6bec8e3b6be3f7ad43278e6a2 100644 (file)
@@ -24,7 +24,7 @@ from mediagoblin.init.config import (
 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
+    check_db_migrations_current, load_models
 from mediagoblin.workbench import WorkbenchManager
 from mediagoblin.storage import storage_system_from_config
 
@@ -56,6 +56,9 @@ def setup_global_and_app_config(config_path):
 def setup_database():
     app_config = mg_globals.app_config
 
+    # Load all models for media types (plugins, ...)
+    load_models(app_config)
+
     # Set up the database
     connection, db = setup_connection_and_db_from_config(app_config)