diff options
author | Sebastian Spaeth <Sebastian@SSpaeth.de> | 2012-11-30 09:32:25 +0100 |
---|---|---|
committer | Sebastian Spaeth <Sebastian@SSpaeth.de> | 2012-12-25 20:09:43 +0100 |
commit | 6eddc3b75e7cdf1e4d4015aeeccff6e250b10558 (patch) | |
tree | d024ef632e3fbf11c6cc716df6e9c58be6c0e0b3 /mediagoblin/db/open.py | |
parent | bc142abc5592975c08319416d0af12c108504887 (diff) | |
download | mediagoblin-6eddc3b75e7cdf1e4d4015aeeccff6e250b10558.tar.lz mediagoblin-6eddc3b75e7cdf1e4d4015aeeccff6e250b10558.tar.xz mediagoblin-6eddc3b75e7cdf1e4d4015aeeccff6e250b10558.zip |
Move db.sql.open to db.open
Now that mongo has been ripped out and sqlalchemy is already providing
the database abstraction, there is no need to hide everything in the sql
module. Transition db.sql.open to db.open and adapt all direct importers.
Diffstat (limited to 'mediagoblin/db/open.py')
-rw-r--r-- | mediagoblin/db/open.py | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/mediagoblin/db/open.py b/mediagoblin/db/open.py index e32d8853..801c92ea 100644 --- a/mediagoblin/db/open.py +++ b/mediagoblin/db/open.py @@ -14,6 +14,65 @@ # 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 mediagoblin.db.sql.open import \ - setup_connection_and_db_from_config, check_db_migrations_current, \ - load_models + +from sqlalchemy import create_engine +import logging + +from mediagoblin.db.sql.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.sql.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 setup_connection_and_db_from_config(app_config): + 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 |