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>
344 lines
9.5 KiB
Python
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]})
|