~ubuntu-branches/ubuntu/trusty/spyder/trusty-backports

« back to all changes in this revision

Viewing changes to spyderlib/userconfig.py

  • Committer: Bazaar Package Importer
  • Author(s): Picca Frédéric-Emmanuel
  • Date: 2011-03-05 18:03:43 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110305180343-its88tucbyvtevjf
Tags: 2.0.8-1
* Imported Upstream version 2.0.8 (Closes: #609789)
* add a watch file
* build for all python2 versions (it can be use as module by other packages)
* change the documentation section to Programming/Python
* use the Recommendes found in the documentation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
OTHER DEALINGS IN THE SOFTWARE.
34
34
"""
35
35
 
36
 
__version__ = '1.0.11'
 
36
__version__ = '1.0.12'
37
37
__license__ = __doc__
38
38
 
39
 
import os, re
40
 
import os.path as osp
 
39
import os, re, os.path as osp, shutil
41
40
from ConfigParser import ConfigParser, MissingSectionHeaderError
42
41
 
43
42
 
77
76
    default_section_name = 'main'
78
77
    
79
78
    def __init__(self, name, defaults=None, load=True, version=None,
80
 
                 subfolder=None):
 
79
                 subfolder=None, backup=False, raw_mode=False):
81
80
        ConfigParser.__init__(self)
 
81
        self.raw = 1 if raw_mode else 0
82
82
        self.subfolder = subfolder
83
83
        if (version is not None) and (re.match('^(\d+).(\d+).(\d+)$', version) is None):
84
84
            raise RuntimeError("Version number %r is incorrect - must be in X.Y.Z format" % version)
88
88
        self.defaults = defaults
89
89
        if defaults is not None:
90
90
            self.reset_to_defaults(save=False)
 
91
        fname = self.filename()
 
92
        if backup:
 
93
            try:
 
94
                shutil.copyfile(fname, "%s.bak" % fname)
 
95
            except IOError:
 
96
                pass
91
97
        if load:
92
98
            # If config file already exists, it overrides Default options:
93
99
            self.load_from_ini()
94
 
            if version != self.get_version(version):
 
100
            old_ver = self.get_version(version)
 
101
            if version != old_ver:
 
102
                if backup:
 
103
                    try:
 
104
                        shutil.copyfile(fname, "%s-%s.bak" % (fname, old_ver))
 
105
                    except IOError:
 
106
                        pass
95
107
                # Version has changed -> overwriting .ini file
96
108
                self.reset_to_defaults(save=False)
97
109
                self.__remove_deprecated_options()
125
137
        Remove options which are present in the .ini file but not in defaults
126
138
        """
127
139
        for section in self.sections():
128
 
            for option, _ in self.items(section):
 
140
            for option, _ in self.items(section, raw=self.raw):
129
141
                if self.get_default(section, option) is NoDefault:
130
142
                    self.remove_option(section, option)
131
 
                    if len(self.items(section)) == 0:
 
143
                    if len(self.items(section, raw=self.raw)) == 0:
132
144
                        self.remove_section(section)
133
145
        
134
146
    def __save(self):
166
178
        self.defaults = []
167
179
        for section in self.sections():
168
180
            secdict = {}
169
 
            for option, value in self.items(section):
 
181
            for option, value in self.items(section, raw=self.raw):
170
182
                secdict[option] = value
171
183
            self.defaults.append( (section, secdict) )
172
184
 
228
240
                self.set(section, option, default)
229
241
                return default
230
242
            
231
 
        value = ConfigParser.get(self, section, option)
 
243
        value = ConfigParser.get(self, section, option, self.raw)
232
244
        default_value = self.get_default(section, option)
233
245
        if isinstance(default_value, bool):
234
246
            value = eval(value)
292
304
        self.__set(section, option, value, verbose)
293
305
        if save:
294
306
            self.__save()
 
307
            
 
308
    def remove_section(self, section):
 
309
        ConfigParser.remove_section(self, section)
 
310
        self.__save()
 
311
            
 
312
    def remove_option(self, section, option):
 
313
        ConfigParser.remove_option(self, section, option)
 
314
        self.__save()