Excellent, thanks Gary :)

On 8/15/07, Gary Oberbrunner <[EMAIL PROTECTED]> wrote:
> Alec Thomas wrote:
> > Hello,
> >
> > I've made a start at porting Tags to 0.11. It's pretty much feature
> > equivalent to the 0.10 version as it stands.
> >
> > To try it out:
> >
> >   easy_install http://trac-hacks.org/svn/tagsplugin/trunk/
> >
> > It requires Genshi trunk, so it'll probably pull that down as well.
> >
> > Works for me against current Trac trunk, r5903. Please test and
> > respond with any issues.
>
> Hi Alec -- thanks very much for this!  I just updated to the trac trunk and
> installed tags as above.  Basic things work out of the box.
>
> I got an error with the following tags URL:
>   http://www/trac/tags/foobar
>
>   NameError: global name 'escape' is not defined
> I fixed that by importing 'escape' from trac.util.html in web_ui.py.
>
> But then I get another error later on while processing the same URL:
>   AttributeError: 'NoneType' object has no attribute 'perm'
> This is deep in the formatter code.   Apparently at tractags/macros.py line
> 215, there's this code:
>                 htitle = wiki_to_oneliner(title, self.env)
> which ends up calling back like this:
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/formatter.py":1052
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/formatter.py": 881 (format)
>    ... then into python's SRE module, and then back out:
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/formatter.py": 735 (replace)
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/formatter.py":728 (handle_match)
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/api.py": 309 (wikipagename_link)
>    "...Trac-0.11dev_r5912-py2.4.egg/trac/wiki/api.py":345 (format_link)
> and that last function wants a Request object from the formatter, which it
> turns out is None:
>
>         req = formatter.context.req
>         context = Context(self.env, req)('wiki', id=page, version=version)
>         if 'WIKI_VIEW' not in req.perm(context):
>
> So I fixed that by passing the req object into wiki_to_oneliner in both places
> in macros.py.  Then I'd get the same error when I explicitly call
> [[ListTagged('foo')]] in a wiki page:
>
> Error: Macro ListTagged('releaseprocedure') failed
> 'NoneType' object has no attribute 'perm'
>
> so I just looked around and passed the req object into a few more places.  Now
> everything seems to be working for me!  I'm extremely happy to be able to run
> 0.11 now!!!
>
> Patch attached.  I'll submit it to trac-hacks as well.
>
> -- Gary Oberbrunner
>
> Index: tractags/api.py
> ===================================================================
> --- tractags/api.py     (revision 2566)
> +++ tractags/api.py     (working copy)
> @@ -108,7 +108,7 @@
>          """ Remove all tags from a name in a tagspace. """
>          self.remove_tags(req, name, self.get_name_tags(name))
>
> -    def name_details(self, name):
> +    def name_details(self, req, name):
>          """ Return a tuple of (href, htmllink, title). eg.
>              ("/ticket/1", "<a href="/ticket/1">#1</a>", "Broken links") """
>          raise NotImplementedError
> @@ -174,10 +174,10 @@
>          cursor.execute('DELETE FROM tags WHERE tagspace=%s AND name=%s', 
> (self.tagspace, name))
>          db.commit()
>
> -    def name_details(self, name):
> +    def name_details(self, req, name):
>          from trac.wiki.formatter import wiki_to_oneliner
>          return (getattr(self.env.href, self.tagspace),
> -                wiki_to_oneliner('[%s:"%s" %s]' % (self.tagspace, name, 
> name), self.env), '')
> +                wiki_to_oneliner('[%s:"%s" %s]' % (self.tagspace, name, 
> name), self.env, req=req), '')
>
>  class TagspaceProxy:
>      """ A convenience for performing operations on a specific tagspace,
> @@ -356,10 +356,10 @@
>          return result
>
>
> -    def name_details(self, tagspace, name):
> +    def name_details(self, tagspace, req, name):
>          """ Return a tuple of (href, htmllink, title). eg.
>              ("/ticket/1", "<a href="/ticket/1">#1</a>", "Broken links") """
> -        return self._get_tagsystem(tagspace).name_details(name)
> +        return self._get_tagsystem(tagspace).name_details(req, name)
>
>      # ITaggingSystemProvider methods
>      def get_tagspaces_provided(self):
> Index: tractags/web_ui.py
> ===================================================================
> --- tractags/web_ui.py  (revision 2566)
> +++ tractags/web_ui.py  (working copy)
> @@ -6,7 +6,7 @@
>  from trac.web.chrome import ITemplateProvider, INavigationContributor, 
> add_stylesheet
>  from trac.web.api import ITemplateStreamFilter
>  from trac.wiki.api import IWikiPageManipulator
> -from trac.util.html import Markup
> +from trac.util.html import Markup, escape
>  from trac.util.compat import set
>  from trac.wiki.web_ui import WikiModule
>  from trac.wiki.formatter import wiki_to_oneliner
> Index: tractags/ticket.py
> ===================================================================
> --- tractags/ticket.py  (revision 2566)
> +++ tractags/ticket.py  (working copy)
> @@ -82,12 +82,12 @@
>          ticket['keywords'] = ''
>          ticket.save_changes(req.authname, None)
>
> -    def name_details(self, name):
> +    def name_details(self, req, name):
>          ticket = model.Ticket(self.env, name)
>          href = self.env.href.ticket(name)
>          from trac.wiki.formatter import wiki_to_oneliner
>          summary = ticket['summary'] or u''
> -        return (href, wiki_to_oneliner('#%s' % name, self.env),
> +        return (href, wiki_to_oneliner('#%s' % name, self.env, req=req),
>                  ticket.exists and summary)
>
>  class TicketTags(Component):
> Index: tractags/wiki.py
> ===================================================================
> --- tractags/wiki.py    (revision 2566)
> +++ tractags/wiki.py    (working copy)
> @@ -25,11 +25,11 @@
>
>          return (page, title)
>
> -    def name_details(self, name):
> +    def name_details(self, req, name):
>          """ Return a tuple of (href, wikilink, title). eg. ("/ticket/1", 
> "#1", "Broken links") """
>          page, title = self.page_info(name)
>          href = self.env.href.wiki(name)
> -        defaults = DefaultTaggingSystem.name_details(self, name)
> +        defaults = DefaultTaggingSystem.name_details(self, req, name)
>          return defaults[0:2] + (title,)
>
>  class WikiTags(Component):
> Index: tractags/macros.py
> ===================================================================
> --- tractags/macros.py  (revision 2566)
> +++ tractags/macros.py  (working copy)
> @@ -18,7 +18,8 @@
>          titles = {}
>          tagspace = TagEngine(self.env).tagspace.wiki
>          for pagename in pages:
> -            href, link, title = tagspace.name_details(pagename)
> +            # XXX: have to pass None for req here; not likely to work!
> +            href, link, title = tagspace.name_details(None, pagename)
>              titles[pagename] = title
>          return titles
>
> @@ -211,8 +212,8 @@
>                  if tagspace == 'wiki' and unicode(name).startswith('tags/'): 
> continue
>                  tags = sorted(tags)
>                  taginfo = self._tag_details(taginfo, tags)
> -                href, link, title = engine.name_details(tagspace, name)
> -                htitle = wiki_to_oneliner(title, self.env)
> +                href, link, title = engine.name_details(tagspace, req, name)
> +                htitle = wiki_to_oneliner(title, self.env, req=req)
>                  name_tags = ['<a href="%s" title="%s">%s</a>'
>                                % (taginfo[tag][0], taginfo[tag][1], tag)
>                                for tag in tags]
> @@ -259,7 +260,7 @@
>          tag_details = {}
>          for tag, names in sorted(engine.get_tags(tagspaces=tagspaces, 
> detailed=True).iteritems()):
>              href, title = engine.get_tag_link(tag)
> -            htitle = wiki_to_oneliner(title, self.env)
> +            htitle = wiki_to_oneliner(title, self.env, req=req)
>              out.write('<li><a href="%s" title="%s">%s</a> %s <span 
> class="tagcount">(%i)</span>' % (href, title, tag, htitle, len(names)))
>              if showpages == 'true':
>                  out.write('\n')
>
>


-- 
Evolution: Taking care of those too stupid to take care of themselves.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Trac 
Users" group.
To post to this group, send email to trac-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/trac-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to