Attach the MediaGoblinApp to the engine, and provide a way for models to access
This allows SQLAlchemy models to gain access to app-level configuration without the need for global variables. This commit sponsored by Peter Hogg. Thank you, Peter!
This commit is contained in:
parent
5e5ea4a3e9
commit
7c563e91bf
@ -108,9 +108,9 @@ class MediaGoblinApp(object):
|
|||||||
|
|
||||||
# Set up the database
|
# Set up the database
|
||||||
if DISABLE_GLOBALS:
|
if DISABLE_GLOBALS:
|
||||||
self.db_manager = setup_database(self.app_config['run_migrations'])
|
self.db_manager = setup_database(self)
|
||||||
else:
|
else:
|
||||||
self.db = setup_database(self.app_config['run_migrations'])
|
self.db = setup_database(self)
|
||||||
|
|
||||||
# Quit app if need to run dbupdate
|
# Quit app if need to run dbupdate
|
||||||
## NOTE: This is currently commented out due to session errors..
|
## NOTE: This is currently commented out due to session errors..
|
||||||
|
@ -30,6 +30,10 @@ class GMGTableBase(object):
|
|||||||
def _session(self):
|
def _session(self):
|
||||||
return inspect(self).session
|
return inspect(self).session
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _app(self):
|
||||||
|
return self._session.bind.app
|
||||||
|
|
||||||
if not DISABLE_GLOBALS:
|
if not DISABLE_GLOBALS:
|
||||||
query = Session.query_property()
|
query = Session.query_property()
|
||||||
|
|
||||||
|
@ -158,9 +158,14 @@ def _sqlite_disable_fk_pragma_on_connect(dbapi_con, con_record):
|
|||||||
dbapi_con.execute('pragma foreign_keys=off')
|
dbapi_con.execute('pragma foreign_keys=off')
|
||||||
|
|
||||||
|
|
||||||
def setup_connection_and_db_from_config(app_config, migrations=False):
|
def setup_connection_and_db_from_config(app_config, migrations=False, app=None):
|
||||||
engine = create_engine(app_config['sql_engine'])
|
engine = create_engine(app_config['sql_engine'])
|
||||||
|
|
||||||
|
# @@: Maybe make a weak-ref so an engine can get garbage
|
||||||
|
# collected? Not that we expect to make a lot of MediaGoblinApp
|
||||||
|
# instances in a single process...
|
||||||
|
engine.app = app
|
||||||
|
|
||||||
# Enable foreign key checking for sqlite
|
# Enable foreign key checking for sqlite
|
||||||
if app_config['sql_engine'].startswith('sqlite://'):
|
if app_config['sql_engine'].startswith('sqlite://'):
|
||||||
if migrations:
|
if migrations:
|
||||||
|
@ -60,14 +60,16 @@ def setup_global_and_app_config(config_path):
|
|||||||
return global_config, app_config
|
return global_config, app_config
|
||||||
|
|
||||||
|
|
||||||
def setup_database(run_migrations=False):
|
def setup_database(app):
|
||||||
app_config = mg_globals.app_config
|
app_config = app.app_config
|
||||||
global_config = mg_globals.global_config
|
global_config = app.global_config
|
||||||
|
run_migrations = app_config['run_migrations']
|
||||||
|
|
||||||
# Load all models for media types (plugins, ...)
|
# Load all models for media types (plugins, ...)
|
||||||
load_models(app_config)
|
load_models(app_config)
|
||||||
# Set up the database
|
# Set up the database
|
||||||
db = setup_connection_and_db_from_config(app_config, run_migrations)
|
db = setup_connection_and_db_from_config(
|
||||||
|
app_config, run_migrations, app=app)
|
||||||
if run_migrations:
|
if run_migrations:
|
||||||
#Run the migrations to initialize/update the database.
|
#Run the migrations to initialize/update the database.
|
||||||
from mediagoblin.gmg_commands.dbupdate import run_all_migrations
|
from mediagoblin.gmg_commands.dbupdate import run_all_migrations
|
||||||
|
Loading…
x
Reference in New Issue
Block a user