source: tagsplugin/tags/0.3rc1/tractags/wiki.py

Last change on this file was 1783, checked in by Alec Thomas, 18 years ago
  • Big API change, see api.py for details, but it makes life much easier for users.
  • ListTagged now performs an intersection rather than a union by default.
  • Version bump to 0.3 because of the API changes.
  • Added start of unit tests (still not 100% working).
File size: 1.9 KB
Line 
1from trac.core import *
2from tractags.api import DefaultTaggingSystem, ITaggingSystemProvider, TagEngine
3from trac.wiki.api import IWikiChangeListener
4import re
5
6class WikiTaggingSystem(DefaultTaggingSystem):
7    """ Subclass of DefaultTaggingSystem that knows how to retrieve wiki page
8        titles. """
9    def __init__(self, env):
10        DefaultTaggingSystem.__init__(self, env, 'wiki')
11
12    def page_info(self, page):
13        from trac.wiki import model
14        """ Return tuple of (model.WikiPage, title) """
15        page = model.WikiPage(self.env, page)
16
17        title = ''
18
19        if page.exists:
20            text = page.text
21            ret = re.search('=\s+([^=]*)=',text)
22            title = ret and ret.group(1) or ''
23
24        return (page, title)
25
26    def name_details(self, name):
27        """ Return a tuple of (href, wikilink, title). eg. ("/ticket/1", "#1", "Broken links") """
28        page, title = self.page_info(name)
29        href = self.env.href.wiki(name)
30        defaults = DefaultTaggingSystem.name_details(self, name)
31        return defaults[0:2] + (title,)
32
33class WikiTags(Component):
34    """ Implement tags in the Wiki system. """
35
36    implements(ITaggingSystemProvider, IWikiChangeListener)
37
38    # ITaggingSystemProvider methods
39    def get_tagspaces_provided(self):
40        yield 'wiki'
41
42    def get_tagging_system(self, tagspace):
43        return WikiTaggingSystem(self.env)
44
45    # IWikiChangeListener methods
46    def wiki_page_added(self, page):
47        pass
48
49    def wiki_page_changed(self, page, version, t, comment, author, ipnr):
50        pass
51
52    def wiki_page_deleted(self, page):
53        # No point having tags on a non-existent page.
54        self.env.log.debug("Removing all tags from 'wiki:%s'" % page.name)
55        TagEngine(self.env).tagspace.wiki.remove_all_tags(None, page.name)
56
57    def wiki_page_version_deleted(self, page):
58        # Wiki tags are not versioned. If they were, we'd delete them here.
59        pass
Note: See TracBrowser for help on using the repository browser.