1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
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.
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.
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/>.
18 from sqlalchemy
import create_engine
21 from mediagoblin
.db
.base
import Base
, Session
22 from mediagoblin
import mg_globals
24 _log
= logging
.getLogger(__name__
)
27 class DatabaseMaster(object):
28 def __init__(self
, engine
):
31 for k
, v
in Base
._decl
_class
_registry
.iteritems():
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.")
47 def reset_after_request(self
):
52 def load_models(app_config
):
53 import mediagoblin
.db
.models
55 for media_type
in app_config
['media_types']:
56 _log
.debug("Loading %s.models", media_type
)
57 __import__(media_type
+ ".models")
59 for plugin
in mg_globals
.global_config
.get('plugins', {}).keys():
60 _log
.debug("Loading %s.models", plugin
)
62 __import__(plugin
+ ".models")
63 except ImportError as exc
:
64 _log
.debug("Could not load {0}.models: {1}".format(
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
)
74 return DatabaseMaster(engine
)
77 def check_db_migrations_current(db
):