Add commit argument to clean_orphan_tags
[mediagoblin.git] / mediagoblin / db / sql / open.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
18 from sqlalchemy import create_engine
19 import logging
20
21 from mediagoblin.db.sql.base import Base, Session
22 from mediagoblin import mg_globals
23
24 _log = logging.getLogger(__name__)
25
26
27 class DatabaseMaster(object):
28 def __init__(self, engine):
29 self.engine = engine
30
31 for k, v in Base._decl_class_registry.iteritems():
32 setattr(self, k, v)
33
34 def commit(self):
35 Session.commit()
36
37 def save(self, obj):
38 Session.add(obj)
39 Session.flush()
40
41 def check_session_clean(self):
42 for dummy in Session():
43 _log.warn("STRANGE: There are elements in the sql session. "
44 "Please report this and help us track this down.")
45 break
46
47 def reset_after_request(self):
48 Session.rollback()
49 Session.remove()
50
51
52 def load_models(app_config):
53 import mediagoblin.db.sql.models
54
55 for media_type in app_config['media_types']:
56 _log.debug("Loading %s.models", media_type)
57 __import__(media_type + ".models")
58
59 for plugin in mg_globals.global_config.get('plugins', {}).keys():
60 _log.debug("Loading %s.models", plugin)
61 try:
62 __import__(plugin + ".models")
63 except ImportError as exc:
64 _log.debug("Could not load {0}.models: {1}".format(
65 plugin,
66 exc))
67
68
69 def setup_connection_and_db_from_config(app_config):
70 engine = create_engine(app_config['sql_engine'])
71 # logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
72 Session.configure(bind=engine)
73
74 return "dummy conn", DatabaseMaster(engine)
75
76
77 def check_db_migrations_current(db):
78 pass