Statistics
| Branch: | Tag: | Revision:

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)