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) |
|---|
-
trac/wiki/interwiki.py
35 35 _argspec_re = re.compile(r"\$\d") 36 36 37 37 def __init__(self): 38 self.reset() 39 40 def reset(self): 38 41 self._interwiki_map = None 42 self.config.touch() 39 43 # This dictionary maps upper-cased namespaces 40 44 # to (namespace, prefix, title) values; 41 45 42 46 # The component itself behaves as a map 43 47 44 48 def __contains__(self, ns): 45 self._update() 46 return ns.upper() in self._interwiki_map 49 return ns.upper() in self.interwiki_map 47 50 48 51 def __getitem__(self, ns): 49 self._update() 50 return self._interwiki_map[ns.upper()] 52 return self.interwiki_map[ns.upper()] 51 53 52 54 def __setitem__(self, ns, value): 53 self._update() 54 self._interwiki_map[ns.upper()] = value 55 self.interwiki_map[ns.upper()] = value 55 56 56 57 def keys(self): 57 self._update() 58 return self._interwiki_map.keys() 58 return self.interwiki_map.keys() 59 59 60 60 # Expansion of positional arguments ($1, $2, ...) in URL and title 61 61 def _expand(self, txt, args): … … 97 97 98 98 def wiki_page_changed(self, page, version, t, comment, author, ipnr): 99 99 if page.name == InterWikiMap._page_name: 100 self. _interwiki_map = None100 self.reset() 101 101 102 102 def wiki_page_deleted(self, page): 103 103 if page.name == InterWikiMap._page_name: 104 self. _interwiki_map = None104 self.reset() 105 105 106 106 def wiki_page_version_deleted(self, page): 107 107 if page.name == InterWikiMap._page_name: 108 self. _interwiki_map = None108 self.reset() 109 109 110 def _ update(self):110 def _get_interwiki_map(self): 111 111 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) 130 131 131 132 # IWikiMacroProvider methods 132 133
