Ticket #8510: t8510-Section-cache-r8720.diff
| File t8510-Section-cache-r8720.diff, 2.5 KB (added by cboos, 3 years ago) |
|---|
-
trac/config.py
28 28 29 29 _TRUE_VALUES = ('yes', 'true', 'enabled', 'on', 'aye', '1', 1, True) 30 30 31 _use_default = object() 32 31 33 def _to_utf8(basestr): 32 34 return to_unicode(basestr).encode('utf-8') 33 35 … … 237 239 changed = False 238 240 modtime = os.path.getmtime(self.filename) 239 241 if modtime > self._lastmtime: 242 self._sections = {} 240 243 self.parser._sections = {} 241 244 self.parser.read(self.filename) 242 245 self._lastmtime = modtime … … 272 275 273 276 Objects of this class should not be instantiated directly. 274 277 """ 275 __slots__ = ['config', 'name', 'overridden' ]278 __slots__ = ['config', 'name', 'overridden', '_cache'] 276 279 277 280 def __init__(self, config, name): 278 281 self.config = config 279 282 self.name = name 280 283 self.overridden = {} 284 self._cache = {} 281 285 282 286 def __contains__(self, key): 283 287 if self.config.parser.has_option(_to_utf8(self.name), _to_utf8(key)): … … 311 315 312 316 Valid default input is a string. Returns a string. 313 317 """ 318 cached = self._cache.get(key, _use_default) 319 if cached is not _use_default: 320 return cached 314 321 name_str = _to_utf8(self.name) 315 322 key_str = _to_utf8(key) 316 323 if self.config.parser.has_option(name_str, key_str): … … 320 327 else: 321 328 option = Option.registry.get((self.name, key)) 322 329 if option: 323 value = option.default or default330 value = option.default or _use_default 324 331 else: 325 value = default 332 value = _use_default 333 if value is _use_default: 334 return default 326 335 if not value: 327 returnu''336 value = u'' 328 337 elif isinstance(value, basestring): 329 returnto_unicode(value)330 else:331 return value338 value = to_unicode(value) 339 self._cache[key] = value 340 return value 332 341 333 342 def getbool(self, key, default=''): 334 343 """Return the value of the specified option as boolean. … … 418 427 419 428 These changes are not persistent unless saved with `save()`. 420 429 """ 430 self._cache.pop(key, None) 421 431 name_str = _to_utf8(self.name) 422 432 key_str = _to_utf8(key) 423 433 if not self.config.parser.has_section(name_str):
