Edgewall Software

Ticket #8510: trac-config-cache.patch

File trac-config-cache.patch, 1.7 KB (added by mixedpuppy <shanec@…>, 3 years ago)
  • vendor/trac/trac/config.py

     
    185186        # Only save options that differ from the defaults 
    186187        sections = [] 
    187188        for section in self.sections(): 
     189            self[section].reset() 
    188190            options = [] 
    189191            for option in self[section]: 
    190192                default = None 
     
    261264     
    262265    Objects of this class should not be instantiated directly. 
    263266    """ 
    264     __slots__ = ['config', 'name', 'overridden'] 
     267    __slots__ = ['config', 'name', 'overridden', 'reset', '_cache'] 
    265268 
    266269    def __init__(self, config, name): 
    267270        self.config = config 
    268271        self.name = name 
    269272        self.overridden = {} 
     273        self._cache = {} 
    270274 
     275    def reset(self): 
     276        self._cache = {} 
     277 
    271278    def __contains__(self, name): 
    272279        if self.config.parser.has_option(self.name, name): 
    273280            return True 
     
    294301        return '<Section [%s]>' % (self.name) 
    295302 
    296303    def get(self, name, default=''): 
     304        if name not in self._cache: 
     305            self._cache[name] = self._get(name, default) 
     306        return self._cache[name] 
     307             
     308    def _get(self, name, default=''): 
    297309        """Return the value of the specified option. 
    298310         
    299311        Valid default input is a string. Returns a string. 
     
    401413         
    402414        These changes are not persistent unless saved with `save()`. 
    403415        """ 
     416        if name in self._cache: 
     417            del self._cache[name] 
    404418        if not self.config.parser.has_section(self.name): 
    405419            self.config.parser.add_section(self.name) 
    406420        if value is None: