298 lines
9.4 KiB
Python
298 lines
9.4 KiB
Python
"""Base settings shared by all environments"""
|
|
# Import global settings to make it easier to extend settings.
|
|
from email.utils import parseaddr
|
|
|
|
import environ
|
|
from django.conf.locale import LANG_INFO
|
|
|
|
env = environ.Env()
|
|
|
|
# =============================================================================
|
|
# Generic Django project settings
|
|
# =============================================================================
|
|
|
|
|
|
INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"])
|
|
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["*"])
|
|
ADMINS = tuple(parseaddr(email) for email in env.list("ADMINS", default=[]))
|
|
|
|
|
|
DEBUG = env.bool("DEBUG", default=False)
|
|
|
|
SITE_ID = 1
|
|
# 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": "简体中文",
|
|
},
|
|
"si": {
|
|
"bidi": False,
|
|
"code": "si",
|
|
"name": "Sinhala",
|
|
"name_local": "සිංහල",
|
|
},
|
|
"ms": {
|
|
"bidi": False,
|
|
"code": "ms",
|
|
"name": "Malay",
|
|
"name_local": "Bahasa Melayu",
|
|
},
|
|
}
|
|
)
|
|
# 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 = (
|
|
("am-et", "Amharic"),
|
|
("ar", "Arabic"),
|
|
("ast", "Asturian"),
|
|
("bg", "Bulgarian"),
|
|
("br", "Breton"),
|
|
("ca", "Catalan"),
|
|
("cs-cz", "Czech"),
|
|
("da", "Danish"),
|
|
("de", "German"),
|
|
("el", "Greek"),
|
|
("en", "English"),
|
|
("es", "Spanish"),
|
|
("et", "Estonian"),
|
|
("eu", "Basque"),
|
|
("fa-ir", "Persian (Iran)"),
|
|
("fi", "Finnish"),
|
|
("fr", "French"),
|
|
("gl", "Galician"),
|
|
("he", "Hebrew"),
|
|
("hr", "Croatian"),
|
|
("hu", "Hungarian"),
|
|
("id", "Indonesian"),
|
|
("is", "Icelandic"),
|
|
("it", "Italian"),
|
|
("ja", "Japanese"),
|
|
("ko", "Korean"),
|
|
("lt", "Lithuanian"),
|
|
("ms", "Malay"),
|
|
("nl", "Dutch"),
|
|
("no", "Norwegian"),
|
|
("pl", "Polish"),
|
|
("pt", "Portuguese"),
|
|
("pt-br", "Portuguese (Brazil)"),
|
|
("pt-pt", "Portuguese (Portugal)"),
|
|
("ro", "Romanian"),
|
|
("ru", "Russian"),
|
|
("si", "Sinhala"),
|
|
("sk-sk", "Slovak"),
|
|
("sl", "Slovenian"),
|
|
("sr", "Serbian"),
|
|
("sv", "Swedish"),
|
|
("th-th", "Thai (Thailand)"),
|
|
("tr", "Turkish"),
|
|
("uk-ua", "Ukrainian"),
|
|
("vi", "Vietnamese"),
|
|
("zh", "Chinese"),
|
|
("zh-tw", "Chinese (Taiwan)"),
|
|
)
|
|
|
|
# Make this unique, and don't share it with anybody.
|
|
SECRET_KEY = env("SECRET_KEY", default=None)
|
|
|
|
INSTALLED_APPS = (
|
|
"django.contrib.auth",
|
|
"django.contrib.contenttypes",
|
|
"django.contrib.sessions",
|
|
"django.contrib.sites",
|
|
"django.contrib.messages",
|
|
"django.contrib.staticfiles",
|
|
"django.contrib.admin",
|
|
"django.contrib.gis",
|
|
"django_probes",
|
|
"umap",
|
|
"compressor",
|
|
"social_django",
|
|
# 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",
|
|
)
|
|
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
|
|
|
|
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
|
FROM_EMAIL = None
|
|
# https://docs.djangoproject.com/en/4.2/releases/4.1/#forms
|
|
FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer"
|
|
|
|
# =============================================================================
|
|
# Calculation of directories relative to the project module location
|
|
# =============================================================================
|
|
|
|
import os
|
|
|
|
import umap as project_module
|
|
|
|
PROJECT_DIR = os.path.dirname(os.path.realpath(project_module.__file__))
|
|
|
|
# =============================================================================
|
|
# Project URLS and media settings
|
|
# =============================================================================
|
|
|
|
ROOT_URLCONF = "umap.urls"
|
|
WSGI_APPLICATION = "umap.wsgi.application"
|
|
|
|
LOGIN_URL = "/login/"
|
|
LOGOUT_URL = "/logout/"
|
|
LOGIN_REDIRECT_URL = "/"
|
|
|
|
STATIC_URL = "/static/"
|
|
MEDIA_URL = "/uploads/"
|
|
|
|
STATIC_ROOT = os.path.join("static")
|
|
MEDIA_ROOT = os.path.join("uploads")
|
|
|
|
STATICFILES_FINDERS = [
|
|
"django.contrib.staticfiles.finders.FileSystemFinder",
|
|
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
|
|
"compressor.finders.CompressorFinder",
|
|
]
|
|
STATICFILES_DIRS = [] # May be extended when using UMAP_CUSTOM_STATICS
|
|
|
|
# =============================================================================
|
|
# Templates
|
|
# =============================================================================
|
|
|
|
TEMPLATES = [
|
|
{
|
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
|
"APP_DIRS": True,
|
|
"OPTIONS": {
|
|
"context_processors": (
|
|
"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",
|
|
"django.contrib.messages.context_processors.messages",
|
|
"social_django.context_processors.backends",
|
|
"social_django.context_processors.login_redirect",
|
|
"umap.context_processors.settings",
|
|
"umap.context_processors.version",
|
|
)
|
|
},
|
|
},
|
|
]
|
|
|
|
|
|
# =============================================================================
|
|
# Middleware
|
|
# =============================================================================
|
|
|
|
MIDDLEWARE = (
|
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
"django.middleware.locale.LocaleMiddleware",
|
|
"django.middleware.common.CommonMiddleware",
|
|
"umap.middleware.readonly_middleware",
|
|
"django.middleware.csrf.CsrfViewMiddleware",
|
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
"django.contrib.messages.middleware.MessageMiddleware",
|
|
)
|
|
|
|
|
|
# =============================================================================
|
|
# Auth / security
|
|
# =============================================================================
|
|
|
|
# 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)
|
|
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"
|
|
|
|
# =============================================================================
|
|
# Miscellaneous project settings
|
|
# =============================================================================
|
|
UMAP_ALLOW_ANONYMOUS = env.bool("UMAP_ALLOW_ANONYMOUS", default=False)
|
|
|
|
UMAP_EXTRA_URLS = {
|
|
"routing": "http://www.openstreetmap.org/directions?engine=osrm_car&route={lat},{lng}&locale={locale}#map={zoom}/{lat}/{lng}", # noqa
|
|
"ajax_proxy": "/ajax-proxy/?url={url}&ttl={ttl}",
|
|
"search": "https://photon.komoot.io/api/?",
|
|
}
|
|
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)
|
|
SITE_NAME = "uMap"
|
|
UMAP_DEMO_SITE = env("UMAP_DEMO_SITE", default=False)
|
|
UMAP_EXCLUDE_DEFAULT_MAPS = False
|
|
UMAP_MAPS_PER_PAGE = 5
|
|
UMAP_MAPS_PER_SEARCH = 25
|
|
UMAP_MAPS_PER_PAGE_OWNER = 10
|
|
UMAP_SEARCH_CONFIGURATION = "simple"
|
|
UMAP_FEEDBACK_LINK = "https://wiki.openstreetmap.org/wiki/UMap#Feedback_and_help"
|
|
USER_MAPS_URL = "user_maps"
|
|
DATABASES = {"default": env.db(default="postgis://localhost:5432/umap")}
|
|
UMAP_DEFAULT_SHARE_STATUS = None
|
|
UMAP_DEFAULT_EDIT_STATUS = None
|
|
UMAP_DEFAULT_FEATURES_HAVE_OWNERS = False
|
|
|
|
UMAP_READONLY = env("UMAP_READONLY", default=False)
|
|
UMAP_GZIP = True
|
|
LOCALE_PATHS = [os.path.join(PROJECT_DIR, "locale")]
|
|
|
|
LEAFLET_LONGITUDE = env.int("LEAFLET_LONGITUDE", default=2)
|
|
LEAFLET_LATITUDE = env.int("LEAFLET_LATITUDE", default=51)
|
|
LEAFLET_ZOOM = env.int("LEAFLET_ZOOM", default=6)
|
|
|
|
|
|
# =============================================================================
|
|
# Third party app settings
|
|
# =============================================================================
|
|
COMPRESS_ENABLED = True
|
|
COMPRESS_OFFLINE = True
|
|
|
|
LOGIN_URL = "login"
|
|
SOCIAL_AUTH_LOGIN_REDIRECT_URL = "/login/popup/end/"
|
|
|
|
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",)
|
|
|
|
LOGGING = {
|
|
"version": 1,
|
|
"disable_existing_loggers": False,
|
|
"handlers": {
|
|
"console": {
|
|
"level": "ERROR",
|
|
"filters": None,
|
|
"class": "logging.StreamHandler",
|
|
},
|
|
},
|
|
"loggers": {
|
|
"django": {
|
|
"handlers": ["console"],
|
|
"level": "ERROR",
|
|
},
|
|
},
|
|
}
|