2010-02-04 02:09:30 +03:00
|
|
|
# Django settings for kitsune project.
|
2010-09-11 02:58:44 +04:00
|
|
|
import platform
|
2010-02-04 02:16:45 +03:00
|
|
|
import os
|
|
|
|
import logging
|
2010-02-04 02:09:30 +03:00
|
|
|
|
2010-04-06 21:24:04 +04:00
|
|
|
from tower import ugettext_lazy as _lazy
|
2010-03-22 22:50:31 +03:00
|
|
|
|
2010-04-16 07:09:48 +04:00
|
|
|
from sumo_locales import LOCALES
|
2010-04-01 23:45:15 +04:00
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
DEBUG = True
|
|
|
|
TEMPLATE_DEBUG = DEBUG
|
2010-02-04 02:16:45 +03:00
|
|
|
LOG_LEVEL = logging.DEBUG
|
|
|
|
|
|
|
|
ROOT = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
path = lambda *a: os.path.join(ROOT, *a)
|
2010-02-04 02:09:30 +03:00
|
|
|
|
2010-04-22 01:52:58 +04:00
|
|
|
ROOT_PACKAGE = os.path.basename(ROOT)
|
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
ADMINS = (
|
|
|
|
# ('Your Name', 'your_email@domain.com'),
|
|
|
|
)
|
|
|
|
|
|
|
|
MANAGERS = ADMINS
|
|
|
|
|
|
|
|
DATABASES = {
|
|
|
|
'default': {
|
2010-05-25 00:44:28 +04:00
|
|
|
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
|
|
|
|
'NAME': 'kitsune', # Or path to database file if using sqlite3.
|
|
|
|
'USER': '', # Not used with sqlite3.
|
|
|
|
'PASSWORD': '', # Not used with sqlite3.
|
|
|
|
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
|
|
|
|
'PORT': '', # Set to empty string for default. Not used with sqlite3.
|
2010-02-10 05:36:38 +03:00
|
|
|
'OPTIONS': {'init_command': 'SET storage_engine=InnoDB'},
|
2010-02-04 02:09:30 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-06-16 23:34:58 +04:00
|
|
|
DATABASE_ROUTERS = ('multidb.PinningMasterSlaveRouter',)
|
2010-02-09 22:01:37 +03:00
|
|
|
|
|
|
|
# Put the aliases for your slave databases in this list
|
|
|
|
SLAVE_DATABASES = []
|
|
|
|
|
2010-02-10 03:43:08 +03:00
|
|
|
# Cache Settings
|
2010-06-05 10:30:18 +04:00
|
|
|
#CACHE_BACKEND = 'caching.backends.memcached://localhost:11211'
|
2010-02-10 03:43:08 +03:00
|
|
|
#CACHE_PREFIX = 'sumo:'
|
|
|
|
|
2010-04-21 04:50:53 +04:00
|
|
|
# Addresses email comes from
|
|
|
|
DEFAULT_FROM_EMAIL = 'notifications@support.mozilla.com'
|
|
|
|
SERVER_EMAIL = 'server-error@support.mozilla.com'
|
2010-02-10 03:43:08 +03:00
|
|
|
|
2010-09-11 02:58:44 +04:00
|
|
|
PLATFORM_NAME = platform.node()
|
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
# Local time zone for this installation. Choices can be found here:
|
|
|
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
|
|
|
# although not all choices may be available on all operating systems.
|
|
|
|
# If running in a Windows environment this must be set to the same as your
|
|
|
|
# system time zone.
|
2010-05-11 03:18:00 +04:00
|
|
|
TIME_ZONE = 'US/Pacific'
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
# Language code for this installation. All choices can be found here:
|
|
|
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
2010-04-01 23:45:15 +04:00
|
|
|
LANGUAGE_CODE = 'en-US'
|
|
|
|
|
|
|
|
# Supported languages
|
|
|
|
SUMO_LANGUAGES = (
|
2010-08-31 05:16:27 +04:00
|
|
|
'ak', 'ar', 'as', 'ast', 'bg', 'bn-BD', 'bn-IN', 'bs', 'ca', 'cs', 'da',
|
|
|
|
'de', 'el', 'en-US', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fr', 'fur',
|
|
|
|
'fy-NL', 'ga-IE', 'gd', 'gl', 'gu-IN', 'he', 'hi-IN', 'hr', 'hu', 'hy-AM',
|
|
|
|
'id', 'ilo', 'is', 'it', 'ja', 'kk', 'kn', 'ko', 'lt', 'mk', 'mn', 'mr',
|
|
|
|
'ms', 'nb-NO', 'nl', 'no', 'oc', 'pa-IN', 'pl', 'pt-BR', 'pt-PT', 'rm',
|
|
|
|
'ro', 'ru', 'rw', 'si', 'sk', 'sl', 'sq', 'sr-CYRL', 'sr-LATN', 'sv-SE',
|
|
|
|
'ta-LK', 'te', 'th', 'tr', 'uk', 'vi', 'zh-CN', 'zh-TW',
|
2010-04-01 23:45:15 +04:00
|
|
|
)
|
|
|
|
|
2010-09-02 05:00:30 +04:00
|
|
|
LANGUAGE_CHOICES = tuple([(i, LOCALES[i].native) for i in SUMO_LANGUAGES])
|
|
|
|
LANGUAGES = dict([(i.lower(), LOCALES[i].native) for i in SUMO_LANGUAGES])
|
2010-04-01 23:45:15 +04:00
|
|
|
|
|
|
|
LANGUAGE_URL_MAP = dict([(i.lower(), i) for i in SUMO_LANGUAGES])
|
|
|
|
|
2010-04-22 01:52:58 +04:00
|
|
|
TEXT_DOMAIN = 'messages'
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
SITE_ID = 1
|
2010-03-22 22:50:31 +03:00
|
|
|
SITE_TITLE = _lazy(u'Firefox Support', 'site_title')
|
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
# If you set this to False, Django will make some optimizations so as not
|
|
|
|
# to load the internationalization machinery.
|
|
|
|
USE_I18N = True
|
2010-04-01 23:45:15 +04:00
|
|
|
USE_L10N = True
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
# Absolute path to the directory that holds media.
|
|
|
|
# Example: "/home/media/media.lawrence.com/"
|
2010-02-04 02:16:45 +03:00
|
|
|
MEDIA_ROOT = path('media')
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
|
|
|
# trailing slash if there is a path component (optional in other cases).
|
|
|
|
# Examples: "http://media.lawrence.com", "http://example.com/media/"
|
2010-02-04 02:16:45 +03:00
|
|
|
MEDIA_URL = '/media/'
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
|
|
|
|
# trailing slash.
|
|
|
|
# Examples: "http://foo.com/media/", "/media/".
|
2010-02-04 02:16:45 +03:00
|
|
|
ADMIN_MEDIA_PREFIX = '/admin-media/'
|
2010-02-04 02:09:30 +03:00
|
|
|
|
2010-04-01 23:45:15 +04:00
|
|
|
# Paths that don't require a locale prefix.
|
2010-05-19 06:00:23 +04:00
|
|
|
SUPPORTED_NONLOCALES = ('media', 'admin')
|
2010-04-01 23:45:15 +04:00
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
# Make this unique, and don't share it with anybody.
|
|
|
|
SECRET_KEY = '#%tc(zja8j01!r#h_y)=hy!^k)9az74k+-ib&ij&+**s3-e^_z'
|
|
|
|
|
|
|
|
# List of callables that know how to import templates from various sources.
|
|
|
|
TEMPLATE_LOADERS = (
|
|
|
|
'django.template.loaders.filesystem.Loader',
|
|
|
|
'django.template.loaders.app_directories.Loader',
|
|
|
|
# 'django.template.loaders.eggs.Loader',
|
|
|
|
)
|
|
|
|
|
2010-03-04 04:59:03 +03:00
|
|
|
TEMPLATE_CONTEXT_PROCESSORS = (
|
|
|
|
'django.core.context_processors.auth',
|
|
|
|
'django.core.context_processors.debug',
|
|
|
|
'django.core.context_processors.media',
|
|
|
|
'django.core.context_processors.request',
|
2010-03-22 22:50:31 +03:00
|
|
|
'django.contrib.messages.context_processors.messages',
|
2010-05-25 05:03:52 +04:00
|
|
|
|
|
|
|
'sumo.context_processors.global_settings',
|
2010-09-01 20:00:03 +04:00
|
|
|
'jingo_minify.helpers.build_ids',
|
|
|
|
'csrf_context.csrf',
|
2010-03-04 04:59:03 +03:00
|
|
|
)
|
|
|
|
|
2010-02-04 02:09:30 +03:00
|
|
|
MIDDLEWARE_CLASSES = (
|
2010-06-16 23:34:58 +04:00
|
|
|
'multidb.middleware.PinningRouterMiddleware',
|
2010-09-29 22:18:14 +04:00
|
|
|
|
|
|
|
# This gives us atomic success or failure on multi-row writes. It does not
|
|
|
|
# give us a consistent per-transaction snapshot for reads; that would need
|
|
|
|
# the serializable isolation level (which InnoDB does support) and code to
|
|
|
|
# retry transactions that roll back due to serialization failures. It's a
|
|
|
|
# possibility for the future. Keep in mind that memcache defeats
|
|
|
|
# snapshotted reads where we don't explicitly use the "uncached" manager.
|
|
|
|
'django.middleware.transaction.TransactionMiddleware',
|
|
|
|
|
[590776] LocaleURLMiddleware's setting of a thread-local prefixer is now reversed when the request ends, removing one source of apparently random test failures. A short book follows:
* Make LocaleURLMiddleware clean up after itself: clear the thread-local prefixer variable that it sets before the request. Tests can now run in any order without the thread-local setting of one influencing the next. This also uncovers a lot of buggy tests which were mistakenly depending on the work of previous ones. Much of the rest of this changeset is toward fixing these.... A good test to compare before and after this commit is `test_json_callback_validation`. Run it alone, and LocaleMiddleware tosses us a 301 because we don't have a locale prefix set. Run it in concert with other tests, and somebody else sets the thread-local for it.
* Added `LocalizingClient`, which provides the functionality of django.test.client.Client but implicitly prepends a locale code to anything you request. This saves dodging the initial 301 that LocaleURLMiddleware returns in response to an un-prepended request. It also makes "priming" the middleware by doing an initial arbitrary request unnecessary (and ineffective, since the middleware no longer leaks state). Removed all instances of such priming.
* Switched many tests to use `LocalizingClient`. Some uses of plain `Client` remain, but those are correct, since they test things like the middleware's 301s.
* Renamed `set_url_prefix` and `get_url_prefix` to better reflect their purpose: they hold Prefixers, not prefixes.
* Added a `force_locale` kwarg to `sumo.urlresolvers.reverse()`, which forces the same default locale as would normally be used by the middleware to be prepended onto the result, even if there is no prefixer set. This is useful when you need to get a reversed URL against which to compare a 301's Location in a test.
* Moved `split_path()` out of `Prefixer`, since it needs no instance state and I needed it in `LocalizingClient`.
* `Prefixer` can now be instantiated without a request, in which case it defaults to a fairly blank one and returns results largely determined by `settings.LANGUAGE_CODE`.
* Stopped expecting locale prefixes in wiki parser tests: the parser is being run outside any request and so should return unlocalized URLs.
* Ripped `get_url` off the legacy `Forum` and `ForumThread` models and deleted its tests. This was a lot faster than trying to fix them, and the entire models are dying for 2.3 anyway.
* Fixed a gabillion other tests. I like to think I understood each one's intent before causing it to pass, but extra eyes are certainly welcome.
* Fixed some pyflakes violations: semicolons, whitespace, unused imports, etc.
2010-08-27 04:31:33 +04:00
|
|
|
# LocaleURLMiddleware must be before any middleware that uses
|
|
|
|
# sumo.urlresolvers.reverse() to add locale prefixes to URLs:
|
2010-04-01 23:45:15 +04:00
|
|
|
'sumo.middleware.LocaleURLMiddleware',
|
2010-05-25 03:58:13 +04:00
|
|
|
'sumo.middleware.Forbidden403Middleware',
|
2010-02-04 02:09:30 +03:00
|
|
|
'django.middleware.common.CommonMiddleware',
|
2010-08-06 18:53:25 +04:00
|
|
|
'sumo.middleware.NoCacheHttpsMiddleware',
|
2010-03-31 04:43:19 +04:00
|
|
|
'commonware.middleware.NoVarySessionMiddleware',
|
2010-10-01 19:13:24 +04:00
|
|
|
'commonware.middleware.FrameOptionsHeader',
|
2010-02-04 02:09:30 +03:00
|
|
|
'django.middleware.csrf.CsrfViewMiddleware',
|
|
|
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
|
|
'django.contrib.messages.middleware.MessageMiddleware',
|
2010-06-28 20:30:02 +04:00
|
|
|
'sumo.anonymous.AnonymousIdentityMiddleware',
|
2010-03-31 04:43:19 +04:00
|
|
|
|
|
|
|
# TODO: Replace with Kitsune auth.
|
|
|
|
'sumo.middleware.TikiCookieMiddleware',
|
2010-09-25 01:33:14 +04:00
|
|
|
|
|
|
|
'twitter.middleware.SessionMiddleware',
|
2010-10-28 00:00:32 +04:00
|
|
|
'sumo.middleware.PlusToSpaceMiddleware',
|
2010-03-31 04:43:19 +04:00
|
|
|
)
|
|
|
|
|
|
|
|
# Auth
|
|
|
|
AUTHENTICATION_BACKENDS = (
|
2010-05-21 02:56:54 +04:00
|
|
|
'django.contrib.auth.backends.ModelBackend',
|
2010-05-25 00:44:28 +04:00
|
|
|
'sumo.backends.SessionBackend', # TODO: Replace with Kitsune auth.
|
2010-02-04 02:09:30 +03:00
|
|
|
)
|
|
|
|
|
2010-04-22 01:52:58 +04:00
|
|
|
ROOT_URLCONF = '%s.urls' % ROOT_PACKAGE
|
2010-02-04 02:09:30 +03:00
|
|
|
|
|
|
|
TEMPLATE_DIRS = (
|
2010-02-11 21:56:11 +03:00
|
|
|
# Put strings here, like "/home/html/django_templates"
|
2010-02-04 02:09:30 +03:00
|
|
|
# Always use forward slashes, even on Windows.
|
|
|
|
# Don't forget to use absolute paths, not relative paths.
|
2010-02-04 02:16:45 +03:00
|
|
|
path('templates'),
|
2010-02-04 02:09:30 +03:00
|
|
|
)
|
|
|
|
|
2010-06-23 22:43:24 +04:00
|
|
|
# TODO: Figure out why changing the order of apps (for example, moving taggit
|
|
|
|
# higher in the list) breaks tests.
|
2010-02-04 02:09:30 +03:00
|
|
|
INSTALLED_APPS = (
|
|
|
|
'django.contrib.auth',
|
|
|
|
'django.contrib.contenttypes',
|
|
|
|
'django.contrib.sessions',
|
|
|
|
'django.contrib.sites',
|
|
|
|
'django.contrib.messages',
|
2010-05-19 06:00:23 +04:00
|
|
|
'django.contrib.admin',
|
2010-04-06 22:01:47 +04:00
|
|
|
'tower',
|
2010-04-08 23:19:09 +04:00
|
|
|
'jingo_minify',
|
2010-04-22 01:52:58 +04:00
|
|
|
ROOT_PACKAGE,
|
2010-05-15 05:10:59 +04:00
|
|
|
'authority',
|
2010-06-02 03:35:09 +04:00
|
|
|
'access',
|
2010-02-11 04:32:02 +03:00
|
|
|
'sumo',
|
|
|
|
'search',
|
2010-04-24 01:08:50 +04:00
|
|
|
'forums',
|
2010-09-11 02:38:43 +04:00
|
|
|
'djcelery',
|
2010-06-30 22:23:32 +04:00
|
|
|
'cronjobs',
|
2010-05-27 03:36:01 +04:00
|
|
|
'notifications',
|
2010-05-29 05:35:16 +04:00
|
|
|
'identicons',
|
2010-05-12 22:50:50 +04:00
|
|
|
'questions',
|
2010-06-18 19:57:39 +04:00
|
|
|
'kadmin',
|
2010-06-23 22:43:24 +04:00
|
|
|
'taggit',
|
2010-07-20 01:15:39 +04:00
|
|
|
'flagit',
|
2010-07-15 05:54:41 +04:00
|
|
|
'upload',
|
2010-08-14 02:17:48 +04:00
|
|
|
'product_details',
|
2010-09-02 05:00:30 +04:00
|
|
|
'wiki',
|
2010-10-09 01:49:35 +04:00
|
|
|
'kbforums',
|
2010-10-19 05:20:02 +04:00
|
|
|
'dashboards',
|
2010-09-02 05:00:30 +04:00
|
|
|
'gallery',
|
2010-08-30 17:37:06 +04:00
|
|
|
'customercare',
|
2010-09-25 01:33:14 +04:00
|
|
|
'twitter',
|
2010-10-21 03:40:09 +04:00
|
|
|
'chat',
|
2010-02-04 02:09:30 +03:00
|
|
|
)
|
2010-02-04 02:18:25 +03:00
|
|
|
|
2010-04-08 03:43:51 +04:00
|
|
|
# Extra apps for testing
|
|
|
|
if DEBUG:
|
|
|
|
INSTALLED_APPS += (
|
|
|
|
'django_extensions',
|
|
|
|
'django_nose',
|
|
|
|
'test_utils',
|
2010-03-31 04:43:19 +04:00
|
|
|
)
|
2010-04-08 03:43:51 +04:00
|
|
|
|
2010-02-11 03:36:35 +03:00
|
|
|
TEST_RUNNER = 'test_utils.runner.RadicalTestSuiteRunner'
|
2010-08-25 06:39:26 +04:00
|
|
|
TEST_UTILS_NO_TRUNCATE = ('django_content_type',)
|
2010-02-11 03:36:35 +03:00
|
|
|
|
2010-05-25 00:44:28 +04:00
|
|
|
|
2010-04-06 22:01:47 +04:00
|
|
|
def JINJA_CONFIG():
|
|
|
|
import jinja2
|
|
|
|
from django.conf import settings
|
|
|
|
from caching.base import cache
|
2010-09-22 19:08:56 +04:00
|
|
|
config = {'extensions': ['tower.template.i18n', 'caching.ext.cache',
|
|
|
|
'jinja2.ext.with_'],
|
2010-04-06 22:01:47 +04:00
|
|
|
'finalize': lambda x: x if x is not None else ''}
|
|
|
|
if 'memcached' in cache.scheme and not settings.DEBUG:
|
|
|
|
# We're passing the _cache object directly to jinja because
|
|
|
|
# Django can't store binary directly; it enforces unicode on it.
|
|
|
|
# Details: http://jinja.pocoo.org/2/documentation/api#bytecode-cache
|
|
|
|
# and in the errors you get when you try it the other way.
|
|
|
|
bc = jinja2.MemcachedBytecodeCache(cache._cache,
|
|
|
|
"%sj2:" % settings.CACHE_PREFIX)
|
|
|
|
config['cache_size'] = -1 # Never clear the cache
|
|
|
|
config['bytecode_cache'] = bc
|
|
|
|
return config
|
|
|
|
|
2010-07-23 01:29:09 +04:00
|
|
|
# Let Tower know about our additional keywords.
|
|
|
|
# DO NOT import an ngettext variant as _lazy.
|
|
|
|
TOWER_KEYWORDS = {
|
|
|
|
'_lazy': None,
|
|
|
|
}
|
|
|
|
|
2010-04-06 22:01:47 +04:00
|
|
|
# Tells the extract script what files to look for l10n in and what function
|
|
|
|
# handles the extraction. The Tower library expects this.
|
|
|
|
DOMAIN_METHODS = {
|
|
|
|
'messages': [
|
2010-07-23 01:29:09 +04:00
|
|
|
('apps/forums/**', 'ignore'),
|
|
|
|
('apps/questions/**', 'ignore'),
|
2010-10-21 03:40:09 +04:00
|
|
|
('apps/chat/**', 'ignore'),
|
2010-04-06 22:01:47 +04:00
|
|
|
('apps/**.py',
|
|
|
|
'tower.management.commands.extract.extract_tower_python'),
|
|
|
|
('**/templates/**.html',
|
|
|
|
'tower.management.commands.extract.extract_tower_template'),
|
|
|
|
],
|
|
|
|
'lhtml': [
|
2010-07-23 01:29:09 +04:00
|
|
|
('apps/forums/**', 'ignore'),
|
|
|
|
('apps/questions/**', 'ignore'),
|
2010-04-06 22:01:47 +04:00
|
|
|
('**/templates/**.lhtml',
|
|
|
|
'tower.management.commands.extract.extract_tower_template'),
|
|
|
|
],
|
|
|
|
'javascript': [
|
|
|
|
# We can't say **.js because that would dive into any libraries.
|
|
|
|
('media/js/*.js', 'javascript'),
|
|
|
|
],
|
|
|
|
}
|
|
|
|
|
2010-07-01 02:24:01 +04:00
|
|
|
# These domains will not be merged into messages.pot and will use separate PO
|
|
|
|
# files. See the following URL for an example of how to set these domains
|
|
|
|
# in DOMAIN_METHODS.
|
|
|
|
# http://github.com/jbalogh/zamboni/blob/d4c64239c24aa2f1e91276909823d1d1b290f0ee/settings.py#L254
|
|
|
|
STANDALONE_DOMAINS = [
|
|
|
|
'javascript',
|
|
|
|
]
|
|
|
|
|
2010-04-06 22:01:47 +04:00
|
|
|
# If you have trouble extracting strings with Tower, try setting this
|
|
|
|
# to True
|
2010-05-13 06:25:56 +04:00
|
|
|
TOWER_ADD_HEADERS = True
|
2010-04-06 22:01:47 +04:00
|
|
|
|
2010-04-08 23:19:09 +04:00
|
|
|
# Bundles for JS/CSS Minification
|
|
|
|
MINIFY_BUNDLES = {
|
|
|
|
'css': {
|
|
|
|
'common': (
|
|
|
|
'css/main.css',
|
|
|
|
'css/sidebar.css',
|
2010-06-04 22:34:44 +04:00
|
|
|
),
|
|
|
|
'forums': (
|
2010-05-06 21:40:21 +04:00
|
|
|
'css/forums.css',
|
2010-04-08 23:19:09 +04:00
|
|
|
),
|
2010-05-25 00:44:28 +04:00
|
|
|
'questions': (
|
|
|
|
'css/questions.css',
|
2010-06-23 22:43:24 +04:00
|
|
|
'css/tags.css',
|
|
|
|
'css/jqueryui/jquery.ui.core.css',
|
|
|
|
'css/jqueryui/jquery.ui.autocomplete.css',
|
|
|
|
'css/jqueryui/jquery.ui.theme.css',
|
2010-05-25 00:44:28 +04:00
|
|
|
),
|
2010-04-08 23:19:09 +04:00
|
|
|
'search': (
|
|
|
|
'css/search.css',
|
|
|
|
),
|
2010-08-19 21:19:17 +04:00
|
|
|
'wiki': (
|
|
|
|
'css/wiki.css',
|
2010-10-21 04:38:52 +04:00
|
|
|
# The dashboard app uses the wiki bundle because only the wiki app
|
|
|
|
# has the new theme at the moment.
|
|
|
|
'css/dashboards.css',
|
2010-09-30 07:04:54 +04:00
|
|
|
'css/screencast.css',
|
2010-08-19 21:19:17 +04:00
|
|
|
),
|
2010-10-19 05:20:02 +04:00
|
|
|
'home': (
|
|
|
|
'css/home.css',
|
|
|
|
),
|
2010-09-09 00:41:23 +04:00
|
|
|
'gallery': (
|
|
|
|
'css/gallery.css',
|
|
|
|
),
|
2010-05-04 23:43:13 +04:00
|
|
|
'ie': (
|
|
|
|
'css/ie.css',
|
|
|
|
),
|
2010-09-24 16:24:28 +04:00
|
|
|
'customercare': (
|
|
|
|
'css/jqueryui/jquery.ui.core.css',
|
|
|
|
'css/jqueryui/jquery.ui.theme.css',
|
|
|
|
'css/customercare.css',
|
|
|
|
),
|
2010-10-21 03:40:09 +04:00
|
|
|
'chat': (
|
|
|
|
'css/chat.css',
|
|
|
|
),
|
2010-04-08 23:19:09 +04:00
|
|
|
},
|
|
|
|
'js': {
|
|
|
|
'common': (
|
2010-05-25 00:44:28 +04:00
|
|
|
'js/libs/jquery.min.js',
|
2010-10-01 06:54:40 +04:00
|
|
|
'js/libs/modernizr-1.5.min.js',
|
2010-04-29 10:21:43 +04:00
|
|
|
'js/menu.js',
|
2010-05-22 04:17:50 +04:00
|
|
|
'js/main.js',
|
2010-04-08 23:19:09 +04:00
|
|
|
),
|
2010-05-25 00:44:28 +04:00
|
|
|
'questions': (
|
2010-06-23 22:43:24 +04:00
|
|
|
'js/libs/jqueryui.min.js',
|
2010-07-15 05:54:41 +04:00
|
|
|
'js/markup.js',
|
|
|
|
'js/upload.js',
|
|
|
|
'js/questions.js',
|
2010-06-23 22:43:24 +04:00
|
|
|
'js/tags.js',
|
2010-05-25 00:44:28 +04:00
|
|
|
),
|
2010-04-08 23:19:09 +04:00
|
|
|
'search': (
|
2010-05-25 00:44:28 +04:00
|
|
|
'js/libs/jqueryui.min.js',
|
2010-04-08 23:19:09 +04:00
|
|
|
'js/search.js',
|
|
|
|
),
|
2010-05-25 02:37:06 +04:00
|
|
|
'forums': (
|
|
|
|
'js/markup.js',
|
2010-10-05 20:31:28 +04:00
|
|
|
'js/forums.js',
|
2010-08-19 21:19:17 +04:00
|
|
|
),
|
|
|
|
'wiki': (
|
2010-10-05 20:31:28 +04:00
|
|
|
'js/markup.js',
|
2010-09-01 04:24:39 +04:00
|
|
|
'js/libs/django/urlify.js',
|
|
|
|
'js/libs/django/prepopulate.js',
|
2010-09-22 02:33:29 +04:00
|
|
|
'js/libs/jquery.cookie.js',
|
2010-09-21 01:01:15 +04:00
|
|
|
'js/browserdetect.js',
|
2010-09-30 07:04:54 +04:00
|
|
|
'js/libs/swfobject.js',
|
2010-11-02 00:16:11 +03:00
|
|
|
'js/libs/jquery.selectbox-1.2.js',
|
2010-09-30 07:04:54 +04:00
|
|
|
'js/screencast.js',
|
2010-09-22 02:33:29 +04:00
|
|
|
'js/wiki.js',
|
2010-08-19 21:19:17 +04:00
|
|
|
),
|
2010-09-24 16:24:28 +04:00
|
|
|
'customercare': (
|
|
|
|
'js/libs/jqueryui.min.js',
|
|
|
|
'js/libs/jquery.NobleCount.js',
|
2010-09-29 15:16:26 +04:00
|
|
|
'js/libs/jquery.cookie.js',
|
2010-10-29 03:28:48 +04:00
|
|
|
'js/libs/jquery.bullseye-1.0.min.js',
|
2010-09-24 16:24:28 +04:00
|
|
|
'js/customercare.js',
|
|
|
|
),
|
2010-10-21 03:40:09 +04:00
|
|
|
'chat': (
|
|
|
|
'js/chat.js',
|
|
|
|
),
|
2010-04-08 23:19:09 +04:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
JAVA_BIN = '/usr/bin/java'
|
|
|
|
|
2010-05-21 20:56:05 +04:00
|
|
|
#
|
|
|
|
# Session cookies
|
|
|
|
SESSION_COOKIE_SECURE = True
|
|
|
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
|
|
|
|
2010-02-04 02:18:25 +03:00
|
|
|
#
|
|
|
|
# Connection information for Sphinx search
|
|
|
|
SPHINX_HOST = '127.0.0.1'
|
2010-05-08 04:34:06 +04:00
|
|
|
SPHINX_PORT = 3381
|
2010-10-04 20:15:49 +04:00
|
|
|
SPHINXQL_PORT = 3382
|
2010-02-06 04:04:33 +03:00
|
|
|
|
2010-04-08 03:43:51 +04:00
|
|
|
SPHINX_INDEXER = '/usr/bin/indexer'
|
|
|
|
SPHINX_SEARCHD = '/usr/bin/searchd'
|
2010-04-02 03:27:16 +04:00
|
|
|
SPHINX_CONFIG_PATH = path('configs/sphinx/sphinx.conf')
|
|
|
|
|
2010-10-04 20:15:49 +04:00
|
|
|
TEST_SPHINX_PATH = path('tmp/test/sphinx')
|
|
|
|
TEST_SPHINX_PORT = 3416
|
|
|
|
TEST_SPHINXQL_PORT = 3418
|
|
|
|
|
2010-02-06 04:04:33 +03:00
|
|
|
#
|
|
|
|
# Sphinx results tweaking
|
2010-05-25 00:44:28 +04:00
|
|
|
SEARCH_FORUM_MIN_AGE = 7 # age before which decay doesn't apply, in days
|
|
|
|
SEARCH_FORUM_HALF_LIFE = 14 # controls the decay rate, in days
|
2010-02-11 21:56:11 +03:00
|
|
|
SEARCH_MAX_RESULTS = 1000
|
2010-02-10 00:11:20 +03:00
|
|
|
SEARCH_RESULTS_PER_PAGE = 10
|
|
|
|
|
2010-02-10 05:36:38 +03:00
|
|
|
#
|
2010-02-10 00:11:20 +03:00
|
|
|
# Search default settings
|
2010-07-27 20:39:07 +04:00
|
|
|
# comma-separated tuple of included category IDs. Negative IDs are excluded.
|
2010-09-21 21:09:01 +04:00
|
|
|
SEARCH_DEFAULT_CATEGORIES = (1,)
|
2010-03-02 03:56:30 +03:00
|
|
|
SEARCH_SUMMARY_LENGTH = 275
|
|
|
|
# because of markup cleanup, search summaries lengths vary quite a bit
|
|
|
|
# so we extract longer excerpts and perform truncation to the length above
|
|
|
|
SEARCH_SUMMARY_LENGTH_MULTIPLIER = 1.3
|
2010-05-21 02:55:14 +04:00
|
|
|
|
|
|
|
#
|
|
|
|
# The length for which we would like the user to cache search forms and
|
|
|
|
# results, in minutes.
|
|
|
|
SEARCH_CACHE_PERIOD = 15
|
2010-05-15 05:10:59 +04:00
|
|
|
|
2010-10-16 06:40:10 +04:00
|
|
|
# Maximum length of the filename. Forms should use this and raise
|
|
|
|
# ValidationError if the length is exceeded.
|
|
|
|
# @see http://code.djangoproject.com/ticket/9893
|
|
|
|
# Columns are 250 but this leaves 50 chars for the upload_to prefix
|
|
|
|
MAX_FILENAME_LENGTH = 200
|
|
|
|
MAX_FILEPATH_LENGTH = 250
|
|
|
|
|
2010-05-15 05:10:59 +04:00
|
|
|
# Auth and permissions related constants
|
|
|
|
# TODO: Once we can log in through Kitsune, change this.
|
|
|
|
LOGIN_URL = '/tiki-login.php'
|
2010-05-25 03:58:13 +04:00
|
|
|
LOGOUT_URL = '/tiki-logout.php'
|
2010-05-25 05:03:52 +04:00
|
|
|
REGISTER_URL = '/tiki-register.php'
|
2010-06-10 22:42:57 +04:00
|
|
|
WIKI_CREATE_URL = '/tiki-editpage.php?page=%s'
|
|
|
|
WIKI_EDIT_URL = '/tiki-editpage.php?page=%s'
|
2010-09-30 07:04:54 +04:00
|
|
|
WIKI_VIDEO_WIDTH = 640
|
|
|
|
WIKI_VIDEO_HEIGHT = 480
|
2010-05-27 03:36:01 +04:00
|
|
|
|
2010-07-30 00:33:54 +04:00
|
|
|
IMAGE_MAX_FILESIZE = 1048576 # 1 megabyte, in bytes
|
2010-07-23 12:44:37 +04:00
|
|
|
THUMBNAIL_SIZE = 120 # Thumbnail size, in pixels
|
|
|
|
THUMBNAIL_UPLOAD_PATH = 'uploads/images/thumbnails/'
|
|
|
|
IMAGE_UPLOAD_PATH = 'uploads/images/'
|
|
|
|
# A string listing image mime types to accept, comma separated.
|
|
|
|
# String must not contain double quotes!
|
|
|
|
IMAGE_ALLOWED_MIMETYPES = 'image/jpeg,image/png,image/gif'
|
2010-07-15 05:54:41 +04:00
|
|
|
|
2010-07-27 20:39:07 +04:00
|
|
|
# Max number of wiki pages or other questions to suggest might answer the
|
|
|
|
# question you're about to ask
|
|
|
|
QUESTIONS_MAX_SUGGESTIONS = 5
|
|
|
|
# Number of extra suggestion results to pull from Sphinx to make up for
|
|
|
|
# possibly deleted wiki pages or question. To be safe, set this to the number
|
|
|
|
# of things that could be deleted between indexer runs.
|
|
|
|
QUESTIONS_SUGGESTION_SLOP = 3
|
|
|
|
|
2010-05-27 03:36:01 +04:00
|
|
|
# Email
|
|
|
|
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
|
|
|
|
2010-10-08 21:34:44 +04:00
|
|
|
|
|
|
|
# Read-only mode setup.
|
|
|
|
READ_ONLY = False
|
|
|
|
|
|
|
|
# Turn on read-only mode in settings_local.py by putting this line
|
|
|
|
# at the VERY BOTTOM: read_only_mode(globals())
|
|
|
|
def read_only_mode(env):
|
|
|
|
env['READ_ONLY'] = True
|
|
|
|
|
|
|
|
# Replace the default (master) db with a slave connection.
|
|
|
|
if not env.get('SLAVE_DATABASES'):
|
|
|
|
raise Exception("We need at least one slave database.")
|
|
|
|
slave = env['SLAVE_DATABASES'][0]
|
|
|
|
env['DATABASES']['default'] = env['DATABASES'][slave]
|
|
|
|
|
|
|
|
# No sessions without the database, so disable auth.
|
|
|
|
env['AUTHENTICATION_BACKENDS'] = ()
|
|
|
|
|
|
|
|
# Add in the read-only middleware before csrf middleware.
|
|
|
|
extra = 'sumo.middleware.ReadOnlyMiddleware'
|
|
|
|
before = 'django.middleware.csrf.CsrfViewMiddleware'
|
|
|
|
m = list(env['MIDDLEWARE_CLASSES'])
|
|
|
|
m.insert(m.index(before), extra)
|
|
|
|
env['MIDDLEWARE_CLASSES'] = tuple(m)
|
|
|
|
|
|
|
|
|
2010-05-27 03:36:01 +04:00
|
|
|
# Celery
|
2010-09-11 02:38:43 +04:00
|
|
|
import djcelery
|
|
|
|
djcelery.setup_loader()
|
|
|
|
|
2010-05-27 03:36:01 +04:00
|
|
|
BROKER_HOST = 'localhost'
|
|
|
|
BROKER_PORT = 5672
|
|
|
|
BROKER_USER = 'kitsune'
|
|
|
|
BROKER_PASSWORD = 'kitsune'
|
|
|
|
BROKER_VHOST = 'kitsune'
|
|
|
|
CELERY_RESULT_BACKEND = 'amqp'
|
|
|
|
CELERY_IGNORE_RESULT = True
|
2010-06-02 07:55:31 +04:00
|
|
|
CELERY_ALWAYS_EAGER = True # For tests. Set to False for use.
|
2010-06-28 20:30:02 +04:00
|
|
|
|
2010-11-06 00:07:00 +03:00
|
|
|
# Wiki rebuild settings
|
|
|
|
WIKI_REBUILD_TOKEN = 'sumo:wiki:full-rebuild'
|
|
|
|
WIKI_REBUILD_ON_DEMAND = False
|
|
|
|
|
2010-06-28 20:30:02 +04:00
|
|
|
# Anonymous user cookie
|
|
|
|
ANONYMOUS_COOKIE_NAME = 'SUMO_ANONID'
|
|
|
|
ANONYMOUS_COOKIE_MAX_AGE = 30 * 86400 # Seconds
|
2010-07-02 18:18:15 +04:00
|
|
|
|
|
|
|
# Top contributors cache settings
|
|
|
|
TOP_CONTRIBUTORS_CACHE_KEY = 'sumo:TopContributors'
|
|
|
|
TOP_CONTRIBUTORS_CACHE_TIMEOUT = 60 * 60 * 12
|
2010-08-14 02:17:48 +04:00
|
|
|
|
2010-08-19 01:38:54 +04:00
|
|
|
# Do not change this without also deleting all wiki documents:
|
2010-08-14 02:17:48 +04:00
|
|
|
WIKI_DEFAULT_LANGUAGE = LANGUAGE_CODE
|
2010-09-02 05:00:30 +04:00
|
|
|
|
|
|
|
# Gallery settings
|
|
|
|
GALLERY_DEFAULT_LANGUAGE = WIKI_DEFAULT_LANGUAGE
|
|
|
|
GALLERY_IMAGE_PATH = 'uploads/gallery/images/'
|
|
|
|
GALLERY_IMAGE_THUMBNAIL_PATH = 'uploads/gallery/images/thumbnails/'
|
|
|
|
GALLERY_VIDEO_PATH = 'uploads/gallery/videos/'
|
|
|
|
GALLERY_VIDEO_THUMBNAIL_PATH = 'uploads/gallery/videos/thumbnails/'
|
2010-09-08 02:23:09 +04:00
|
|
|
THUMBNAIL_PROGRESS_URL = MEDIA_URL + 'img/wait-trans.gif'
|
|
|
|
VIDEO_MAX_FILESIZE = 16777216 # 16 megabytes, in bytes
|
2010-08-30 17:37:06 +04:00
|
|
|
|
|
|
|
# Customare care tweet collection settings
|
|
|
|
CC_MAX_TWEETS = 500 # Max. no. of tweets in DB
|
|
|
|
CC_TWEETS_PERPAGE = 100 # How many tweets to collect in one go. Max: 100.
|
2010-09-24 16:24:28 +04:00
|
|
|
|
|
|
|
TWITTER_CONSUMER_KEY = ''
|
|
|
|
TWITTER_CONSUMER_SECRET = ''
|
2010-09-28 19:19:12 +04:00
|
|
|
|
|
|
|
NOTIFICATIONS_FROM_ADDRESS = 'notifications@support.mozilla.com'
|
2010-10-21 03:40:09 +04:00
|
|
|
|
|
|
|
# URL of the chat server.
|
|
|
|
CHAT_SERVER = 'https://chat-support.mozilla.com:9091'
|
|
|
|
CHAT_CACHE_KEY = 'sumo-chat-queue-status'
|