Rename to Etalage. Merge RamPoi in Poi.
[infos-pratiques:etalage.git] / etalage / environment.py
1 # -*- coding: utf-8 -*-
2
3
4 # Etalage -- Open Data POIs portal
5 # By: Emmanuel Raviart <eraviart@easter-eggs.com>
6 #     Romain Soufflet <rsoufflet@easter-eggs.com>
7 #
8 # Copyright (C) 2011 Easter-eggs
9 # http://gitorious.org/infos-pratiques/etalage
10 #
11 # This file is part of Etalage.
12 #
13 # Etalage is free software; you can redistribute it and/or modify
14 # it under the terms of the GNU Affero General Public License as
15 # published by the Free Software Foundation, either version 3 of the
16 # License, or (at your option) any later version.
17 #
18 # Etalage is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 # GNU Affero General Public License for more details.
22 #
23 # You should have received a copy of the GNU Affero General Public License
24 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
25
26
27 """Environment configuration"""
28
29
30 import logging
31 import os
32 import sys
33
34 import mako.lookup
35 import pymongo
36 from suq import monpyjama
37 from etalage import ramdb
38
39 import etalage
40 from . import conv, model, templates
41
42
43 app_dir = os.path.dirname(os.path.abspath(__file__))
44
45
46 def load_environment(global_conf, app_conf):
47     """Configure the application environment."""
48     conf = etalage.conf # Empty dictionary
49     conf.update({
50         'app_conf': app_conf,
51         'app_dir': app_dir,
52         'cache_dir': os.path.join(os.path.dirname(app_dir), 'cache'),
53         'categories_collection': 'categories',
54         'database': 'souk',
55         'debug': False,
56         'global_conf': global_conf,
57         'i18n_dir': os.path.join(app_dir, 'i18n'),
58         'log_level': 'WARNING',
59         'organism_types_collection': 'organism_types',
60         'package_name': 'etalage',
61         'static_files': True, # Whether this application serves its own static files
62         'static_files_dir': os.path.join(app_dir, 'static'),
63         'territories_collection': 'territories',
64         })
65     conf.update(global_conf)
66     conf.update(app_conf)
67     conf['debug'] = conv.check(conv.pipe(conv.guess_bool, conv.default(False)))(conf['debug'])
68     conf['log_level'] = getattr(logging, conf['log_level'].upper())
69     conf['static_files'] = conv.check(conv.pipe(conv.guess_bool, conv.default(False)))(conf['static_files'])
70
71     # Configure logging.
72     logging.basicConfig(level = conf['log_level'], stream = sys.stdout)
73
74     errorware = conf.setdefault('errorware', {})
75     errorware['debug'] = conf['debug']
76     if not errorware['debug']:
77         errorware['error_email'] = conf['email_to']
78         errorware['error_log'] = conf.get('error_log', None)
79         errorware['error_message'] = conf.get('error_message', 'An internal server error occurred')
80         errorware['error_subject_prefix'] = conf.get('error_subject_prefix', 'Etalage Error: ')
81         errorware['from_address'] = conf['from_address']
82         errorware['smtp_server'] = conf.get('smtp_server', 'localhost')
83
84     # Connect to MongoDB database.
85     monpyjama.Wrapper.db = model.db = pymongo.Connection()[conf['database']]
86     # Initialize ramdb database from MongoDB.
87     with ramdb.dogpile.acquire(ramdb.load):
88         pass
89
90     # Create the Mako TemplateLookup, with the default auto-escaping.
91     templates.lookup = mako.lookup.TemplateLookup(
92         default_filters = ['h'],
93         directories = [os.path.join(app_dir, 'templates')],
94 #        error_handler = handle_mako_error,
95         input_encoding = 'utf-8', 
96         module_directory = os.path.join(conf['cache_dir'], 'templates'),
97 #        strict_undefined = True,
98         )
99