# GNU MediaGoblin -- federated, autonomous media hosting # Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # 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.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 from mediagoblin.storage import storage_system_from_config class Error(Exception): pass class ImproperlyConfigured(Error): pass def setup_global_and_app_config(config_path): 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) setup_globals( app_config=app_config, global_config=global_config) return global_config, app_config def setup_database(): app_config = mg_globals.app_config # Set up the database connection, db = setup_connection_and_db_from_config(app_config) check_db_migrations_current(db) setup_globals( db_connection=connection, database=db) return connection, db def get_jinja_loader(user_template_path=None): """ Set up the Jinja template loaders, possibly allowing for user overridden templates. (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') 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: raise ImproperlyConfigured( "One of direct_remote_path or " "direct_remote_paths must be provided") def setup_storage(): global_config = mg_globals.global_config key_short = 'publicstore' key_long = "storage:" + key_short public_store = storage_system_from_config(global_config[key_long]) key_short = 'queuestore' key_long = "storage:" + key_short queue_store = storage_system_from_config(global_config[key_long]) setup_globals( public_store=public_store, queue_store=queue_store) return public_store, queue_store def setup_workbench(): app_config = mg_globals.app_config 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