Statistics
| Branch: | Tag: | Revision:

root / snf-common / synnefo / settings / __init__.py @ c323f81a

History | View | Annotate | Download (4.4 kB)

1 c2c4af89 Georgios D. Tsoukalas
# Copyright 2011-2013 GRNET S.A. All rights reserved.
2 efcd7a43 Kostas Papadimitriou
#
3 efcd7a43 Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 efcd7a43 Kostas Papadimitriou
# without modification, are permitted provided that the following
5 efcd7a43 Kostas Papadimitriou
# conditions are met:
6 efcd7a43 Kostas Papadimitriou
#
7 efcd7a43 Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 efcd7a43 Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 efcd7a43 Kostas Papadimitriou
#      disclaimer.
10 efcd7a43 Kostas Papadimitriou
#
11 efcd7a43 Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 efcd7a43 Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 efcd7a43 Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 efcd7a43 Kostas Papadimitriou
#      provided with the distribution.
15 efcd7a43 Kostas Papadimitriou
#
16 efcd7a43 Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 efcd7a43 Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 efcd7a43 Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 efcd7a43 Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 efcd7a43 Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 efcd7a43 Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 efcd7a43 Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 efcd7a43 Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 efcd7a43 Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 efcd7a43 Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 efcd7a43 Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 efcd7a43 Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 efcd7a43 Kostas Papadimitriou
#
29 efcd7a43 Kostas Papadimitriou
# The views and conclusions contained in the software and
30 efcd7a43 Kostas Papadimitriou
# documentation are those of the authors and should not be
31 efcd7a43 Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 efcd7a43 Kostas Papadimitriou
# or implied, of GRNET S.A.
33 efcd7a43 Kostas Papadimitriou
34 d2ff89df Kostas Papadimitriou
import os
35 32401481 Georgios D. Tsoukalas
from sys import modules, stderr
36 32401481 Georgios D. Tsoukalas
_module = modules[__name__]
37 45832bda Kostas Papadimitriou
38 6740cd3a Kostas Papadimitriou
# set synnefo package __file__ to fix django related bug
39 3015903d Kostas Papadimitriou
import synnefo
40 6740cd3a Kostas Papadimitriou
synnefo.__file__ = os.path.join(synnefo.__path__[0], '__init__.py')
41 6740cd3a Kostas Papadimitriou
42 32401481 Georgios D. Tsoukalas
from .setup import Setting
43 32401481 Georgios D. Tsoukalas
synnefo_settings = {}
44 32401481 Georgios D. Tsoukalas
# insert global default synnefo settings
45 32401481 Georgios D. Tsoukalas
from .default import *
46 32401481 Georgios D. Tsoukalas
for name in dir(_module):
47 32401481 Georgios D. Tsoukalas
    if not Setting.is_valid_setting_name(name):
48 32401481 Georgios D. Tsoukalas
        continue
49 32401481 Georgios D. Tsoukalas
    synnefo_settings[name] = getattr(_module, name)
50 7fb619a0 Kostas Papadimitriou
51 7fb619a0 Kostas Papadimitriou
# autodetect default settings provided by synnefo applications
52 32401481 Georgios D. Tsoukalas
from synnefo.util.entry_points import get_entry_points
53 32401481 Georgios D. Tsoukalas
for e in get_entry_points('synnefo', 'default_settings'):
54 32401481 Georgios D. Tsoukalas
    m = e.load()
55 32401481 Georgios D. Tsoukalas
    for name in dir(m):
56 32401481 Georgios D. Tsoukalas
        if name.startswith('__'):
57 32401481 Georgios D. Tsoukalas
            continue
58 32401481 Georgios D. Tsoukalas
        synnefo_settings[name] = getattr(m, name)
59 c2c4af89 Georgios D. Tsoukalas
60 32401481 Georgios D. Tsoukalas
# set strict to True to require annotation of all settings
61 32401481 Georgios D. Tsoukalas
Setting.initialize_settings(synnefo_settings, strict=False)
62 32401481 Georgios D. Tsoukalas
_module.__dict__.update(Setting.Catalogs['defaults'])
63 c2c4af89 Georgios D. Tsoukalas
64 7fb619a0 Kostas Papadimitriou
# extend default settings with settings provided within *.conf user files
65 7fb619a0 Kostas Papadimitriou
# located in directory specified in the SYNNEFO_SETTINGS_DIR
66 c24ca4e8 Vangelis Koukis
# environment variable
67 32401481 Georgios D. Tsoukalas
import re
68 32401481 Georgios D. Tsoukalas
system_conf_re = re.compile('^([0-9]\+-)?system.conf$')
69 32401481 Georgios D. Tsoukalas
70 7fb619a0 Kostas Papadimitriou
SYNNEFO_SETTINGS_DIR = os.environ.get('SYNNEFO_SETTINGS_DIR', "/etc/synnefo/")
71 34d1013b Vangelis Koukis
if os.path.exists(SYNNEFO_SETTINGS_DIR):
72 c24ca4e8 Vangelis Koukis
    try:
73 c24ca4e8 Vangelis Koukis
        entries = [os.path.join(SYNNEFO_SETTINGS_DIR, x) for x in
74 c24ca4e8 Vangelis Koukis
                   os.listdir(SYNNEFO_SETTINGS_DIR)]
75 c24ca4e8 Vangelis Koukis
        conffiles = [f for f in entries if os.path.isfile(f) and
76 c24ca4e8 Vangelis Koukis
                     f.endswith(".conf")]
77 c24ca4e8 Vangelis Koukis
    except Exception as e:
78 32401481 Georgios D. Tsoukalas
        print >> stderr, "Failed to list *.conf files under %s" % \
79 cfd39ba2 Georgios D. Tsoukalas
            SYNNEFO_SETTINGS_DIR
80 c24ca4e8 Vangelis Koukis
        raise SystemExit(1)
81 d2ff89df Kostas Papadimitriou
    conffiles.sort()
82 d2ff89df Kostas Papadimitriou
    for f in conffiles:
83 32401481 Georgios D. Tsoukalas
        if system_conf_re.match(f):
84 32401481 Georgios D. Tsoukalas
            allow_known = False
85 32401481 Georgios D. Tsoukalas
            allow_unknown = True
86 32401481 Georgios D. Tsoukalas
        else:
87 32401481 Georgios D. Tsoukalas
            allow_known = True
88 32401481 Georgios D. Tsoukalas
            allow_unknown = False
89 32401481 Georgios D. Tsoukalas
90 32401481 Georgios D. Tsoukalas
        # FIXME: Hack until all settings have been annotated properly
91 32401481 Georgios D. Tsoukalas
        allow_unknown = True
92 32401481 Georgios D. Tsoukalas
        allow_override = True
93 32401481 Georgios D. Tsoukalas
94 34d1013b Vangelis Koukis
        try:
95 32401481 Georgios D. Tsoukalas
            path = os.path.abspath(f)
96 32401481 Georgios D. Tsoukalas
            old_settings = Setting.Catalogs['defaults']
97 32401481 Georgios D. Tsoukalas
            new_settings = Setting.load_settings_from_file(path, old_settings)
98 32401481 Georgios D. Tsoukalas
99 32401481 Georgios D. Tsoukalas
            Setting.load_configuration(new_settings,
100 32401481 Georgios D. Tsoukalas
                                       source=path,
101 32401481 Georgios D. Tsoukalas
                                       allow_known=allow_known,
102 32401481 Georgios D. Tsoukalas
                                       allow_unknown=allow_unknown,
103 32401481 Georgios D. Tsoukalas
                                       allow_override=allow_override)
104 34d1013b Vangelis Koukis
        except Exception as e:
105 32401481 Georgios D. Tsoukalas
            print >> stderr, "Failed to read settings file: %s [%r]" % \
106 32401481 Georgios D. Tsoukalas
                (path, e)
107 32401481 Georgios D. Tsoukalas
            raise
108 c24ca4e8 Vangelis Koukis
            raise SystemExit(1)
109 c2c4af89 Georgios D. Tsoukalas
110 32401481 Georgios D. Tsoukalas
Setting.configure_settings()
111 32401481 Georgios D. Tsoukalas
_module.__dict__.update(Setting.Catalogs['runtime'])
112 c2c4af89 Georgios D. Tsoukalas
113 32401481 Georgios D. Tsoukalas
# cleanup module namespace
114 32401481 Georgios D. Tsoukalas
for _name in dir(_module):
115 32401481 Georgios D. Tsoukalas
    if _name.startswith('_') or _name.isupper():
116 32401481 Georgios D. Tsoukalas
        continue
117 32401481 Georgios D. Tsoukalas
    delattr(_module, _name)
118 32401481 Georgios D. Tsoukalas
del _name
119 32401481 Georgios D. Tsoukalas
del _module