summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérôme Schneider <jschneider@entrouvert.com>2014-07-23 13:46:45 (GMT)
committerJérôme Schneider <jschneider@entrouvert.com>2014-07-23 13:48:27 (GMT)
commitd22d3fe258bf31ecd88a9b1a29c518779c31ff7d (patch)
tree566f3123938e09d40b2eb98bce594779041debc7
parent1d6e56b947051793e2d1cd81e7878134d5a6a23a (diff)
downloadmandaye-meyzieu-d22d3fe258bf31ecd88a9b1a29c518779c31ff7d.zip
mandaye-meyzieu-d22d3fe258bf31ecd88a9b1a29c518779c31ff7d.tar.gz
mandaye-meyzieu-d22d3fe258bf31ecd88a9b1a29c518779c31ff7d.tar.bz2
config: migrate on ini files
-rw-r--r--MANIFEST.in1
-rw-r--r--rp_meyzieu/config.py162
-rw-r--r--rp_meyzieu/default-config.ini49
3 files changed, 148 insertions, 64 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
index 0138c5d..f8a5d36 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,4 @@
include COPYING MANIFEST.in VERSION
+include rp_meyzieu/default-config.ini
recursive-include rp_meyzieu/templates *.html
recursive-include rp_meyzieu/static *
diff --git a/rp_meyzieu/config.py b/rp_meyzieu/config.py
index 520723a..d90512f 100644
--- a/rp_meyzieu/config.py
+++ b/rp_meyzieu/config.py
@@ -1,16 +1,34 @@
import logging
import os
-_PROJECT_PATH = os.path.join(os.path.dirname(__file__), '..')
+from ConfigParser import SafeConfigParser
+from mandaye.exceptions import ImproperlyConfigured
+
+# get configuration files from :
+# 1. default-settings.ini from source code
+# 2. os.environ.get('SETTINGS_INI') if it exists
+# else /etc/mandaye-meyzieu/config.ini
+# and then /etc/mandaye-meyzieu/local-config.ini
+BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+SETTINGS_INI = (os.path.join(BASE_DIR, 'default-config.ini'),)
+if os.environ.get('SETTINGS_INI'):
+ SETTINGS_INI += (os.environ.get('SETTINGS_INI'),)
+else:
+ ETC_DIR = os.path.join('/', 'etc', 'mandaye-meyzieu')
+ SETTINGS_INI += (
+ os.path.join(ETC_DIR, 'config.ini'),
+ os.path.join(ETC_DIR, 'local-config.ini')
+ )
+
+config = SafeConfigParser()
+config.read(SETTINGS_INI)
## SQL Backend config
# Database configuration
-# http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html
-# rfc 1738 https://tools.ietf.org/html/rfc1738
# dialect+driver://username:password@host:port/database
-db_url = 'sqlite:///' + os.path.join(_PROJECT_PATH, 'rp_meyzieu.db')
+db_url = config.get('database', 'url')
-debug = False
+debug = config.getboolean('debug', 'debug')
# Log configuration
LOGGING = {
@@ -24,6 +42,7 @@ LOGGING = {
},
'syslog': {
'format': 'mandaye-meyzieu(pid=%(process)d) %(name)s %(levelname)s %(uuid)s %(message)s',
+ 'datefmt': '%Y-%m-%d %H:%M:%S'
}
},
'handlers': {
@@ -33,96 +52,111 @@ LOGGING = {
'formatter': 'console'
},
'syslog': {
- 'level': 'INFO',
+ 'level': 'DEBUG',
'class': 'entrouvert.logging.handlers.SysLogHandler',
'formatter': 'syslog',
'address': '/dev/log'
},
},
- 'loggers': {
- '': {
- 'handlers': ['console'],
- 'level': 'DEBUG',
- 'propagate': False,
- },
- 'mandaye': {
- 'handlers': ['console', 'syslog'],
- 'level': 'DEBUG',
- 'propagate': False,
- },
- 'rp_meyzieu': {
- 'handlers': ['console', 'syslog'],
- 'level': 'DEBUG',
- 'propagate': False,
- },
+ 'loggers': {
+ '': {
+ 'handlers': ['console'],
+ 'level': 'INFO',
+ 'propagate': False,
+ },
+ 'mandaye': {
+ 'handlers': ['console', 'syslog'],
+ 'level': 'INFO',
+ 'propagate': False,
+ },
+ 'rp_meyzieu': {
+ 'handlers': ['console', 'syslog'],
+ 'level': 'INFO',
+ 'propagate': False,
},
- }
+ },
+ }
+if config.getboolean('debug', 'log_debug'):
+ LOGGING['loggers']['']['level'] = 'DEBUG'
+ LOGGING['loggers']['mandaye']['level'] = 'DEBUG'
+ LOGGING['loggers']['rp_meyzieu']['level'] = 'DEBUG'
## PATH
-# Template directory
-template_directory = os.path.join(_PROJECT_PATH, 'rp_meyzieu/templates')
# Configuration directory
-config_root = os.path.join(_PROJECT_PATH, 'conf.d')
+config_root = config.get('dirs', 'config_root')
+# Template directory
+template_directory = os.path.join(BASE_DIR, 'templates')
# Static url
-static_url = '/mandaye/static'
+static_url = config.get('dirs', 'static_url')
# Static folder
-static_root = os.path.join(_PROJECT_PATH, 'rp_meyzieu/static')
+static_root = config.get('dirs', 'static_root')
# Data dir
-data_dir = os.path.join(_PROJECT_PATH, 'data')
+data_dir = config.get('dirs', 'data_dir')
+
+# Supported authentification
+authentifications = {
+ 'saml2': 'mandaye.auth.saml2.SAML2Auth'
+ }
+
+# sp mappers
+mappers = {
+ 'portail_famille_ecities': 'rp_meyzieu.mappers.portail_famille_ecities',
+ }
# Raven Sentry configuration
-raven_dsn = None
+raven_dsn = config.get('debug', 'sentry_dsn')
# Email notification configuration
-email_notification = False
-email_prefix = '[Mandaye rp_meyzieu]'
-smtp_host = 'localhost'
-smtp_port = 25
-email_from = 'traceback@entrouvert.com'
-email_to = ['admin@localhost']
+email_notification = config.getboolean('email', 'notification')
+email_prefix = config.get('email', 'prefix')
+smtp_host = config.get('email', 'smtp_host')
+smtp_port = config.getint('email', 'smtp_port')
+email_from = config.get('email', 'from')
+email_to = config.get('email', 'to').split()
# Use long traceback with xtraceback
-use_long_trace = False
-
+use_long_trace = config.getboolean('debug', 'use_long_trace')
# Ask Mandaye to auto decompress a response message
# Decompress response only if you load a filter
-auto_decompress = True
+auto_decompress = config.getboolean('mandaye', 'auto_decompress')
+# Ask mandaye to add a toolbar with Mandaye's links
+mandaye_toolbar = config.getboolean('mandaye', 'toolbar')
+# Authentic 2 auto connection
+a2_auto_connection = config.getboolean('mandaye', 'a2_auto_connection')
+
+# Choose storage
+# Only mandaye.backends.sql at the moment
+if config.get('mandaye', 'storage_backend') == 'sql':
+ storage_backend = "mandaye.backends.sql"
+else:
+ ImproperlyConfigured('Storage backend must be sql')
+
# Encrypt service provider passwords with a secret
# You should install pycypto to use this feature
-encrypt_sp_password = False
-# Must be a 16, 24, or 32 bytes long
-encrypt_secret = ''
-mandaye_toolbar = False
-a2_auto_connection = False
+encrypt_sp_password = config.getboolean('mandaye', 'encrypt_sp_password')
+# Must be a 15, 24, or 32 bytes long
+encrypt_secret = config.get('mandaye', 'encrypt_secret')
-# Supported authentification
-authentifications = {
- 'saml2': 'mandaye.auth.saml2.SAML2Auth'
-}
-
-# sp mappers
-mappers = {
- 'linuxfr': 'rp_meyzieu.mappers.linuxfr_example',
- 'portail_famille_ecities': 'rp_meyzieu.mappers.portail_famille_ecities',
-}
+session_type = config.get('session', 'type')
+if session_type not in ('file', 'dbm', 'memory', 'memcached'):
+ raise ImproperlyConfigured('Sesssion type %r not supported' % session_type)
+if session_type == 'memcached':
+ session_type = 'ext:memcached'
# Beaker session configuration
session_opts = {
- 'session.type': 'file',
- 'session.cookie_expires': True,
- 'session.timeout': 3600,
- 'session.data_dir': '/var/tmp/beaker'
+ 'session.type': session_type,
+ 'session.url': config.get('session', 'url'),
+ 'session.cookie_expires': config.getboolean('session', 'cookie_expires'),
+ 'session.timeout': config.getint('session', 'timeout'),
+ 'session.data_dir': config.get('session', 'data_dir')
}
-# Choose storage
-# Only mandaye.backends.sql at the moment
-storage_backend = "mandaye.backends.sql"
-
# Import local config
try:
from local_config import *
except ImportError, e:
- if 'local_config' in e.args[0]:
- pass
+ if not 'local_config' in e.args[0]:
+ raise ImproperlyConfigured('Error while importing "local_config.py"')
diff --git a/rp_meyzieu/default-config.ini b/rp_meyzieu/default-config.ini
new file mode 100644
index 0000000..2d27350
--- /dev/null
+++ b/rp_meyzieu/default-config.ini
@@ -0,0 +1,49 @@
+[DEFAULT]
+base_dir: .
+
+[database]
+; http://docs.sqlalchemy.org/en/rel_0_8/core/engines.html
+url: sqlite:///%(base_dir)s/mandaye_meyzieu.db
+
+[dirs]
+config_root: %(base_dir)s/conf.d
+data_dir: %(base_dir)s/data
+static_root: %(base_dir)s/mandaye_meyzieu/static
+static_url: /mandaye/static
+
+[debug]
+debug: false
+use_long_trace: true
+log_debug: false
+; you need to install python-raven for this feature
+sentry_dsn:
+
+[mandaye]
+toolbar: false
+a2_auto_connection: false
+; only sql at the moment
+storage_backend: sql
+auto_decompress: true
+; if you want to encypt password set to true
+; you need to install pycrypto for this feature
+encrypt_sp_password: false
+; if encrypt_sp_password then you need to choose a secret
+; must be a 16, 24, or 32 bytes long
+encrypt_secret:
+
+[session]
+; file, dbm, memory or memcached
+; if memcached you need to install python-memcached and memcached
+type: file
+url:
+cookie_expires: true
+timeout: 3600
+data_dir: %(base_dir)s/data
+
+[email]
+notification: false
+prefix: [Mandaye Meyzieu]
+smtp_host: localhost
+smtp_port: 25
+from: traceback@entrouvert.com
+to: admin+mandaye_meyzieu@entrouvert.com