# vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2012 United States Government as represented by the # Administrator of the National Aeronautics and Space Administration. # All Rights Reserved. # # Copyright 2012 Nebula, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import logging import os import sys import warnings from openstack_dashboard import exceptions warnings.formatwarning = lambda message, category, *args, **kwargs: \ '%s: %s' % (category.__name__, message) ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) BIN_DIR = os.path.abspath(os.path.join(ROOT_PATH, '..', 'bin')) if ROOT_PATH not in sys.path: sys.path.append(ROOT_PATH) DEBUG = False TEMPLATE_DEBUG = DEBUG SITE_BRANDING = 'OpenStack Dashboard' LOGIN_URL = '/auth/login/' LOGOUT_URL = '/auth/logout/' # LOGIN_REDIRECT_URL can be used as an alternative for # HORIZON_CONFIG.user_home, if user_home is not set. # Do not set it to '/home/', as this will cause circular redirect loop LOGIN_REDIRECT_URL = '/' MEDIA_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'media')) MEDIA_URL = '/media/' STATIC_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'static')) STATIC_URL = '/static/' ADMIN_MEDIA_PREFIX = '/static/admin/' ROOT_URLCONF = 'openstack_dashboard.urls' HORIZON_CONFIG = { 'dashboards': ('project', 'admin', 'settings',), 'default_dashboard': 'project', 'user_home': 'openstack_dashboard.views.get_user_home', 'ajax_queue_limit': 10, 'help_url': "http://docs.openstack.org", 'exceptions': {'recoverable': exceptions.RECOVERABLE, 'not_found': exceptions.NOT_FOUND, 'unauthorized': exceptions.UNAUTHORIZED}, } MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'horizon.middleware.HorizonMiddleware', 'django.middleware.doc.XViewMiddleware', 'django.middleware.locale.LocaleMiddleware', ) TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.request', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.contrib.messages.context_processors.messages', 'horizon.context_processors.horizon', 'openstack_dashboard.context_processors.openstack', ) TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', 'horizon.loaders.TemplateLoader' ) TEMPLATE_DIRS = ( os.path.join(ROOT_PATH, 'templates'), ) STATICFILES_FINDERS = ( 'compressor.finders.CompressorFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ) less_binary = os.path.join(BIN_DIR, 'less', 'lessc') COMPRESS_PRECOMPILERS = ( ('text/less', (less_binary + ' {infile} {outfile}')), ) COMPRESS_CSS_FILTERS = ( 'compressor.filters.css_default.CssAbsoluteFilter', ) COMPRESS_ENABLED = True COMPRESS_OUTPUT_DIR = 'dashboard' COMPRESS_CSS_HASHING_METHOD = 'hash' COMPRESS_PARSER = 'compressor.parser.HtmlParser' INSTALLED_APPS = ( 'openstack_dashboard', 'django.contrib.contenttypes', 'django.contrib.auth', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'compressor', 'horizon', 'openstack_dashboard.dashboards.project', 'openstack_dashboard.dashboards.admin', 'openstack_dashboard.dashboards.settings', 'openstack_auth', ) TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',) MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' SESSION_COOKIE_HTTPONLY = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_COOKIE_SECURE = False gettext_noop = lambda s: s LANGUAGES = ( ('bg', gettext_noop('Bulgarian (Bulgaria)')), ('cs', gettext_noop('Czech')), ('en', gettext_noop('English')), ('es', gettext_noop('Spanish')), ('fr', gettext_noop('French')), ('it', gettext_noop('Italiano')), ('ja', gettext_noop('Japanese')), ('ko', gettext_noop('Korean (Korea)')), ('nl', gettext_noop('Dutch (Netherlands)')), ('pl', gettext_noop('Polish')), ('pt', gettext_noop('Portuguese')), ('pt-br', gettext_noop('Portuguese (Brazil)')), ('zh-cn', gettext_noop('Simplified Chinese')), ('zh-tw', gettext_noop('Traditional Chinese')), ) LANGUAGE_CODE = 'en' USE_I18N = True USE_L10N = True USE_TZ = True OPENSTACK_KEYSTONE_DEFAULT_ROLE = 'Member' DEFAULT_EXCEPTION_REPORTER_FILTER = 'horizon.exceptions.HorizonReporterFilter' if DEBUG: logging.basicConfig(level=logging.DEBUG) try: from local.local_settings import * except ImportError: logging.warning("No local_settings file found.") # Add HORIZON_CONFIG to the context information for offline compression COMPRESS_OFFLINE_CONTEXT = { 'STATIC_URL': STATIC_URL, 'HORIZON_CONFIG': HORIZON_CONFIG } # Deprecation for Essex/Folsom dashboard names; remove this code in H. _renames = ( ('horizon.dashboards.nova', 'openstack_dashboard.dashboards.project'), ('horizon.dashboards.syspanel', 'openstack_dashboard.dashboards.admin'), ('horizon.dashboards.settings', 'openstack_dashboard.dashboards.settings') ) INSTALLED_APPS = list(INSTALLED_APPS) _dashboards = list(HORIZON_CONFIG['dashboards']) for old, new in _renames: if old in INSTALLED_APPS: warnings.warn('The "%s" package is deprecated. Please update your ' 'INSTALLED_APPS setting to use the new "%s" package.\n' % (old, new), Warning) INSTALLED_APPS[INSTALLED_APPS.index(old)] = new _old_name = old.split(".")[-1] if _old_name in HORIZON_CONFIG['dashboards'] and _old_name != "settings": _new_name = new.split(".")[-1] warnings.warn('The "%s" dashboard name is deprecated. Please update ' 'your HORIZON_CONFIG["dashboards"] setting to use the ' 'new "%s" dashboard name.\n' % (_old_name, _new_name), Warning) _dashboards[_dashboards.index(_old_name)] = _new_name HORIZON_CONFIG['dashboards'] = _dashboards