stop using environment variables (#34305)

Except the CUSTOMIZATION variable.

Setting variables on a specific deployment is now possible in
/etc/docbow/settings.py and /etc/docbow/settings.d/*.py files.
These settings are the last being loaded and therefore take
precedence over docbow_projects.settings.

docbow_project/pw/setttings.py and docbow_project/pfwb/setttings.py are kept
as legacy documentation but are not loaded any more.
This commit is contained in:
Emmanuel Cazenave 2019-07-09 17:14:10 +02:00
parent 1fbb00c7af
commit 96b0f8a939
7 changed files with 118 additions and 134 deletions

22
debian/debian_config.py vendored Normal file
View File

@ -0,0 +1,22 @@
# This file is sourced by "execfile" from docbow_project.settings
import glob
import os
from django.core.exceptions import ImproperlyConfigured
PROJECT_NAME = 'docbow'
ETC_DIR = os.path.join('/etc', PROJECT_NAME)
ETC_SETTINGS_PY = os.path.join(ETC_DIR, 'settings.py')
if os.path.exists(ETC_SETTINGS_PY):
execfile(ETC_SETTINGS_PY)
for filename in sorted(glob.glob(os.path.join(ETC_DIR, 'settings.d', '*.py'))):
execfile(filename)
if not globals().get('MIGRATED_SETTINGS'):
raise ImproperlyConfigured()

10
debian/init vendored
View File

@ -21,6 +21,8 @@ PIDFILE=$PID_DIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CTL=/usr/bin/$NAME-ctl
DOCBOW_SETTINGS_FILE=/usr/lib/$NAME/debian_config.py
USER=docbow
GROUP=docbow
@ -40,10 +42,6 @@ export LANG=fr_FR.UTF-8 LC_ALL=fr_FR.UTF-8
# Exit if the package is not installed
[ -x $DAEMON ] || exit 0
# Load config
. /etc/$NAME/db
. /etc/$NAME/secret
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
@ -59,6 +57,10 @@ if [ ! -d $PID_DIR ]; then
install -d -m 755 -o $USER -g $GROUP $PID_DIR
fi
# environment for wsgi and ctl
export DOCBOW_SETTINGS_FILE
#
# Function that starts the daemon/service
#

1
debian/install vendored
View File

@ -1,3 +1,4 @@
debian/conf/docbow.nginx /etc/nginx/sites-available/
debian/conf/db.template /usr/share/docbow
debian/conf/magic /usr/share/docbow
debian/debian_config.py /usr/lib/docbow

View File

@ -6,10 +6,6 @@ import os
if __name__ == "__main__":
from django.core.management import execute_from_command_line
customization = os.environ.get('CUSTOMIZATION', 'pfwb')
if customization:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "docbow_project.%s.settings" % customization)
else:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "docbow_project.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "docbow_project.settings")
execute_from_command_line(sys.argv)

View File

@ -1,117 +1,92 @@
# -*- coding: utf-8 -*-
import os
import django.conf.global_settings
from django.core.exceptions import ImproperlyConfigured
gettext_noop = lambda s: s
BASE_DIR = os.path.join(os.path.dirname(__file__), '..')
PROJECT_NAME = 'docbow'
ETC_DIR = os.path.join('/etc', PROJECT_NAME)
# boolean settings
__ENVIRONMENT_DEFAULTS = dict(
# booleans
DEBUG=False,
DEBUG_PROPAGATE_EXCEPTIONS=False,
USE_DEBUG_TOOLBAR=False,
# paths
STATIC_ROOT='/var/lib/%s/collectstatic' % PROJECT_NAME,
STATIC_URL='/static/',
MEDIA_ROOT='/var/lib/%s/media' % PROJECT_NAME,
MEDIA_URL='/media/',
# i18n/l18n
TIME_ZONE = 'Europe/Paris',
LANGUAGE_CODE = 'fr',
SITE_ID = 1,
USE_I18N=True,
USE_L10N=True,
USE_TZ=True,
# core
ROOT_URLCONF='docbow_project.urls',
STATICFILES_DIRS=('/var/lib/%s/static/' % PROJECT_NAME,),
FILE_PER_PAGE=30,
DO_NOT_SEND_GROUPS=(
u'Administrateurs des groupes',
u'Administrateurs des types de document',
u'Administrateurs des utilisateurs',
u"Utilisateurs de l'application" ),
CONTACT_GROUPS=(u'Contact « Administrateur du système »',),
LOCALE_PATHS=(os.path.join(BASE_DIR, 'docbow_project', 'locale'),),
DEFAULT_FROM_EMAIL='admin@example.com',
CONTACT_SUBJECT_PREFIX='Contact depuis docbow: ',
ALLOWED_HOSTS=['*'],
LOGIN_REDIRECT_URL='/inbox',
MESSAGE_STORAGE='django.contrib.messages.storage.fallback.FallbackStorage',
AUTHENTICATION_BACKENDS=(
'docbow_project.docbow.auth_backend.DelegationAuthBackend',
'django.contrib.auth.backends.ModelBackend' ),
INTERNAL_IPS=('127.0.0.1','82.234.244.169'),
ADMINS=(),
SECRET_KEY=None,
SOUTH_TESTS_MIGRATE=True,
OVH_SMS_ACCOUNT='sms-db26857-1',
OVH_SMS_LOGIN='pfwb',
OVH_SMS_PASSWORD='',
OVH_SMS_FROM='Dauvergne',
DOCBOW_SMS_CARRIER_CLASS='docbow_project.docbow.sms_carrier_ovh.OVHSMSCarrier',
DOCBOW_ORGANIZATION_SHORT='PFWB',
DOCBOW_ORGANIZATION=u'Parlement de la Fédération Wallonie-Bruxelles',
DOCBOW_NOTIFIERS=(
'docbow_project.docbow.notification.MailNotifier',
'docbow_project.docbow.notification.SMSNotifier',
),
DOCBOW_PFWB_GED_DIRECTORY='/var/lib/docbow/ged/',
DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_ID=None,
DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_NAME=u'Divers',
DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_EMAIL='commande.documents@pfwb.be',
DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_USER_ID=None,
DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_EMAIL='dontknow@pfwb.be',
DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_USER_ID=None,
DATE_INPUT_FORMATS=('%d/%m/%Y', '%Y-%m-%d'),
CRISPY_TEMPLATE_PACK='uni_form',
DOCBOW_TIMESTAMP_PROVIDER='certum',
DOCBOW_MAX_FILE_SIZE=10*1024*1024,
CUSTOMIZATION='pfwb',
DOCBOW_PRIVATE_DOCUMENTS=False,
DOCBOW_BASE_URL='http://localhost:8000',
PLATFORM='prod',
DOCBOW_EDIT_EMAIL=False,
EMAIL_HOST='localhost',
SECURE_PROXY_SSL_HEADER = (),
SESSION_COOKIE_AGE=7200,
# booleans
DEBUG = False,
DEBUG_PROPAGATE_EXCEPTIONS = False
USE_DEBUG_TOOLBAR = False
# paths
STATIC_ROOT = '/var/lib/%s/collectstatic' % PROJECT_NAME
STATIC_URL = '/static/'
MEDIA_ROOT = '/var/lib/%s/media' % PROJECT_NAME
MEDIA_URL = '/media/'
# i18n/l18n
TIME_ZONE = 'Europe/Paris'
LANGUAGE_CODE = 'fr'
SITE_ID = 1
USE_I18N = True
USE_L10N = True
USE_TZ = True
# core
ROOT_URLCONF = 'docbow_project.urls'
STATICFILES_DIRS = ('/var/lib/%s/static/' % PROJECT_NAME,)
FILE_PER_PAGE = 30
DO_NOT_SEND_GROUPS = (
u'Administrateurs des groupes',
u'Administrateurs des types de document',
u'Administrateurs des utilisateurs',
u"Utilisateurs de l'application"
)
CONTACT_GROUPS = (u'Contact « Administrateur du système »',)
LOCALE_PATHS = (os.path.join(BASE_DIR, 'docbow_project', 'locale'),)
DEFAULT_FROM_EMAIL = 'admin@example.com'
CONTACT_SUBJECT_PREFIX = 'Contact depuis docbow: '
ALLOWED_HOSTS = ['*']
LOGIN_REDIRECT_URL = '/inbox'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
AUTHENTICATION_BACKENDS = (
'docbow_project.docbow.auth_backend.DelegationAuthBackend',
'django.contrib.auth.backends.ModelBackend'
)
INTERNAL_IPS = ('127.0.0.1', '82.234.244.169')
ADMINS = ()
SECRET_KEY = None
SOUTH_TESTS_MIGRATE = True
OVH_SMS_ACCOUNT = 'sms-db26857-1'
OVH_SMS_LOGIN = 'pfwb'
OVH_SMS_PASSWORD = ''
OVH_SMS_FROM = 'Dauvergne'
DOCBOW_SMS_CARRIER_CLASS = 'docbow_project.docbow.sms_carrier_ovh.OVHSMSCarrier'
DOCBOW_ORGANIZATION_SHORT = 'PFWB'
DOCBOW_ORGANIZATION = u'Parlement de la Fédération Wallonie-Bruxelles'
DOCBOW_NOTIFIERS = (
'docbow_project.docbow.notification.MailNotifier',
'docbow_project.docbow.notification.SMSNotifier',
)
DOCBOW_PFWB_GED_DIRECTORY = '/var/lib/docbow/ged/'
DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_ID = None
DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_NAME = u'Divers'
DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_EMAIL = 'commande.documents@pfwb.be'
DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_USER_ID = None
DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_EMAIL = 'dontknow@pfwb.be'
DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_USER_ID = None
DATE_INPUT_FORMATS = ('%d/%m/%Y', '%Y-%m-%d')
CRISPY_TEMPLATE_PACK = 'uni_form'
DOCBOW_TIMESTAMP_PROVIDER = 'certum'
DOCBOW_MAX_FILE_SIZE = 10*1024*1024
CUSTOMIZATION = os.environ.get('CUSTOMIZATION', 'pfwb')
DOCBOW_PRIVATE_DOCUMENTS = False
DOCBOW_BASE_URL = 'http://localhost:8000'
PLATFORM = 'prod'
DOCBOW_EDIT_EMAIL = False
EMAIL_HOST = 'localhost'
SECURE_PROXY_SSL_HEADER = ()
SESSION_COOKIE_AGE = 7200
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
for key, default in __ENVIRONMENT_DEFAULTS.iteritems():
try:
value = os.environ[key]
if default is True or default is False:
if value.isdigit():
value = bool(int(value))
else:
value = value.lower() in ('yes', 'true', 'y')
elif isinstance(default, (tuple, list)):
value = [ x.strip() for x in value.split(':')]
if len(default) or key in ('ADMINS',):
if key in ('ADMINS',) or isinstance(default[0], (tuple, list)):
value = [ x.split(';') for x in value ]
elif isinstance(default[0], unicode):
value = [ unicode(x, 'utf8') for x in value ]
elif isinstance(default, unicode):
value = unicode(value, 'utf8')
elif isinstance(default, int):
value = int(value)
except KeyError:
value = default
globals()[key] = value
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.sqlite3'),
'NAME': os.environ.get('DATABASE_NAME', os.path.join(BASE_DIR, PROJECT_NAME + '.db')),
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'docbow',
}
}
@ -133,7 +108,6 @@ else:
'django.template.loaders.app_directories.Loader',)),
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
@ -265,27 +239,9 @@ STATICFILES_DIRS += (os.path.join(BASE_DIR, 'docbow_project', CUSTOMIZATION, 'st
STATICFILES_DIRS += (os.path.join(BASE_DIR, 'docbow_project', 'docbow', 'static'),)
HELP_DIR = '/usr/share/doc/docbow/help'
if 'SENTRY_DSN' in os.environ:
try:
from raven.transport.requests import RequestsHTTPTransport
except ImportError:
raise ImproperlyConfigured('unable to load python-raven')
else:
SENTRY_DSN = os.environ['SENTRY_DSN']
SENTRY_TRANSPORT = RequestsHTTPTransport
LOGGING['handlers']['sentry'] = {
'level': 'ERROR',
'class': 'raven.handlers.logging.SentryHandler',
'dsn': SENTRY_DSN,
}
INSTALLED_APPS += ('raven.contrib.django.raven_compat',)
for logger in LOGGING['loggers'].values():
if 'syslog' in logger['handlers']:
logger['handlers'].append('sentry')
else:
for logger in LOGGING['loggers'].values():
if 'syslog' in logger['handlers']:
logger['handlers'].append('mail_admins')
for logger in LOGGING['loggers'].values():
if 'syslog' in logger['handlers']:
logger['handlers'].append('mail_admins')
if DEBUG and not globals()['SECRET_KEY']:
SECRET_KEY = 'coin'
@ -302,7 +258,7 @@ for admin in ADMINS:
assert len(admin) == 2, 'ADMINS setting must be a colon separated list of name and emails separated by a semi-colon: %s' % ADMINS
assert '@' in admin[1], 'ADMINS setting pairs second value must be emails: %s' % ADMINS
STATSD_CLIENT = os.environ.get('STATSD_CLIENT', 'django_statsd.clients.null')
STATSD_CLIENT = 'django_statsd.clients.null'
if STATSD_CLIENT != 'django_statsd.clients.null':
MIDDLEWARE_CLASSES = (
@ -311,10 +267,6 @@ if STATSD_CLIENT != 'django_statsd.clients.null':
) + MIDDLEWARE_CLASSES
INSTALLED_APPS += ( 'django_statsd',)
ETC_SETTINGS_PY = os.path.join(ETC_DIR, 'settings.py')
if os.path.exists(ETC_SETTINGS_PY):
execfile(ETC_SETTINGS_PY, globals())
local_settings_file = os.environ.get('DOCBOW_SETTINGS_FILE', 'local_settings.py')
if os.path.exists(local_settings_file):

View File

@ -15,7 +15,7 @@ framework.
"""
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "docbow_project.%s.settings" % os.environ['CUSTOMIZATION']
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "docbow_project.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

View File

@ -10,3 +10,14 @@ DATABASES = {
},
}
}
CUSTOMIZATION = os.environ['CUSTOMIZATION']
if CUSTOMIZATION == 'pfwb':
DOCBOW_EDIT_EMAIL = True
elif CUSTOMIZATION == 'pw':
DOCBOW_PERSONAL_EMAIL = False
DOCBOW_MOBILE_PHONE = False
DOCBOW_GROUP_LISTING = False
DOCBOW_DEFAULT_ACCEPT_NOTIFICATIONS_FOR_GUEST = False