Files
mayan-edms/mayan/settings/base.py
Roberto Rosario 4ff9794286 Update and move JavaScript install code
Update the JavaScript dependency installation code to handle scoped
packages. The code is also updated to use pathlib's Path.

Move the JavaScript dependency installation to its own app named
dependencies.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2018-12-26 02:15:44 -04:00

354 lines
9.8 KiB
Python

"""
Django settings for mayan10 project.
Generated by 'django-admin startproject' using Django 1.10.4.
For more information on this file, see
https://docs.djangoproject.com/en/1.10/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.10/ref/settings/
"""
from __future__ import unicode_literals
import os
import sys
from django.utils.translation import ugettext_lazy as _
from mayan.apps.smart_settings.literals import DJANGO_SETTINGS_LIST
from mayan.apps.smart_settings.utils import (
get_environment_variables, read_configuration_file, yaml_loads
)
from .literals import (
CONFIGURATION_FILENAME, CONFIGURATION_LAST_GOOD_FILENAME,
DEFAULT_SECRET_KEY, SECRET_KEY_FILENAME, SYSTEM_DIR
)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
MEDIA_ROOT = os.environ.get(
'MAYAN_MEDIA_ROOT', os.path.join(BASE_DIR, 'media')
)
# SECURITY WARNING: keep the secret key used in production secret!
environment_secret_key = os.environ.get('MAYAN_SECRET_KEY')
if environment_secret_key:
SECRET_KEY = environment_secret_key
else:
try:
with open(os.path.join(MEDIA_ROOT, SYSTEM_DIR, SECRET_KEY_FILENAME)) as file_object:
SECRET_KEY = file_object.read().strip()
except IOError:
SECRET_KEY = DEFAULT_SECRET_KEY
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = yaml_loads(os.environ.get('MAYAN_DEBUG', 'false'))
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '[::1]']
# Application definition
INSTALLED_APPS = (
# Placed at the top so it can override any template
'mayan.apps.appearance',
# Django
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.sites',
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# 3rd party
'actstream',
'colorful',
'corsheaders',
'djcelery',
'formtools',
'mathfilters',
'mptt',
'pure_pagination',
'rest_framework',
'rest_framework.authtoken',
'solo',
'stronghold',
'widget_tweaks',
# Base apps
'mayan.apps.acls',
'mayan.apps.authentication',
'mayan.apps.autoadmin',
'mayan.apps.common',
'mayan.apps.converter',
'mayan.apps.dashboards',
'mayan.apps.dependencies',
'mayan.apps.django_gpg',
'mayan.apps.dynamic_search',
'mayan.apps.events',
'mayan.apps.file_caching',
'mayan.apps.lock_manager',
'mayan.apps.mimetype',
'mayan.apps.navigation',
'mayan.apps.permissions',
'mayan.apps.smart_settings',
'mayan.apps.user_management',
# Document apps
'mayan.apps.cabinets',
'mayan.apps.checkouts',
'mayan.apps.document_comments',
'mayan.apps.document_indexing',
'mayan.apps.document_parsing',
'mayan.apps.document_signatures',
'mayan.apps.document_states',
'mayan.apps.documents',
'mayan.apps.file_metadata',
'mayan.apps.linking',
'mayan.apps.mailer',
'mayan.apps.mayan_statistics',
'mayan.apps.metadata',
'mayan.apps.mirroring',
'mayan.apps.motd',
'mayan.apps.ocr',
'mayan.apps.rest_api',
'mayan.apps.sources',
'mayan.apps.storage',
'mayan.apps.tags',
'mayan.apps.task_manager',
# Placed after rest_api to allow template overriding
'drf_yasg',
)
MIDDLEWARE = (
'mayan.apps.common.middleware.error_logging.ErrorLoggingMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware',
'mayan.apps.common.middleware.timezone.TimezoneMiddleware',
'stronghold.middleware.LoginRequiredMiddleware',
'mayan.apps.common.middleware.ajax_redirect.AjaxRedirect',
)
ROOT_URLCONF = 'mayan.urls'
TEMPLATES = (
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.request',
],
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader'
]
},
},
)
WSGI_APPLICATION = 'mayan.wsgi.application'
# Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
# ------------ Custom settings section ----------
LANGUAGES = (
('ar', _('Arabic')),
('bg', _('Bulgarian')),
('bs', _('Bosnian (Bosnia and Herzegovina)')),
('da', _('Danish')),
('de', _('German (Germany)')),
('en', _('English')),
('es', _('Spanish')),
('fa', _('Persian')),
('fr', _('French')),
('hu', _('Hungarian')),
('hr', _('Croatian')),
('id', _('Indonesian')),
('it', _('Italian')),
('nl', _('Dutch (Netherlands)')),
('pl', _('Polish')),
('pt', _('Portuguese')),
('pt-br', _('Portuguese (Brazil)')),
('ro', _('Romanian (Romania)')),
('ru', _('Russian')),
('sl', _('Slovenian')),
('tr', _('Turkish')),
('vi', _('Vietnamese (Viet Nam)')),
('zh-cn', _('Chinese (China)')),
)
SITE_ID = 1
STATIC_ROOT = os.environ.get(
'MAYAN_STATIC_ROOT', os.path.join(MEDIA_ROOT, 'static')
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
TEST_RUNNER = 'mayan.apps.common.tests.runner.MayanTestRunner'
# --------- Django -------------------
LOGIN_URL = yaml_loads(
os.environ.get('MAYAN_LOGIN_URL', 'authentication:login_view')
)
LOGIN_REDIRECT_URL = yaml_loads(
os.environ.get('MAYAN_LOGIN_REDIRECT_URL', 'common:root')
)
INTERNAL_IPS = ('127.0.0.1',)
# ---------- Django REST framework -----------
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}
# --------- Pagination --------
PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED': 8,
'MARGIN_PAGES_DISPLAYED': 2,
}
# ----------- Celery ----------
CELERY_ACCEPT_CONTENT = ('json',)
CELERY_BEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_ENABLE_UTC = True
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_CREATE_MISSING_QUEUES = False
CELERY_TASK_EAGER_PROPAGATES = False
CELERY_TASK_QUEUES = []
CELERY_TASK_ROUTES = {}
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
CELERY_WORKER_DISABLE_RATE_LIMITS = True
# ------------ CORS ------------
CORS_ORIGIN_ALLOW_ALL = True
# ------ Timezone --------
TIMEZONE_COOKIE_NAME = 'django_timezone'
TIMEZONE_SESSION_KEY = 'django_timezone'
# ----- Stronghold -------
STRONGHOLD_PUBLIC_URLS = (r'^/docs/.+$',)
# ----- Swagger --------
SWAGGER_SETTINGS = {
'DEFAULT_INFO': 'rest_api.schemas.openapi_info',
'DEFAULT_MODEL_DEPTH': 1,
'DOC_EXPANSION': 'None',
}
# ----- AJAX REDIRECT -----
AJAX_REDIRECT_CODE = 278
# ----- Celery -----
CELERY_BROKER_URL = os.environ.get('MAYAN_CELERY_BROKER_URL')
CELERY_TASK_ALWAYS_EAGER = yaml_loads(
os.environ.get('MAYAN_CELERY_TASK_ALWAYS_EAGER', 'false')
)
CELERY_RESULT_BACKEND = os.environ.get('MAYAN_CELERY_RESULT_BACKEND')
# ----- Database -----
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(MEDIA_ROOT, 'db.sqlite3'),
}
}
CONFIGURATION_FILEPATH = os.environ.get(
'MAYAN_CONFIGURATION_FILEPATH', os.path.join(
MEDIA_ROOT, CONFIGURATION_FILENAME
)
)
CONFIGURATION_LAST_GOOD_FILEPATH = os.environ.get(
'MAYAN_CONFIGURATION_LAST_GOOD_FILEPATH', os.path.join(
MEDIA_ROOT, CONFIGURATION_LAST_GOOD_FILENAME
)
)
if 'revertsettings' not in sys.argv:
configuration_result = read_configuration_file(CONFIGURATION_FILEPATH)
environment_result = get_environment_variables()
for setting in DJANGO_SETTINGS_LIST:
if setting in configuration_result:
globals().update({setting: configuration_result[setting]})
elif setting in environment_result:
globals().update({setting: environment_result[setting]})