Merge remote branch 'remotes/aaronw/feature410_markdown_bio'
[mediagoblin.git] / mediagoblin / app.py
index d2a0695ebdfee555248a736d022ee84313467656..7a6a1f33c7c4610a7dcf32dc98d048a35d97d4fa 100644 (file)
@@ -20,17 +20,13 @@ import urllib
 import routes
 from webob import Request, exc
 
-from mediagoblin import routing, util, storage, staticdirect
-from mediagoblin.config import (
-    read_mediagoblin_config, generate_validation_report)
+from mediagoblin import routing, util, storage
 from mediagoblin.db.open import setup_connection_and_db_from_config
+from mediagoblin.db.util import MigrationManager
 from mediagoblin.mg_globals import setup_globals
-from mediagoblin.celery_setup import setup_celery_from_config
-from mediagoblin.workbench import WorkbenchManager
-
-
-class Error(Exception): pass
-class ImproperlyConfigured(Error): pass
+from mediagoblin.init.celery import setup_celery_from_config
+from mediagoblin.init import get_jinja_loader, get_staticdirector, \
+    setup_global_and_app_config, setup_workbench
 
 
 class MediaGoblinApp(object):
@@ -54,13 +50,7 @@ class MediaGoblinApp(object):
         ##############
 
         # Open and setup the config
-        global_config, validation_result = read_mediagoblin_config(config_path)
-        app_config = global_config['mediagoblin']
-        # report errors if necessary
-        validation_report = generate_validation_report(
-            global_config, validation_result)
-        if validation_report:
-            raise ImproperlyConfigured(validation_report)
+        global_config, app_config = setup_global_and_app_config(config_path)
 
         ##########################################
         # Setup other connections / useful objects
@@ -70,33 +60,31 @@ class MediaGoblinApp(object):
         self.connection, self.db = setup_connection_and_db_from_config(
             app_config)
 
+        # Init the migration number if necessary
+        migration_manager = MigrationManager(self.db)
+        migration_manager.install_migration_version_if_missing()
+
+        # Tiny hack to warn user if our migration is out of date
+        if not migration_manager.database_at_latest_migration():
+            print (
+                "*WARNING:* Your migrations are out of date, "
+                "maybe run ./bin/gmg migrate?")
+
         # Get the template environment
-        self.template_loader = util.get_jinja_loader(
+        self.template_loader = get_jinja_loader(
             app_config.get('user_template_path'))
         
         # Set up storage systems
-        self.public_store = storage.storage_system_from_paste_config(
+        self.public_store = storage.storage_system_from_config(
             app_config, 'publicstore')
-        self.queue_store = storage.storage_system_from_paste_config(
+        self.queue_store = storage.storage_system_from_config(
             app_config, 'queuestore')
 
         # set up routing
         self.routing = routing.get_mapper()
 
         # set up staticdirector tool
-        if app_config.has_key('direct_remote_path'):
-            self.staticdirector = staticdirect.RemoteStaticDirect(
-                app_config['direct_remote_path'].strip())
-        elif app_config.has_key('direct_remote_paths'):
-            direct_remote_path_lines = app_config[
-                'direct_remote_paths'].strip().splitlines()
-            self.staticdirector = staticdirect.MultiRemoteStaticDirect(
-                dict([line.strip().split(' ', 1)
-                      for line in direct_remote_path_lines]))
-        else:
-            raise ImproperlyConfigured(
-                "One of direct_remote_path or "
-                "direct_remote_paths must be provided")
+        self.staticdirector = get_staticdirector(app_config)
 
         # Setup celery, if appropriate
         if setup_celery and not app_config.get('celery_setup_elsewhere'):
@@ -116,21 +104,15 @@ class MediaGoblinApp(object):
         #######################################################
 
         setup_globals(
-            app_config=app_config,
-            global_config=global_config,
-
-            # TODO: No need to set these two up as globals, we could
-            # just read them out of mg_globals.app_config
-            email_sender_address=app_config['email_sender_address'],
-            email_debug_mode=app_config['email_debug_mode'],
-
-            # Actual, useful to everyone objects
             app=self,
             db_connection=self.connection,
             database=self.db,
             public_store=self.public_store,
-            queue_store=self.queue_store,
-            workbench_manager=WorkbenchManager(app_config['workbench_path']))
+            queue_store=self.queue_store)
+
+        # Workbench *currently* only used by celery, so this only
+        # matters in always eager mode :)
+        setup_workbench()
 
     def __call__(self, environ, start_response):
         request = Request(environ)