Ticket #3037: fixed-config.diff
| File fixed-config.diff, 4.4 KB (added by athomas, 6 years ago) |
|---|
-
trac/config.py
65 65 """ 66 66 def __init__(self, filename): 67 67 self._sections = {} 68 self._defaults = {}69 68 self.filename = filename 70 69 self.parser = ConfigParser() 71 70 self._lastmtime = 0 … … 149 148 150 149 def sections(self): 151 150 """Return a list of section names.""" 152 return self.parser.sections() 151 sections = self.site_parser.sections() 152 site_sections = [s.lower() for s in sections] 153 sections.extend([s for s in self.parser.sections() 154 if s not in site_sections]) 155 return sections 153 156 154 157 def save(self): 155 158 """Write the configuration options to the primary file.""" … … 162 165 fileobj.close() 163 166 164 167 def parse_if_needed(self): 165 # Merge global configuration option into _defaults168 # Load global configuration 166 169 if os.path.isfile(self.site_filename): 167 170 modtime = os.path.getmtime(self.site_filename) 168 171 if modtime > self._lastsitemtime: 169 172 self.site_parser.read(self.site_filename) 170 for section in self.site_parser.sections():171 for option in self.site_parser.options(section):172 value = self.site_parser.get(section, option)173 self._defaults[(section, option)] = value174 173 self._lastsitemtime = modtime 175 174 176 175 if not self.filename or not os.path.isfile(self.filename): … … 193 192 self.name = name 194 193 195 194 def __contains__(self, name): 196 return self.config.parser.has_option(self.name, name) 195 return self.config.parser.has_option(self.name, name) or \ 196 self.config.site_parser.has_option(self.name, name) 197 197 198 198 199 def __iter__(self): 199 200 options = [] 200 201 if self.config.parser.has_section(self.name): 201 202 for option in self.config.parser.options(self.name): 202 options.append(option )203 options.append(option.lower()) 203 204 yield option 204 for section, option in self.config._defaults: 205 if section == self.name and option not in options: 206 yield option 205 if self.config.site_parser.has_section(self.name): 206 for option in self.config.site_parser.options(self.name): 207 if option.lower() not in options: 208 yield option 207 209 208 210 def get(self, name, default=None): 209 211 """Return the value of the specified option.""" 210 if not name in self: 211 if default is None: 212 return self.config._defaults.get((self.name, name), '') 213 return default 214 return to_unicode(self.config.parser.get(self.name, name)) 212 if self.config.parser.has_option(self.name, name): 213 return to_unicode(self.config.parser.get(self.name, name)) 214 elif self.config.site_parser.has_option(self.name, name): 215 return to_unicode(self.config.site_parser.get(self.name, name)) 216 else: 217 return default or '' 215 218 216 219 def getbool(self, name, default=None): 217 220 """Return the value of the specified option as boolean. … … 258 261 259 262 def setdefault(self, name, value): 260 263 """Set the default value of a specific option.""" 261 if (self.name, name) not in self.config._defaults: 262 self.config._defaults[(self.name, name)] = value 264 if not self.config.site_parser.has_option(self.name, name): 265 if not self.config.site_parser.has_section(self.name): 266 self.config.site_parser.add_section(self.name) 267 self.config.site_parser.set(self.name, name, value.encode('utf-8')) 263 268 264 269 def set(self, name, value): 265 270 """Change a configuration value. -
trac/tests/config.py
116 116 def test_sections(self): 117 117 self._write(['[a]', 'option = x', '[b]', 'option = y']) 118 118 config = Configuration(self.filename) 119 from ConfigParser import ConfigParser 120 config.site_parser = ConfigParser() 119 121 self.assertEquals(['a', 'b'], config.sections()) 120 122 121 123 def test_options(self):
