Files
mayan-edms/mayan/settings/base.py
Roberto Rosario 0a7908baca File metadata: Add file metadata app
Add the file metadata app. This app uses binary wrappers called drivers
to extract properties from the file of documents. The default driver
uses the exiftool to extract the EXIF record from JPEG images.
The exiftool can also extra some properties from other files like
PDFs, office files and sound file.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2018-12-14 02:16:38 -04:00

344 lines
9.5 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 .literals import (
CONFIGURATION_FILENAME, CONFIGURATION_LAST_GOOD_FILENAME,
DEFAULT_SECRET_KEY, DJANGO_SETTINGS_LIST, SECRET_KEY_FILENAME, SYSTEM_DIR
)
from .utils import (
get_environment_variables, read_configuration_file, yaml_loads
)
# 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.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.path.join(MEDIA_ROOT, CONFIGURATION_FILENAME)
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]})