Edgewall Software

Ticket #5741: config-touch-after-intermaptxt-change-r6792.diff

File config-touch-after-intermaptxt-change-r6792.diff, 3.5 KB (added by cboos, 9 months ago)

Propagate InterMapTxt changes to other servers by the way of a config.touch()

  • trac/wiki/interwiki.py

     
    3535    _argspec_re = re.compile(r"\$\d") 
    3636 
    3737    def __init__(self): 
     38        self.reset() 
     39 
     40    def reset(self): 
    3841        self._interwiki_map = None 
     42        self.config.touch() 
    3943        # This dictionary maps upper-cased namespaces 
    4044        # to (namespace, prefix, title) values; 
    4145 
    4246    # The component itself behaves as a map 
    4347 
    4448    def __contains__(self, ns): 
    45         self._update() 
    46         return ns.upper() in self._interwiki_map 
     49        return ns.upper() in self.interwiki_map 
    4750 
    4851    def __getitem__(self, ns): 
    49         self._update() 
    50         return self._interwiki_map[ns.upper()] 
     52        return self.interwiki_map[ns.upper()] 
    5153 
    5254    def __setitem__(self, ns, value): 
    53         self._update() 
    54         self._interwiki_map[ns.upper()] = value 
     55        self.interwiki_map[ns.upper()] = value 
    5556 
    5657    def keys(self): 
    57         self._update() 
    58         return self._interwiki_map.keys() 
     58        return self.interwiki_map.keys() 
    5959 
    6060    # Expansion of positional arguments ($1, $2, ...) in URL and title 
    6161    def _expand(self, txt, args): 
     
    9797 
    9898    def wiki_page_changed(self, page, version, t, comment, author, ipnr): 
    9999        if page.name == InterWikiMap._page_name: 
    100             self._interwiki_map = None 
     100            self.reset() 
    101101 
    102102    def wiki_page_deleted(self, page): 
    103103        if page.name == InterWikiMap._page_name: 
    104             self._interwiki_map = None 
     104            self.reset() 
    105105 
    106106    def wiki_page_version_deleted(self, page): 
    107107        if page.name == InterWikiMap._page_name: 
    108             self._interwiki_map = None 
     108            self.reset() 
    109109 
    110     def _update(self): 
     110    def _get_interwiki_map(self): 
    111111        from trac.wiki.model import WikiPage 
    112         if self._interwiki_map is not None: 
    113             return 
    114         self._interwiki_map = {} 
    115         content = WikiPage(self.env, InterWikiMap._page_name).text 
    116         in_map = False 
    117         for line in content.split('\n'): 
    118             if in_map: 
    119                 if line.startswith('----'): 
    120                     in_map = False 
    121                 else: 
    122                     m = re.match(InterWikiMap._interwiki_re, line) 
    123                     if m: 
    124                         prefix, url, title = m.groups() 
    125                         url = url.strip() 
    126                         title = title and title.strip() or prefix 
    127                         self[prefix] = (prefix, url, title) 
    128             elif line.startswith('----'): 
    129                 in_map = True 
     112        if self._interwiki_map is None: 
     113            self._interwiki_map = {} 
     114            content = WikiPage(self.env, InterWikiMap._page_name).text 
     115            in_map = False 
     116            for line in content.split('\n'): 
     117                if in_map: 
     118                    if line.startswith('----'): 
     119                        in_map = False 
     120                    else: 
     121                        m = re.match(InterWikiMap._interwiki_re, line) 
     122                        if m: 
     123                            prefix, url, title = m.groups() 
     124                            url = url.strip() 
     125                            title = title and title.strip() or prefix 
     126                            self[prefix] = (prefix, url, title) 
     127                elif line.startswith('----'): 
     128                    in_map = True 
     129        return self._interwiki_map 
     130    interwiki_map = property(_get_interwiki_map) 
    130131 
    131132    # IWikiMacroProvider methods 
    132133