avoid conflict when confirming pubsub sbuscription
[mygpo.git] / mygpo / settings.py
blob8f8d75d130f6cf226d582f3185a3b057e6517edc
1 # Django settings for mygpo project.
3 # This file is part of my.gpodder.org.
5 # my.gpodder.org is free software: you can redistribute it and/or modify it
6 # under the terms of the GNU Affero General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or (at your
8 # option) any later version.
10 # my.gpodder.org is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
13 # License for more details.
15 # You should have received a copy of the GNU Affero General Public License
16 # along with my.gpodder.org. If not, see <http://www.gnu.org/licenses/>.
19 import os.path
21 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
23 # http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges#ChangedthewayURLpathsaredetermined
24 FORCE_SCRIPT_NAME=""
26 DEBUG = True
27 TEMPLATE_DEBUG = DEBUG
29 ADMINS = ()
31 MANAGERS = ADMINS
33 # dummy entry.
34 # not needed for production, but tests fail otherwise in Django 1.4
35 DATABASES = {
36 'default': {
37 'ENGINE': 'django.db.backends.sqlite3',
38 'NAME': 'tmp',
42 COUCHDB_DATABASES = {
43 'mygpo.directory':
44 {'URL': 'http://127.0.0.1:5984/mygpo'},
46 'mygpo.core':
47 {'URL': 'http://127.0.0.1:5984/mygpo'},
49 'mygpo.api':
50 {'URL': 'http://127.0.0.1:5984/mygpo'},
52 'mygpo.users':
53 {'URL': 'http://127.0.0.1:5984/mygpo'},
55 'mygpo.share':
56 {'URL': 'http://127.0.0.1:5984/mygpo'},
58 'mygpo.maintenance':
59 {'URL': 'http://127.0.0.1:5984/mygpo'},
61 'mygpo.pubsub':
62 {'URL': 'http://127.0.0.1:5984/mygpo_pubsub'},
64 'django_couchdb_utils_auth':
65 {'URL': 'http://127.0.0.1:5984/mygpo'},
67 'django_couchdb_utils_sessions':
68 {'URL': 'http://127.0.0.1:5984/mygpo_sessions'},
70 'django_couchdb_utils_registration':
71 {'URL': 'http://127.0.0.1:5984/mygpo'},
73 'mygpo.categories':
74 {'URL': 'http://127.0.0.1:5984/mygpo_categories'},
76 'mygpo.userdata':
77 {'URL': 'http://127.0.0.1:5984/mygpo_userdata'},
80 # Maps design documents to databases. The keys correspond to the directories in
81 # mygpo/couch/, the values are the app labels which are mapped to the actual
82 # databases in COUCHDB_DATABASES. This indirect mapping is used because
83 # COUCHDB_DATABASES is likely to be overwritten in settings_prod.py while
84 # COUCHDB_DDOC_MAPPING is most probably not overwritten.
85 COUCHDB_DDOC_MAPPING = {
86 'general': 'core',
87 'categories': 'categories',
88 'pubsub': 'pubsub',
89 'userdata': 'userdata',
92 # Local time zone for this installation. Choices can be found here:
93 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
94 # although not all choices may be available on all operating systems.
95 # If running in a Windows environment this must be set to the same as your
96 # system time zone.
97 TIME_ZONE = 'UTC'
99 # Language code for this installation. All choices can be found here:
100 # http://www.i18nguy.com/unicode/language-identifiers.html
101 LANGUAGE_CODE = 'en-us'
103 SITE_ID = 1
105 # If you set this to False, Django will make some optimizations so as not
106 # to load the internationalization machinery.
107 USE_I18N = True
109 STATIC_ROOT = 'staticfiles'
110 STATIC_URL = '/media/'
112 STATICFILES_DIRS = (
113 os.path.abspath(os.path.join(BASE_DIR, '..', 'htdocs', 'media')),
116 # List of callables that know how to import templates from various sources.
117 TEMPLATE_LOADERS = (
118 'django.template.loaders.app_directories.Loader',
121 MIDDLEWARE_CLASSES = (
122 'django.middleware.cache.UpdateCacheMiddleware',
123 'django.middleware.common.CommonMiddleware',
124 'django.middleware.csrf.CsrfViewMiddleware',
125 'django.middleware.cache.FetchFromCacheMiddleware',
126 'django.contrib.sessions.middleware.SessionMiddleware',
127 'django.contrib.auth.middleware.AuthenticationMiddleware',
128 'django.middleware.locale.LocaleMiddleware',
129 'django.contrib.messages.middleware.MessageMiddleware',
132 ROOT_URLCONF = 'mygpo.urls'
134 TEMPLATE_DIRS = ()
136 INSTALLED_APPS = (
137 'django.contrib.contenttypes', # unused, but tests fail otherwise (?)
138 'django.contrib.messages',
139 'django.contrib.humanize',
140 'django.contrib.staticfiles',
141 'couchdbkit.ext.django',
142 'django_couchdb_utils.auth',
143 'django_couchdb_utils.registration',
144 'djcelery',
145 'mygpo.core',
146 'mygpo.users',
147 'mygpo.api',
148 'mygpo.web',
149 'mygpo.publisher',
150 'mygpo.data',
151 'mygpo.userfeeds',
152 'mygpo.directory',
153 'mygpo.maintenance',
154 'mygpo.share',
155 'mygpo.admin',
156 'mygpo.pubsub',
157 'mygpo.db.couchdb',
160 TEST_EXCLUDE = (
161 'django',
162 'couchdbkit',
165 TEST_RUNNER='mygpo.test.MygpoTestSuiteRunner'
167 ACCOUNT_ACTIVATION_DAYS = 7
169 AUTHENTICATION_BACKENDS = (
170 'django_couchdb_utils.auth.backends.CouchDBAuthBackend',
171 'mygpo.web.auth.EmailAuthenticationBackend',
174 SESSION_ENGINE = "django_couchdb_utils.sessions.cached_couchdb"
177 from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
179 TEMPLATE_CONTEXT_PROCESSORS += (
180 "mygpo.web.google.analytics",
181 "mygpo.web.google.adsense",
183 # make the debug variable available in templates
184 # https://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-debug
185 "django.core.context_processors.debug",
187 # required so that the request obj can be accessed from templates.
188 # this is used to direct users to previous page after login
189 'django.core.context_processors.request',
192 MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
194 USER_CLASS = 'mygpo.users.models.User'
196 LOGIN_URL = '/login/'
198 CSRF_FAILURE_VIEW='mygpo.web.views.security.csrf_failure'
201 # The following entries should be set in settings_prod.py
202 DEFAULT_FROM_EMAIL = ''
203 SECRET_KEY = ''
204 GOOGLE_ANALYTICS_PROPERTY_ID=''
205 DIRECTORY_EXCLUDED_TAGS = ()
206 FLICKR_API_KEY = ''
208 MAINTENANCE = os.path.exists(os.path.join(BASE_DIR, 'MAINTENANCE'))
211 LOGGING = {
212 'version': 1,
213 'disable_existing_loggers': True,
214 'formatters': {
215 'verbose': {
216 'format': '%(asctime)s %(name)s %(levelname)s %(message)s',
219 'filters': {
220 'require_debug_false': {
221 '()': 'django.utils.log.RequireDebugFalse'
224 'handlers': {
225 'console':{
226 'level': 'DEBUG',
227 'class': 'logging.StreamHandler',
228 'formatter': 'verbose'
230 'mail_admins': {
231 'level': 'ERROR',
232 'filters': ['require_debug_false'],
233 'class': 'django.utils.log.AdminEmailHandler'
236 'loggers': {
237 'django': {
238 'handlers': ['console'],
239 'propagate': True,
240 'level': 'WARN',
242 'mygpo': {
243 'handlers': ['console'],
244 'level': 'INFO',
249 # minimum number of subscribers a podcast must have to be assigned a slug
250 PODCAST_SLUG_SUBSCRIBER_LIMIT = 10
252 # minimum number of subscribers that a podcast needs to "push" one of its
253 # categories to the top
254 MIN_SUBSCRIBERS_CATEGORY=10
256 # maximum number of episode actions that the API processes immediatelly before
257 # returning the response. Larger requests will be handled in background.
258 # Handler can be set to None to disable
259 API_ACTIONS_MAX_NONBG=100
260 API_ACTIONS_BG_HANDLER='mygpo.api.tasks.episode_actions_celery_handler'
263 ADSENSE_CLIENT = ''
264 ADSENSE_SLOT_BOTTOM = ''
266 # enabled access to staff-only areas with ?staff=<STAFF_TOKEN>
267 STAFF_TOKEN = None
269 # Flattr settings -- available after you register your app
270 FLATTR_KEY = ''
271 FLATTR_SECRET = ''
273 # Flattr thing of the webservice. Will be flattr'd when a user sets the "Auto-Flattr gpodder.net" option
274 FLATTR_MYGPO_THING='https://flattr.com/submit/auto?user_id=stefankoegl&url=http://gpodder.net'
276 # The User-Agent string used for outgoing HTTP requests
277 USER_AGENT = 'gpodder.net (+https://github.com/gpodder/mygpo)'
279 # Base URL of the website that is used if the actually used parameters is not
280 # available. Request handlers, for example, can access the requested domain.
281 # Code that runs in background can not do this, and therefore requires a
282 # default value. This should be set to something like 'http://example.com'
283 DEFAULT_BASE_URL = ''
286 ### Celery
288 BROKER_URL='redis://localhost'
289 CELERY_RESULT_BACKEND='redis://localhost'
291 import djcelery
292 djcelery.setup_loader()
294 # a dictionary containing celery settings from
295 # http://docs.celeryproject.org/en/latest/configuration.html
296 CELERY_CONF = dict(
297 CELERY_SEND_TASK_ERROR_EMAILS = True,
298 ADMINS=ADMINS,
299 SERVER_EMAIL = "no-reply@example.com",
303 ### Google API
305 GOOGLE_CLIENT_ID=''
306 GOOGLE_CLIENT_SECRET=''
310 try:
311 from settings_prod import *
312 except ImportError, e:
313 import sys
314 print >> sys.stderr, 'create settings_prod.py with your customized settings'