Example #1
0
 def _format_link(self, formatter, ns, target, label, fullmatch=None):
     intertrac = formatter.shorthand_intertrac_helper(
         ns, target, label, fullmatch)
     if intertrac:
         return intertrac
     try:
         link, params, fragment = formatter.split_link(target)
         r = Ranges(link)
         if len(r) == 1:
             num = r.a
             ticket = formatter.resource('ticket', num)
             from trac.ticket.model import Ticket
             if Ticket.id_is_valid(num) and \
                     'TICKET_VIEW' in formatter.perm(ticket):
                 # TODO: attempt to retrieve ticket view directly,
                 #       something like: t = Ticket.view(num)
                 for type, summary, status, resolution in \
                         self.env.db_query("""
                         SELECT type, summary, status, resolution
                         FROM ticket WHERE id=%s
                         """, (str(num),)):
                     title = self.format_summary(summary, status,
                                                 resolution, type)
                     href = formatter.href.ticket(num) + params + fragment
                     return tag.a(label,
                                  title=title,
                                  href=href,
                                  class_='%s ticket' % status)
         else:
             ranges = str(r)
             if params:
                 params = '&' + params[1:]
             if isinstance(label, Markup):
                 _label = unescape(label)
             else:
                 _label = label
             label_wrap = _label.replace(',', u',\u200b')
             ranges_wrap = ranges.replace(',', u', ')
             return tag.a(label_wrap,
                          title=_("Tickets %(ranges)s", ranges=ranges_wrap),
                          href=formatter.href.query(id=ranges) + params)
     except ValueError:
         pass
     return tag.a(label, class_='missing ticket')
Example #2
0
    def _make_sublink(self, env, sublink, formatter, ns, target, label,
                      fullmatch, extra=''):
        parent_match = {'ns' : ns,
                        'target' : target,
                        'label': Markup(escape(unescape(label)
                                               if isinstance(label, Markup)
                                               else label)),
                        'fullmatch' : fullmatch,
                        }

        # Tweak nested context to work in target product/global scope
        subctx = formatter.context.child()
        subctx.href = resolve_product_href(to_env=env, at_env=self.env)
        try:
            req = formatter.context.req
        except AttributeError:
            pass
        else:
            # Authenticate in local context but use foreign permissions
            subctx.perm = self.FakePermClass() \
                            if isinstance(req.session, FakeSession) \
                            else PermissionCache(env, req.authname)
            subctx.req = req

        subformatter = EmbeddedLinkFormatter(env, subctx, parent_match)
        subformatter.auto_quote = True
        ctxtag = '[%s] ' % (env.product.prefix,) \
                    if isinstance(env, ProductEnvironment) \
                    else '<global> '
        subformatter.enhance_link = lambda link : (
                                link(title=ctxtag + link.attrib.get('title'))
                                if isinstance(link, Element)
                                    and 'title' in link.attrib
                                else link)
        link = subformatter.match(sublink + extra)
        if link:
            return link
        else:
            # Return outermost match unchanged like if it was !-escaped
            for itype, match in fullmatch.groupdict().items():
                if match and not itype in formatter.wikiparser.helper_patterns:
                    return escape(match)
Example #3
0
    def _make_sublink(self, env, sublink, formatter, ns, target, label,
                      fullmatch, extra=''):
        parent_match = {'ns' : ns,
                        'target' : target,
                        'label': Markup(escape(unescape(label)
                                               if isinstance(label, Markup)
                                               else label)),
                        'fullmatch' : fullmatch,
                        }

        # Tweak nested context to work in target product/global scope
        subctx = formatter.context.child()
        subctx.href = resolve_product_href(to_env=env, at_env=self.env)
        try:
            req = formatter.context.req
        except AttributeError:
            pass
        else:
            # Authenticate in local context but use foreign permissions
            subctx.perm = self.FakePermClass() \
                            if isinstance(req.session, FakeSession) \
                            else PermissionCache(env, req.authname)
            subctx.req = req

        subformatter = EmbeddedLinkFormatter(env, subctx, parent_match)
        subformatter.auto_quote = True
        ctxtag = '[%s] ' % (env.product.prefix,) \
                    if isinstance(env, ProductEnvironment) \
                    else '<global> '
        subformatter.enhance_link = lambda link : (
                                link(title=ctxtag + link.attrib.get('title'))
                                if isinstance(link, Element)
                                    and 'title' in link.attrib
                                else link)
        link = subformatter.match(sublink + extra)
        if link:
            return link
        else:
            # Return outermost match unchanged like if it was !-escaped
            for itype, match in fullmatch.groupdict().items():
                if match and not itype in formatter.wikiparser.helper_patterns:
                    return escape(match)
Example #4
0
 def _format_link(self, formatter, ns, target, label, fullmatch=None):
     intertrac = formatter.shorthand_intertrac_helper(ns, target, label,
                                                      fullmatch)
     if intertrac:
         return intertrac
     try:
         link, params, fragment = formatter.split_link(target)
         r = Ranges(link)
         if len(r) == 1:
             num = r.a
             ticket = formatter.resource('ticket', num)
             from trac.ticket.model import Ticket
             if Ticket.id_is_valid(num) and \
                     'TICKET_VIEW' in formatter.perm(ticket):
                 # TODO: attempt to retrieve ticket view directly,
                 #       something like: t = Ticket.view(num)
                 for type, summary, status, resolution in \
                         self.env.db_query("""
                         SELECT type, summary, status, resolution
                         FROM ticket WHERE id=%s
                         """, (str(num),)):
                     title = self.format_summary(summary, status,
                                                 resolution, type)
                     href = formatter.href.ticket(num) + params + fragment
                     return tag.a(label, title=title, href=href,
                                  class_='%s ticket' % status)
         else:
             ranges = str(r)
             if params:
                 params = '&' + params[1:]
             if isinstance(label, Markup):
                 _label = unescape(label)
             else:
                 _label = label
             label_wrap = _label.replace(',', u',\u200b')
             ranges_wrap = ranges.replace(',', u', ')
             return tag.a(label_wrap,
                          title=_("Tickets %(ranges)s", ranges=ranges_wrap),
                          href=formatter.href.query(id=ranges) + params)
     except ValueError:
         pass
     return tag.a(label, class_='missing ticket')
Example #5
0
 def test_unescape_markup(self):
     string = '<b>"&"</b>'
     markup = Markup.escape(string)
     assert type(markup) is Markup
     self.assertEquals(string, unescape(markup))
Example #6
0
File: core.py Project: alon/polinax
 def test_unescape_markup(self):
     string = '<b>"&"</b>'
     markup = Markup.escape(string)
     assert type(markup) is Markup
     self.assertEquals(string, unescape(markup))