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 |