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)
def testSplitWiki(self): tests = [('SomePage', ('Self', 'SomePage')), ('OtherWiki:OtherPage', ('OtherWiki', 'OtherPage')), (':OtherPage', ('', 'OtherPage')), # broken ('/OtherPage', ('Self', '/OtherPage')), # wrong interpretation ('MainPage/OtherPage', ('Self', 'MainPage/OtherPage')), ] for markup, (wikiname, pagename) in tests: assert split_interwiki(markup) == (wikiname, pagename)
def testSplitWiki(self): tests = [ ('SomePage', ('Self', 'SomePage')), ('OtherWiki:OtherPage', ('OtherWiki', 'OtherPage')), (':OtherPage', ('', 'OtherPage')), # broken ('/OtherPage', ('Self', '/OtherPage')), # wrong interpretation ('MainPage/OtherPage', ('Self', 'MainPage/OtherPage')), ] for markup, (wikiname, pagename) in tests: assert split_interwiki(markup) == (wikiname, pagename)
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
def path_breadcrumbs(self): """ Assemble the path breadcrumbs (a.k.a.: trail) @rtype: list @return: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err) """ user = self.user breadcrumbs = [] trail = user.getTrail() for interwiki_item_name in trail: wiki_name, item_name = split_interwiki(interwiki_item_name) wiki_name, wiki_base_url, item_name, err = resolve_interwiki(wiki_name, item_name) href = join_wiki(wiki_base_url, item_name) if wiki_name in [self.cfg.interwikiname, 'Self', ]: exists = self.storage.has_item(item_name) wiki_name = '' # means "this wiki" for the theme code else: exists = True # we can't detect existance of remote items breadcrumbs.append((wiki_name, item_name, href, exists, err)) return breadcrumbs
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, item_name = split_interwiki(interwiki_item_name) err = not is_known_wiki(wiki_name) href = url_for_item(item_name, wiki_name=wiki_name) if is_local_wiki(wiki_name): exists = self.storage.has_item(item_name) wiki_name = '' # means "this wiki" for the theme code else: exists = True # we can't detect existance of remote items breadcrumbs.append((wiki_name, item_name, href, exists, err)) return breadcrumbs
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
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
def split_navilink(self, text, localize=1): """ 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. In this case, we don't use localization, and the links goes to page or to the url, not the localized version of page. 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 @return: 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() localize = 0 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:] # try handling interwiki links wiki_name, item_name = split_interwiki(target) wiki_name, wiki_base_url, item_name, err = resolve_interwiki(wiki_name, item_name) href = join_wiki(wiki_base_url, item_name) if wiki_name not in [self.cfg.interwikiname, 'Self', ]: if not title: title = item_name return href, title, wiki_name # Handle regular pagename like "FrontPage" item_name = wikiutil.normalize_pagename(item_name, self.cfg) # Use localized pages for the current user if localize: item_name = self.translated_item_name(item_name) if not title: title = item_name href = url_for('frontend.show_item', item_name=item_name) return href, title, wiki_local