X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=mediagoblin%2Finit%2F__init__.py;h=e0711416378cbf4c1e5cf7ceb874297a544bffb3;hb=4a698535bc97b37c8eb42ffea2cc3e7bd48565e6;hp=7ac59db1a4379250ebe85f53b61659a4969bbaaf;hpb=63352aaf70d97a37b6277fab0f9b957d34dcb9df;p=mediagoblin.git diff --git a/mediagoblin/init/__init__.py b/mediagoblin/init/__init__.py index 7ac59db1..e0711416 100644 --- a/mediagoblin/init/__init__.py +++ b/mediagoblin/init/__init__.py @@ -14,18 +14,18 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from beaker.cache import CacheManager -from beaker.util import parse_cache_config_options import jinja2 -from mediagoblin import staticdirect +from mediagoblin.tools import staticdirect +from mediagoblin.tools.translate import set_available_locales from mediagoblin.init.config import ( read_mediagoblin_config, generate_validation_report) from mediagoblin import mg_globals from mediagoblin.mg_globals import setup_globals from mediagoblin.db.open import setup_connection_and_db_from_config, \ - check_db_migrations_current -from mediagoblin.workbench import WorkbenchManager + check_db_migrations_current, load_models +from mediagoblin.tools.pluginapi import hook_runall +from mediagoblin.tools.workbench import WorkbenchManager from mediagoblin.storage import storage_system_from_config @@ -37,6 +37,11 @@ class ImproperlyConfigured(Error): pass +def setup_locales(): + """Checks which language translations are available and sets them""" + set_available_locales() + + def setup_global_and_app_config(config_path): global_config, validation_result = read_mediagoblin_config(config_path) app_config = global_config['mediagoblin'] @@ -53,22 +58,28 @@ def setup_global_and_app_config(config_path): return global_config, app_config -def setup_database(): +def setup_database(run_migrations=False): app_config = mg_globals.app_config + global_config = mg_globals.global_config + # Load all models for media types (plugins, ...) + load_models(app_config) # Set up the database - connection, db = setup_connection_and_db_from_config(app_config) - - check_db_migrations_current(db) + db = setup_connection_and_db_from_config(app_config, run_migrations) + if run_migrations: + #Run the migrations to initialize/update the database. + from mediagoblin.gmg_commands.dbupdate import run_all_migrations + run_all_migrations(db, app_config, global_config) + else: + check_db_migrations_current(db) - setup_globals( - db_connection=connection, - database=db) + setup_globals(database=db) - return connection, db + return db -def get_jinja_loader(user_template_path=None): +def get_jinja_loader(user_template_path=None, current_theme=None, + plugin_template_paths=None): """ Set up the Jinja template loaders, possibly allowing for user overridden templates. @@ -76,28 +87,48 @@ def get_jinja_loader(user_template_path=None): (In the future we may have another system for providing theming; for now this is good enough.) """ - if user_template_path: - return jinja2.ChoiceLoader( - [jinja2.FileSystemLoader(user_template_path), - jinja2.PackageLoader('mediagoblin', 'templates')]) - else: - return jinja2.PackageLoader('mediagoblin', 'templates') + path_list = [] + + # Add user path first--this takes precedence over everything. + if user_template_path is not None: + path_list.append(jinja2.FileSystemLoader(user_template_path)) + + # Any theme directories in the registry + if current_theme and current_theme.get('templates_dir'): + path_list.append( + jinja2.FileSystemLoader( + current_theme['templates_dir'])) + + # Add plugin template paths next--takes precedence over + # core templates. + if plugin_template_paths is not None: + path_list.extend((jinja2.FileSystemLoader(path) + for path in plugin_template_paths)) + + # Add core templates last. + path_list.append(jinja2.PackageLoader('mediagoblin', 'templates')) + + return jinja2.ChoiceLoader(path_list) def get_staticdirector(app_config): - if 'direct_remote_path' in app_config: - return staticdirect.RemoteStaticDirect( - app_config['direct_remote_path'].strip()) - elif 'direct_remote_paths' in app_config: - direct_remote_path_lines = app_config[ - 'direct_remote_paths'].strip().splitlines() - return staticdirect.MultiRemoteStaticDirect( - dict([line.strip().split(' ', 1) - for line in direct_remote_path_lines])) - else: + # At minimum, we need the direct_remote_path + if not 'direct_remote_path' in app_config \ + or not 'theme_web_path' in app_config: raise ImproperlyConfigured( - "One of direct_remote_path or " - "direct_remote_paths must be provided") + "direct_remote_path and theme_web_path must be provided") + + direct_domains = {None: app_config['direct_remote_path'].strip()} + direct_domains['theme'] = app_config['theme_web_path'].strip() + + # Let plugins load additional paths + for plugin_static in hook_runall("static_setup"): + direct_domains[plugin_static.name] = "%s/%s" % ( + app_config['plugin_web_path'].rstrip('/'), + plugin_static.name) + + return staticdirect.StaticDirect( + direct_domains) def setup_storage(): @@ -124,16 +155,3 @@ def setup_workbench(): workbench_manager = WorkbenchManager(app_config['workbench_path']) setup_globals(workbench_manager=workbench_manager) - - -def setup_beaker_cache(): - """ - Setup the Beaker Cache manager. - """ - cache_config = mg_globals.global_config['beaker.cache'] - cache_config = dict( - [(u'cache.%s' % key, value) - for key, value in cache_config.iteritems()]) - cache = CacheManager(**parse_cache_config_options(cache_config)) - setup_globals(cache=cache) - return cache