Simplify check_media_slug_used
[mediagoblin.git] / mediagoblin / db / open.py
index b69876773a2c56b89b856505cd9316e2473970f4..d976acd850d033cd33c54952330698b296638bb9 100644 (file)
@@ -1,5 +1,5 @@
 # GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 Free Software Foundation, Inc
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 # 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/>.
 
-import mongokit
-from paste.deploy.converters import asint
-from mediagoblin.db import models
 
+from sqlalchemy import create_engine
+import logging
+
+from mediagoblin.db.base import Base, Session
+from mediagoblin import mg_globals
+
+_log = logging.getLogger(__name__)
+
+
+class DatabaseMaster(object):
+    def __init__(self, engine):
+        self.engine = engine
+
+        for k, v in Base._decl_class_registry.iteritems():
+            setattr(self, k, v)
+
+    def commit(self):
+        Session.commit()
+
+    def save(self, obj):
+        Session.add(obj)
+        Session.flush()
+
+    def check_session_clean(self):
+        for dummy in Session():
+            _log.warn("STRANGE: There are elements in the sql session. "
+                      "Please report this and help us track this down.")
+            break
+
+    def reset_after_request(self):
+        Session.rollback()
+        Session.remove()
+
+
+def load_models(app_config):
+    import mediagoblin.db.models
+
+    for media_type in app_config['media_types']:
+        _log.debug("Loading %s.models", media_type)
+        __import__(media_type + ".models")
+
+    for plugin in mg_globals.global_config.get('plugins', {}).keys():
+        _log.debug("Loading %s.models", plugin)
+        try:
+            __import__(plugin + ".models")
+        except ImportError as exc:
+            _log.debug("Could not load {0}.models: {1}".format(
+                plugin,
+                exc))
 
-def connect_database_from_config(app_config):
-    """Connect to the main database, take config from app_config"""
-    port = app_config.get('db_port')
-    if port:
-        port = asint(port)
-    connection = mongokit.Connection(
-        app_config.get('db_host'), port)
-    return connection
 
 def setup_connection_and_db_from_config(app_config):
-    connection = connect_database_from_config(app_config)
-    database_path = app_config['db_name']
-    db = connection[database_path]
-    models.register_models(connection)
-    # Could configure indexes here on db
-    return (connection, db)
+    engine = create_engine(app_config['sql_engine'])
+    # logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
+    Session.configure(bind=engine)
+
+    return DatabaseMaster(engine)
+
+
+def check_db_migrations_current(db):
+    pass