root / kamaki / config.py @ 6c62a96d
History | View | Annotate | Download (3.9 kB)
1 | 43ca98ee | Giorgos Verigakis | # Copyright 2011-2012 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | eb3ca8ca | Giorgos Verigakis | #
|
3 | eb3ca8ca | Giorgos Verigakis | # Redistribution and use in source and binary forms, with or
|
4 | eb3ca8ca | Giorgos Verigakis | # without modification, are permitted provided that the following
|
5 | eb3ca8ca | Giorgos Verigakis | # conditions are met:
|
6 | eb3ca8ca | Giorgos Verigakis | #
|
7 | eb3ca8ca | Giorgos Verigakis | # 1. Redistributions of source code must retain the above
|
8 | eb3ca8ca | Giorgos Verigakis | # copyright notice, this list of conditions and the following
|
9 | eb3ca8ca | Giorgos Verigakis | # disclaimer.
|
10 | eb3ca8ca | Giorgos Verigakis | #
|
11 | eb3ca8ca | Giorgos Verigakis | # 2. Redistributions in binary form must reproduce the above
|
12 | eb3ca8ca | Giorgos Verigakis | # copyright notice, this list of conditions and the following
|
13 | eb3ca8ca | Giorgos Verigakis | # disclaimer in the documentation and/or other materials
|
14 | eb3ca8ca | Giorgos Verigakis | # provided with the distribution.
|
15 | eb3ca8ca | Giorgos Verigakis | #
|
16 | eb3ca8ca | Giorgos Verigakis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | eb3ca8ca | Giorgos Verigakis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | eb3ca8ca | Giorgos Verigakis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | eb3ca8ca | Giorgos Verigakis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | eb3ca8ca | Giorgos Verigakis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | eb3ca8ca | Giorgos Verigakis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | eb3ca8ca | Giorgos Verigakis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | eb3ca8ca | Giorgos Verigakis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | eb3ca8ca | Giorgos Verigakis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | eb3ca8ca | Giorgos Verigakis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | eb3ca8ca | Giorgos Verigakis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | eb3ca8ca | Giorgos Verigakis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | eb3ca8ca | Giorgos Verigakis | #
|
29 | eb3ca8ca | Giorgos Verigakis | # The views and conclusions contained in the software and
|
30 | eb3ca8ca | Giorgos Verigakis | # documentation are those of the authors and should not be
|
31 | eb3ca8ca | Giorgos Verigakis | # interpreted as representing official policies, either expressed
|
32 | eb3ca8ca | Giorgos Verigakis | # or implied, of GRNET S.A.
|
33 | eb3ca8ca | Giorgos Verigakis | |
34 | b80abb0c | Giorgos Verigakis | import os |
35 | b80abb0c | Giorgos Verigakis | |
36 | f3ddb705 | Giorgos Verigakis | from collections import defaultdict |
37 | f3ddb705 | Giorgos Verigakis | from ConfigParser import RawConfigParser, NoOptionError, NoSectionError |
38 | eb3ca8ca | Giorgos Verigakis | |
39 | f3ddb705 | Giorgos Verigakis | from .utils import OrderedDict |
40 | a1c50326 | Giorgos Verigakis | |
41 | a1c50326 | Giorgos Verigakis | |
42 | f3ddb705 | Giorgos Verigakis | HEADER = """
|
43 | f3ddb705 | Giorgos Verigakis | # Kamaki configuration file
|
44 | f3ddb705 | Giorgos Verigakis | """
|
45 | a1c50326 | Giorgos Verigakis | |
46 | f3ddb705 | Giorgos Verigakis | DEFAULTS = { |
47 | f3ddb705 | Giorgos Verigakis | 'global': {
|
48 | f3ddb705 | Giorgos Verigakis | 'colors': 'on', |
49 | f3ddb705 | Giorgos Verigakis | 'token': '' |
50 | f3ddb705 | Giorgos Verigakis | }, |
51 | f3ddb705 | Giorgos Verigakis | 'compute': {
|
52 | f3ddb705 | Giorgos Verigakis | 'enable': 'on', |
53 | f3ddb705 | Giorgos Verigakis | 'cyclades_extensions': 'on', |
54 | 43ca98ee | Giorgos Verigakis | 'url': 'https://cyclades.okeanos.grnet.gr/api/v1.1', |
55 | f3ddb705 | Giorgos Verigakis | 'token': '' |
56 | f3ddb705 | Giorgos Verigakis | }, |
57 | f3ddb705 | Giorgos Verigakis | 'image': {
|
58 | f3ddb705 | Giorgos Verigakis | 'enable': 'on', |
59 | 43ca98ee | Giorgos Verigakis | 'url': 'https://plankton.okeanos.grnet.gr/plankton', |
60 | f3ddb705 | Giorgos Verigakis | 'token': '' |
61 | f3ddb705 | Giorgos Verigakis | }, |
62 | f3ddb705 | Giorgos Verigakis | 'storage': {
|
63 | f3ddb705 | Giorgos Verigakis | 'enable': 'on', |
64 | f3ddb705 | Giorgos Verigakis | 'pithos_extensions': 'on', |
65 | 43ca98ee | Giorgos Verigakis | 'url': 'https://pithos.okeanos.grnet.gr/v1', |
66 | f3ddb705 | Giorgos Verigakis | 'account': '', |
67 | f3ddb705 | Giorgos Verigakis | 'container': '', |
68 | f3ddb705 | Giorgos Verigakis | 'token': '' |
69 | 43ca98ee | Giorgos Verigakis | }, |
70 | 43ca98ee | Giorgos Verigakis | 'astakos': {
|
71 | 43ca98ee | Giorgos Verigakis | 'enable': 'on', |
72 | 43ca98ee | Giorgos Verigakis | 'url': 'https://astakos.okeanos.grnet.gr', |
73 | 43ca98ee | Giorgos Verigakis | 'token': '' |
74 | f3ddb705 | Giorgos Verigakis | } |
75 | a1c50326 | Giorgos Verigakis | } |
76 | a1c50326 | Giorgos Verigakis | |
77 | eb3ca8ca | Giorgos Verigakis | |
78 | f3ddb705 | Giorgos Verigakis | class Config(RawConfigParser): |
79 | f3ddb705 | Giorgos Verigakis | def __init__(self, path=None): |
80 | f3ddb705 | Giorgos Verigakis | RawConfigParser.__init__(self, dict_type=OrderedDict)
|
81 | f3ddb705 | Giorgos Verigakis | self.path = path
|
82 | f3ddb705 | Giorgos Verigakis | self._overrides = defaultdict(dict) |
83 | f3ddb705 | Giorgos Verigakis | self.read(path)
|
84 | eb3ca8ca | Giorgos Verigakis | |
85 | f3ddb705 | Giorgos Verigakis | def sections(self): |
86 | f3ddb705 | Giorgos Verigakis | return DEFAULTS.keys()
|
87 | f3ddb705 | Giorgos Verigakis | |
88 | f3ddb705 | Giorgos Verigakis | def get(self, section, option): |
89 | f3ddb705 | Giorgos Verigakis | value = self._overrides.get(section, {}).get(option)
|
90 | f3ddb705 | Giorgos Verigakis | if value is not None: |
91 | f3ddb705 | Giorgos Verigakis | return value
|
92 | eb3ca8ca | Giorgos Verigakis | |
93 | eb3ca8ca | Giorgos Verigakis | try:
|
94 | f3ddb705 | Giorgos Verigakis | return RawConfigParser.get(self, section, option) |
95 | 986b53f8 | Giorgos Verigakis | except (NoSectionError, NoOptionError):
|
96 | f3ddb705 | Giorgos Verigakis | return DEFAULTS.get(section, {}).get(option)
|
97 | eb3ca8ca | Giorgos Verigakis | |
98 | f3ddb705 | Giorgos Verigakis | def set(self, section, option, value): |
99 | f3ddb705 | Giorgos Verigakis | if section not in RawConfigParser.sections(self): |
100 | f3ddb705 | Giorgos Verigakis | self.add_section(section)
|
101 | f3ddb705 | Giorgos Verigakis | RawConfigParser.set(self, section, option, value)
|
102 | eb3ca8ca | Giorgos Verigakis | |
103 | f3ddb705 | Giorgos Verigakis | def remove_option(self, section, option): |
104 | f3ddb705 | Giorgos Verigakis | try:
|
105 | f3ddb705 | Giorgos Verigakis | RawConfigParser.remove_option(self, section, option)
|
106 | f3ddb705 | Giorgos Verigakis | except NoSectionError:
|
107 | f3ddb705 | Giorgos Verigakis | pass
|
108 | eb3ca8ca | Giorgos Verigakis | |
109 | f3ddb705 | Giorgos Verigakis | def items(self, section, include_defaults=False): |
110 | f3ddb705 | Giorgos Verigakis | d = dict(DEFAULTS[section]) if include_defaults else {} |
111 | f3ddb705 | Giorgos Verigakis | try:
|
112 | f3ddb705 | Giorgos Verigakis | d.update(RawConfigParser.items(self, section))
|
113 | f3ddb705 | Giorgos Verigakis | except NoSectionError:
|
114 | f3ddb705 | Giorgos Verigakis | pass
|
115 | f3ddb705 | Giorgos Verigakis | return d.items()
|
116 | eb3ca8ca | Giorgos Verigakis | |
117 | f3ddb705 | Giorgos Verigakis | def override(self, section, option, value): |
118 | f3ddb705 | Giorgos Verigakis | self._overrides[section][option] = value
|
119 | eb3ca8ca | Giorgos Verigakis | |
120 | f3ddb705 | Giorgos Verigakis | def write(self): |
121 | f3ddb705 | Giorgos Verigakis | with open(self.path, 'w') as f: |
122 | b80abb0c | Giorgos Verigakis | os.chmod(self.path, 0600) |
123 | f3ddb705 | Giorgos Verigakis | f.write(HEADER.lstrip()) |
124 | f3ddb705 | Giorgos Verigakis | RawConfigParser.write(self, f) |