2012-11-20 03:47:19 -06:00
|
|
|
"""Base settings shared by all environments"""
|
|
|
|
# Import global settings to make it easier to extend settings.
|
2023-06-05 04:48:21 -05:00
|
|
|
from email.utils import parseaddr
|
|
|
|
|
2013-01-11 15:24:48 -06:00
|
|
|
from django.template.defaultfilters import slugify
|
2018-06-02 12:04:32 -05:00
|
|
|
from django.conf.locale import LANG_INFO
|
2023-06-05 04:48:21 -05:00
|
|
|
import environ
|
|
|
|
|
|
|
|
env = environ.Env()
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2018-05-19 04:12:19 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Generic Django project settings
|
2018-05-19 04:12:19 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2023-06-05 04:48:21 -05:00
|
|
|
|
2023-06-05 08:08:19 -05:00
|
|
|
INTERNAL_IPS = env.list('INTERNAL_IPS', default=['127.0.0.1'])
|
2023-06-05 04:48:21 -05:00
|
|
|
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['*'])
|
|
|
|
ADMINS = tuple(parseaddr(email) for email in env.list('ADMINS', default=[]))
|
|
|
|
|
|
|
|
|
|
|
|
DEBUG = env.bool('DEBUG', default=False)
|
2012-11-20 03:47:19 -06:00
|
|
|
|
|
|
|
SITE_ID = 1
|
2018-06-02 12:04:32 -05:00
|
|
|
# Add languages we're missing from Django
|
|
|
|
LANG_INFO.update({
|
|
|
|
'am-et': {
|
|
|
|
'bidi': False,
|
|
|
|
'name': 'Amharic',
|
|
|
|
'code': 'am-et',
|
|
|
|
'name_local': 'አማርኛ'
|
|
|
|
},
|
|
|
|
'zh': {
|
|
|
|
'bidi': False,
|
|
|
|
'code': 'zh',
|
|
|
|
'name': 'Chinese',
|
|
|
|
'name_local': '简体中文',
|
|
|
|
},
|
2020-03-09 03:27:01 -05:00
|
|
|
'si': {
|
|
|
|
'bidi': False,
|
|
|
|
'code': 'si',
|
|
|
|
'name': 'Sinhala',
|
|
|
|
'name_local': 'සිංහල',
|
|
|
|
},
|
2023-02-22 03:23:03 -06:00
|
|
|
"ms": {
|
|
|
|
"bidi": False,
|
|
|
|
"code": "ms",
|
|
|
|
"name": "Malay",
|
|
|
|
"name_local": "Bahasa Melayu",
|
|
|
|
},
|
2018-06-02 12:04:32 -05:00
|
|
|
})
|
2012-11-20 03:47:19 -06:00
|
|
|
# Local time zone for this installation. Choices can be found here:
|
|
|
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
|
|
|
TIME_ZONE = 'UTC'
|
|
|
|
USE_TZ = True
|
|
|
|
USE_I18N = True
|
|
|
|
LANGUAGE_CODE = 'en'
|
|
|
|
LANGUAGES = (
|
2018-06-02 09:39:44 -05:00
|
|
|
('am-et', 'Amharic'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('ar', 'Arabic'),
|
|
|
|
('ast', 'Asturian'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('bg', 'Bulgarian'),
|
|
|
|
('ca', 'Catalan'),
|
|
|
|
('cs-cz', 'Czech'),
|
|
|
|
('da', 'Danish'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('de', 'German'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('el', 'Greek'),
|
2012-11-20 03:47:19 -06:00
|
|
|
('en', 'English'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('es', 'Spanish'),
|
2020-03-09 11:24:07 -05:00
|
|
|
('et', 'Estonian'),
|
2023-02-22 03:23:03 -06:00
|
|
|
('fa-ir', 'Persian (Iran)'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('fi', 'Finnish'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('fr', 'French'),
|
2019-01-30 04:23:57 -06:00
|
|
|
('gl', 'Galician'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('he', 'Hebrew'),
|
2018-06-02 09:53:13 -05:00
|
|
|
('hr', 'Croatian'),
|
2018-06-02 09:48:17 -05:00
|
|
|
('hu', 'Hungarian'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('id', 'Indonesian'),
|
|
|
|
('is', 'Icelandic'),
|
|
|
|
('it', 'Italian'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('ja', 'Japanese'),
|
2019-05-11 04:32:33 -05:00
|
|
|
('ko', 'Korean'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('lt', 'Lithuanian'),
|
2023-02-22 03:23:03 -06:00
|
|
|
('ms', 'Malay'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('nl', 'Dutch'),
|
2020-03-09 11:19:16 -05:00
|
|
|
('no', 'Norwegian'),
|
2018-06-02 09:51:04 -05:00
|
|
|
('pl', 'Polish'),
|
2023-02-22 03:23:03 -06:00
|
|
|
('pt', 'Portuguese'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('pt-br', 'Portuguese (Brazil)'),
|
|
|
|
('pt-pt', 'Portuguese (Portugal)'),
|
2019-01-30 04:23:57 -06:00
|
|
|
('ro', 'Romanian'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('ru', 'Russian'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('si-lk', 'Sinhala (Sri Lanka)'),
|
2016-11-06 15:52:33 -06:00
|
|
|
('sk-sk', 'Slovak'),
|
2018-06-02 09:41:45 -05:00
|
|
|
('sl', 'Slovenian'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('sr', 'Serbian'),
|
2020-03-09 11:25:45 -05:00
|
|
|
('sv', 'Swedish'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('th-th', 'Thai (Thailand)'),
|
|
|
|
('tr', 'Turkish'),
|
2018-06-02 09:39:44 -05:00
|
|
|
('uk-ua', 'Ukrainian'),
|
|
|
|
('vi', 'Vietnamese'),
|
|
|
|
('zh', 'Chinese'),
|
Translation update
* Update all translations
* Add: ar, ast, he, id, is, pt-br, pt-pt, si-lk, sr, th-th, tr
* Remove: pt (replaced by pt-pt and pt-br)
2020-03-03 12:46:10 -06:00
|
|
|
('zh-tw', 'Chinese (Taiwan)'),
|
2012-11-20 03:47:19 -06:00
|
|
|
)
|
|
|
|
|
|
|
|
# Make this unique, and don't share it with anybody.
|
2023-06-05 04:48:21 -05:00
|
|
|
SECRET_KEY = env('SECRET_KEY', default=None)
|
2012-11-20 03:47:19 -06:00
|
|
|
|
|
|
|
INSTALLED_APPS = (
|
|
|
|
'django.contrib.auth',
|
|
|
|
'django.contrib.contenttypes',
|
|
|
|
'django.contrib.sessions',
|
|
|
|
'django.contrib.sites',
|
|
|
|
'django.contrib.messages',
|
|
|
|
'django.contrib.staticfiles',
|
|
|
|
'django.contrib.admin',
|
2015-08-02 11:08:31 -05:00
|
|
|
'django.contrib.gis',
|
|
|
|
|
|
|
|
'umap',
|
|
|
|
'compressor',
|
2017-01-09 03:13:21 -06:00
|
|
|
'social_django',
|
2023-02-22 08:19:38 -06:00
|
|
|
# See https://github.com/peopledoc/django-agnocomplete/commit/26eda2dfa4a2f8a805ca2ea19a0c504b9d773a1c
|
|
|
|
# Django does not find the app config in the default place, so the app is not loaded
|
|
|
|
# so the "autodiscover" is not run.
|
|
|
|
'agnocomplete.app.AgnocompleteConfig',
|
2012-11-20 03:47:19 -06:00
|
|
|
)
|
2021-09-16 05:15:18 -05:00
|
|
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2023-05-31 10:05:57 -05:00
|
|
|
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
2023-05-31 10:20:22 -05:00
|
|
|
FROM_EMAIL = None
|
2023-05-31 10:05:57 -05:00
|
|
|
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Calculation of directories relative to the project module location
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
|
|
|
import os
|
2013-01-02 08:49:20 -06:00
|
|
|
import umap as project_module
|
2012-11-20 03:47:19 -06:00
|
|
|
|
|
|
|
PROJECT_DIR = os.path.dirname(os.path.realpath(project_module.__file__))
|
|
|
|
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Project URLS and media settings
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2013-01-02 08:49:20 -06:00
|
|
|
ROOT_URLCONF = 'umap.urls'
|
2016-09-10 09:21:09 -05:00
|
|
|
WSGI_APPLICATION = 'umap.wsgi.application'
|
2012-11-20 03:47:19 -06:00
|
|
|
|
|
|
|
LOGIN_URL = '/login/'
|
|
|
|
LOGOUT_URL = '/logout/'
|
|
|
|
LOGIN_REDIRECT_URL = '/'
|
|
|
|
|
|
|
|
STATIC_URL = '/static/'
|
|
|
|
MEDIA_URL = '/uploads/'
|
|
|
|
|
2014-06-16 07:02:18 -05:00
|
|
|
STATIC_ROOT = os.path.join('static')
|
|
|
|
MEDIA_ROOT = os.path.join('uploads')
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2016-04-24 09:14:47 -05:00
|
|
|
STATICFILES_FINDERS = [
|
2021-05-17 03:51:24 -05:00
|
|
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
|
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
2012-12-22 05:42:29 -06:00
|
|
|
'compressor.finders.CompressorFinder',
|
2021-05-17 03:51:24 -05:00
|
|
|
]
|
2023-04-04 02:11:12 -05:00
|
|
|
STATICFILES_DIRS = [] # May be extended when using UMAP_CUSTOM_STATICS
|
2012-12-22 05:42:29 -06:00
|
|
|
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Templates
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2016-04-25 16:53:58 -05:00
|
|
|
TEMPLATES = [
|
|
|
|
{
|
|
|
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
|
|
|
'APP_DIRS': True,
|
|
|
|
'OPTIONS': {
|
|
|
|
'context_processors': (
|
2016-08-20 05:04:08 -05:00
|
|
|
'django.contrib.auth.context_processors.auth',
|
|
|
|
'django.template.context_processors.debug',
|
|
|
|
'django.template.context_processors.i18n',
|
|
|
|
'django.template.context_processors.request',
|
|
|
|
'django.template.context_processors.media',
|
|
|
|
'django.template.context_processors.static',
|
|
|
|
'django.template.context_processors.tz',
|
2019-04-07 04:31:35 -05:00
|
|
|
'django.contrib.messages.context_processors.messages',
|
2017-01-09 03:13:21 -06:00
|
|
|
'social_django.context_processors.backends',
|
|
|
|
'social_django.context_processors.login_redirect',
|
2016-06-30 07:41:10 -05:00
|
|
|
'umap.context_processors.settings',
|
2016-04-25 16:53:58 -05:00
|
|
|
'umap.context_processors.version',
|
|
|
|
)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
]
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2014-04-19 13:26:41 -05:00
|
|
|
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Middleware
|
2015-10-17 01:52:29 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2018-05-18 14:40:38 -05:00
|
|
|
MIDDLEWARE = (
|
2014-04-24 16:20:25 -05:00
|
|
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
2012-12-27 07:59:05 -06:00
|
|
|
'django.middleware.locale.LocaleMiddleware',
|
2014-04-24 16:20:25 -05:00
|
|
|
'django.middleware.common.CommonMiddleware',
|
2018-09-07 15:12:39 -05:00
|
|
|
'umap.middleware.readonly_middleware',
|
2014-04-24 16:20:25 -05:00
|
|
|
'django.middleware.csrf.CsrfViewMiddleware',
|
|
|
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
|
|
'django.contrib.messages.middleware.MessageMiddleware',
|
2012-11-20 03:47:19 -06:00
|
|
|
)
|
|
|
|
|
2018-05-18 14:40:38 -05:00
|
|
|
|
2015-10-11 03:23:48 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Auth / security
|
2015-10-11 03:23:48 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2023-06-05 04:48:21 -05:00
|
|
|
# Set to True if login into django account should be possible. Default is to
|
|
|
|
# only use OAuth flow.
|
|
|
|
ENABLE_ACCOUNT_LOGIN = env.bool("ENABLE_ACCOUNT_LOGIN", default=False)
|
2023-06-16 07:59:59 -05:00
|
|
|
USER_DISPLAY_NAME = "{username}"
|
|
|
|
# For use by Agnocomplete
|
|
|
|
# See https://django-agnocomplete.readthedocs.io/en/latest/autocomplete-definition.html#agnocompletemode
|
|
|
|
USER_AUTOCOMPLETE_FIELDS = ["^username"]
|
|
|
|
USER_URL_FIELD = "username"
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2015-08-02 11:08:31 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Miscellaneous project settings
|
2015-08-02 11:08:31 -05:00
|
|
|
# =============================================================================
|
2023-06-05 04:48:21 -05:00
|
|
|
UMAP_ALLOW_ANONYMOUS = env.bool("UMAP_ALLOW_ANONYMOUS", default=False)
|
|
|
|
|
2018-05-19 10:16:34 -05:00
|
|
|
UMAP_EXTRA_URLS = {
|
2015-10-11 03:23:48 -05:00
|
|
|
'routing': 'http://www.openstreetmap.org/directions?engine=osrm_car&route={lat},{lng}&locale={locale}#map={zoom}/{lat}/{lng}', # noqa
|
2020-11-08 08:10:13 -06:00
|
|
|
'ajax_proxy': '/ajax-proxy/?url={url}&ttl={ttl}',
|
|
|
|
'search': 'https://photon.komoot.io/api/?',
|
2014-01-09 08:20:57 -06:00
|
|
|
}
|
2023-06-05 04:48:21 -05:00
|
|
|
UMAP_KEEP_VERSIONS = env.int('UMAP_KEEP_VERSIONS', default=10)
|
|
|
|
SITE_URL = env("SITE_URL", default="http://umap.org")
|
|
|
|
SHORT_SITE_URL = env('SHORT_SITE_URL', default=None)
|
2016-06-30 07:41:10 -05:00
|
|
|
SITE_NAME = 'uMap'
|
2023-06-05 04:48:21 -05:00
|
|
|
UMAP_DEMO_SITE = env('UMAP_DEMO_SITE', default=False)
|
2016-01-02 06:21:24 -06:00
|
|
|
UMAP_EXCLUDE_DEFAULT_MAPS = False
|
2016-01-02 06:42:57 -06:00
|
|
|
UMAP_MAPS_PER_PAGE = 5
|
|
|
|
UMAP_MAPS_PER_PAGE_OWNER = 10
|
2023-05-11 04:33:08 -05:00
|
|
|
UMAP_SEARCH_CONFIGURATION = "simple"
|
2017-01-10 09:57:21 -06:00
|
|
|
UMAP_FEEDBACK_LINK = "https://wiki.openstreetmap.org/wiki/UMap#Feedback_and_help" # noqa
|
2015-08-02 11:08:31 -05:00
|
|
|
USER_MAPS_URL = 'user_maps'
|
2017-05-10 04:12:10 -05:00
|
|
|
DATABASES = {
|
2023-06-05 04:48:21 -05:00
|
|
|
'default': env.db(default='postgis://localhost:5432/umap')
|
2017-05-10 04:12:10 -05:00
|
|
|
}
|
2023-06-05 04:48:21 -05:00
|
|
|
|
|
|
|
UMAP_READONLY = env('UMAP_READONLY', default=False)
|
2023-02-27 05:04:09 -06:00
|
|
|
UMAP_GZIP = True
|
2018-09-08 10:01:22 -05:00
|
|
|
LOCALE_PATHS = [os.path.join(PROJECT_DIR, 'locale')]
|
2012-11-20 03:47:19 -06:00
|
|
|
|
2023-06-05 04:48:21 -05:00
|
|
|
LEAFLET_LONGITUDE = env.int('LEAFLET_LONGITUDE', default=2)
|
|
|
|
LEAFLET_LATITUDE = env.int('LEAFLET_LATITUDE', default=51)
|
|
|
|
LEAFLET_ZOOM = env.int('LEAFLET_ZOOM', default=6)
|
|
|
|
|
|
|
|
|
2015-08-02 11:08:31 -05:00
|
|
|
# =============================================================================
|
2012-11-20 03:47:19 -06:00
|
|
|
# Third party app settings
|
2015-08-02 11:08:31 -05:00
|
|
|
# =============================================================================
|
2012-12-22 05:42:29 -06:00
|
|
|
COMPRESS_ENABLED = True
|
|
|
|
COMPRESS_OFFLINE = True
|
2013-01-11 15:24:48 -06:00
|
|
|
|
2020-03-22 12:00:47 -05:00
|
|
|
SOCIAL_AUTH_NO_DEFAULT_PROTECTED_USER_FIELDS = True
|
Auth: mark id as protected, otherwise social-core try to create
new account at each login:
```
File "/srv/umap/venv/lib/python3.10/site-packages/social_core/backends/base.py", line 83, in pipeline
out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "/srv/umap/venv/lib/python3.10/site-packages/social_core/backends/base.py", line 113, in run_pipeline
result = func(*args, **out) or {}
File "/srv/umap/venv/lib/python3.10/site-packages/social_core/pipeline/user.py", line 122, in user_details
strategy.storage.user.changed(user)
File "/srv/umap/venv/lib/python3.10/site-packages/social_django/storage.py", line 16, in changed
user.save()
django.db.utils.IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL: Key (username)=(xxxxx) already exists.
```
2023-05-25 11:34:55 -05:00
|
|
|
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ("id", )
|
2013-01-11 15:24:48 -06:00
|
|
|
LOGIN_URL = "login"
|
|
|
|
SOCIAL_AUTH_LOGIN_REDIRECT_URL = "/login/popup/end/"
|
2023-06-05 04:48:21 -05:00
|
|
|
|
2023-06-05 07:48:55 -05:00
|
|
|
AUTHENTICATION_BACKENDS = ()
|
|
|
|
|
|
|
|
SOCIAL_AUTH_OPENSTREETMAP_KEY = env('SOCIAL_AUTH_OPENSTREETMAP_KEY', default="")
|
|
|
|
SOCIAL_AUTH_OPENSTREETMAP_SECRET = env('SOCIAL_AUTH_OPENSTREETMAP_SECRET', default="")
|
|
|
|
if SOCIAL_AUTH_OPENSTREETMAP_KEY and SOCIAL_AUTH_OPENSTREETMAP_SECRET:
|
|
|
|
AUTHENTICATION_BACKENDS += (
|
|
|
|
'social_core.backends.openstreetmap.OpenStreetMapOAuth',
|
|
|
|
)
|
|
|
|
|
|
|
|
AUTHENTICATION_BACKENDS += (
|
|
|
|
'django.contrib.auth.backends.ModelBackend',
|
|
|
|
)
|
|
|
|
|
2023-06-05 04:48:21 -05:00
|
|
|
LOGGING = {
|
|
|
|
'version': 1,
|
|
|
|
'disable_existing_loggers': False,
|
|
|
|
'handlers': {
|
|
|
|
'console': {
|
|
|
|
'level': 'ERROR',
|
|
|
|
'filters': None,
|
|
|
|
'class': 'logging.StreamHandler',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
'loggers': {
|
|
|
|
'django': {
|
|
|
|
'handlers': ['console'],
|
|
|
|
'level': 'ERROR',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|