示例#1
0
 def test_split_interwiki(self):
     app.cfg.namespace_mapping = [(u'', 'default_backend'),
                                  (u'ns1/', 'default_backend'),
                                  (u'ns1/ns2/', 'other_backend')]
     tests = [
         ('', ('Self', '', 'name_exact', '')),
         ('OtherWiki/', ('OtherWiki', '', 'name_exact', '')),
         ('/ns1/', ('Self', 'ns1', 'name_exact', '')),
         ('/@itemid/', ('Self', '', 'itemid', '')),
         ('/ns3/foo', ('Self', '', 'name_exact', 'ns3/foo')),
         ('@tags/SomeTag', ('Self', '', 'tags', 'SomeTag')),
         ('OtherWiki/OtherPage', ('OtherWiki', '', 'name_exact',
                                  'OtherPage')),
         ('NonExistentWiki/OtherPage', ('Self', '', 'name_exact',
                                        'NonExistentWiki/OtherPage')),
         ('OtherWiki/ns1/@invalidID/Page',
          ('OtherWiki', 'ns1', 'name_exact', '@invalidID/Page')),
         ('/ns1/OtherPage', ('Self', 'ns1', 'name_exact', 'OtherPage')),
         ('/ns1/ns2/OtherPage', ('Self', 'ns1/ns2', 'name_exact',
                                 'OtherPage')),
         ('ns1/OtherPage', ('Self', 'ns1', 'name_exact', 'OtherPage')),
         ('ns1/ns2/OtherPage', ('Self', 'ns1/ns2', 'name_exact',
                                'OtherPage')),
         ('OtherWiki/ns1/OtherPage', ('OtherWiki', 'ns1', 'name_exact',
                                      'OtherPage')),
         ('OtherWiki/ns1/ns2/OtherPage', ('OtherWiki', 'ns1/ns2',
                                          'name_exact', 'OtherPage')),
         ('OtherWiki/ns1/ns2/@userid/SomeUserID', ('OtherWiki', 'ns1/ns2',
                                                   'userid', 'SomeUserID')),
         ('OtherWiki/ns3/ns2/@Notfield/OtherPage/foo',
          ('OtherWiki', '', 'name_exact',
           'ns3/ns2/@Notfield/OtherPage/foo')),
     ]
     for markup, (wikiname, namespace, field, pagename) in tests:
         assert split_interwiki(markup) == (wikiname, namespace, field,
                                            pagename)
         wikiname, namespace, field, pagename = split_interwiki(markup)
         assert isinstance(namespace, unicode)
         assert isinstance(pagename, unicode)
         assert isinstance(field, unicode)
         assert isinstance(wikiname, unicode)
示例#2
0
文件: __init__.py 项目: steel-ne/moin
    def split_navilink(self, text):
        """
        Split navibar links into pagename, link to page

        Admin or user might want to use shorter navibar items by using
        the [[page|title]] or [[url|title]] syntax.

        Supported syntax:
            * PageName
            * WikiName:PageName
            * wiki:WikiName:PageName
            * url
            * all targets as seen above with title: [[target|title]]

        :param text: the text used in config or user preferences
        :rtype: tuple
        :returns: pagename or url, link to page or url
        """
        title = None
        wiki_local = ''  # means local wiki

        # Handle [[pagename|title]] or [[url|title]] formats
        if text.startswith('[[') and text.endswith(']]'):
            text = text[2:-2]
            try:
                target, title = text.split('|', 1)
                target = target.strip()
                title = title.strip()
            except (ValueError, TypeError):
                # Just use the text as is.
                target = text.strip()
        else:
            target = text

        if wikiutil.is_URL(target):
            if not title:
                title = target
            return target, title, wiki_local

        # remove wiki: url prefix
        if target.startswith("wiki:"):
            target = target[5:]

        wiki_name, namespace, field, item_name = split_interwiki(target)
        if wiki_name == 'Self':
            wiki_name = ''
        href = url_for_item(item_name,
                            namespace=namespace,
                            wiki_name=wiki_name,
                            field=field)
        if not title:
            title = shorten_fqname(CompositeName(namespace, field, item_name))
        return href, title, wiki_name
示例#3
0
文件: __init__.py 项目: steel-ne/moin
    def path_breadcrumbs(self):
        """
        Assemble the path breadcrumbs (a.k.a.: trail)

        :rtype: list
        :returns: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err)
        """
        user = self.user
        breadcrumbs = []
        trail = user.get_trail()
        for interwiki_item_name in trail:
            wiki_name, namespace, field, item_name = split_interwiki(
                interwiki_item_name)
            fqname = CompositeName(namespace, field, item_name)
            err = not is_known_wiki(wiki_name)
            href = url_for_item(wiki_name=wiki_name, **fqname.split)
            if is_local_wiki(wiki_name):
                exists = bool(self.storage.get_item(**fqname.query))
                wiki_name = ''  # means "this wiki" for the theme code
            else:
                exists = True  # we can't detect existance of remote items
            if item_name:
                breadcrumbs.append((wiki_name, fqname, href, exists, err))
        return breadcrumbs