jenkins-bot has submitted this change and it was merged.

Change subject: Page.title() may return labeled links like [[link|label]]
......................................................................


Page.title() may return labeled links like [[link|label]]

withNamespaces parameter is also availlable with asLink=True.
This means the link is labeled with it's _link.title:
[[link|label]]
[[link#section|label]]
[[site:link|label]]
except left and right side is the same e.g. for article namespace

Change-Id: Ic5c19d7c3f504c634ad63ff564477e4e54e532bd
---
M pywikibot/page.py
M tests/page_tests.py
2 files changed, 50 insertions(+), 23 deletions(-)

Approvals:
  Pyfisch: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/pywikibot/page.py b/pywikibot/page.py
index b18b875..1b9ec62 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -131,10 +131,14 @@
               as_filename=False, insite=None):
         """Return the title of this Page, as a Unicode string.
 
-        @param underscore: if true, replace all ' ' characters with '_'
-        @param withNamespace: if false, omit the namespace prefix
+        @param underscore: (not used with asLink) if true, replace all ' '
+            characters with '_'
+        @param withNamespace: if false, omit the namespace prefix. If this
+            option is false and used together with asLink return a labeled
+            link like [[link|label]]
         @param withSection: if false, omit the section
-        @param asUrl: if true, quote title as if in an URL
+        @param asUrl: (not used with asLink) if true, quote title as if in an
+            URL
         @param asLink: if true, return the title in the form of a wikilink
         @param allowInterwiki: (only used if asLink is true) if true, format
             the link as an interwiki link if necessary
@@ -142,16 +146,19 @@
             format the link as an interwiki link
         @param textlink: (only used if asLink is true) if true, place a ':'
             before Category: and Image: links
-        @param as_filename: if true, replace any characters that are unsafe
-            in filenames
+        @param as_filename: (not used with asLink) if true, replace any
+            characters that are unsafe in filenames
         @param insite: (only used if asLink is true) a site object where the
             title is to be shown. default is the current family/lang given by
             -family and -lang option i.e. config.family and config.mylang
 
         """
         title = self._link.canonical_title()
+        label = self._link.title
         if withSection and self._link.section:
-            title = title + "#" + self._link.section
+            section = u"#" + self._link.section
+        else:
+            section = u''
         if asLink:
             if insite:
                 target_code = insite.code
@@ -165,22 +172,25 @@
                  or self.site.code != target_code)):
                 if self.site.family.name != target_family \
                    and self.site.family.name != self.site.code:
-                    return u'[[%s:%s:%s]]' % (self.site.family.name,
-                                              self.site.code,
-                                              title)
+                    title = u'%s:%s:%s' % (self.site.family.name,
+                                           self.site.code,
+                                           title)
                 else:
                     # use this form for sites like commons, where the
                     # code is the same as the family name
-                    return u'[[%s:%s]]' % (self.site.code,
-                                           title)
+                    title = u'%s:%s' % (self.site.code, title)
             elif textlink and (self.isImage() or self.isCategory()):
-                return u'[[:%s]]' % title
+                title = u':%s' % title
+            elif self.namespace() == 0 and not section:
+                withNamespace = True
+            if withNamespace:
+                return u'[[%s%s]]' % (title, section)
             else:
-                return u'[[%s]]' % title
+                return u'[[%s%s|%s]]' % (title, section, label)
         if not withNamespace and self.namespace() != 0:
-            title = self._link.title
-            if withSection and self._link.section:
-                title = title + "#" + self._link.section
+            title = label + section
+        else:
+            title += section
         if underscore or asUrl:
             title = title.replace(u' ', u'_')
         if asUrl:
diff --git a/tests/page_tests.py b/tests/page_tests.py
index c242482..2ae3b26 100644
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -141,12 +141,21 @@
                          u"Test page")
         self.assertEqual(p1.title(asUrl=True),
                          "Help%3ATest_page%23Testing")
-        self.assertEqual(p1.title(asLink=True),
+        self.assertEqual(p1.title(asLink=True, insite=site),
                          u"[[Help:Test page#Testing]]")
-        self.assertEqual(p1.title(asLink=True, forceInterwiki=True),
+        self.assertEqual(p1.title(asLink=True, forceInterwiki=True, 
insite=site),
                          u"[[en:Help:Test page#Testing]]")
-        self.assertEqual(p1.title(asLink=True, textlink=True),
-                         p1.title(asLink=True))
+        self.assertEqual(p1.title(asLink=True, textlink=True, insite=site),
+                         p1.title(asLink=True, textlink=False, insite=site))
+        self.assertEqual(p1.title(asLink=True, withNamespace=False, 
insite=site),
+                         u"[[Help:Test page#Testing|Test page]]")
+        self.assertEqual(p1.title(asLink=True, forceInterwiki=True,
+                                  withNamespace=False, insite=site),
+                         u"[[en:Help:Test page#Testing|Test page]]")
+        self.assertEqual(p1.title(asLink=True, textlink=True,
+                                  withNamespace=False, insite=site),
+                         p1.title(asLink=True, textlink=False,
+                                  withNamespace=False, insite=site))
         # also test a page with non-ASCII chars and a different namespace
         p2 = pywikibot.Page(site, u"File:Jean-Léon Gérôme 003.jpg")
         self.assertEqual(p2.title(),
@@ -161,14 +170,22 @@
                          u"Jean-Léon Gérôme 003.jpg")
         self.assertEqual(p2.title(asUrl=True),
                          u"File%3AJean-L%C3%A9on_G%C3%A9r%C3%B4me_003.jpg")
-        self.assertEqual(p2.title(asLink=True),
+        self.assertEqual(p2.title(asLink=True, insite=site),
                          u"[[File:Jean-Léon Gérôme 003.jpg]]")
-        self.assertEqual(p2.title(asLink=True, forceInterwiki=True),
+        self.assertEqual(p2.title(asLink=True, forceInterwiki=True, 
insite=site),
                          u"[[en:File:Jean-Léon Gérôme 003.jpg]]")
-        self.assertEqual(p2.title(asLink=True, textlink=True),
+        self.assertEqual(p2.title(asLink=True, textlink=True, insite=site),
                          u"[[:File:Jean-Léon Gérôme 003.jpg]]")
         self.assertEqual(p2.title(as_filename=True),
                          u"File_Jean-Léon_Gérôme_003.jpg")
+        self.assertEqual(p2.title(asLink=True, withNamespace=False, 
insite=site),
+                         u"[[File:Jean-Léon Gérôme 003.jpg|Jean-Léon Gérôme 
003.jpg]]")
+        self.assertEqual(p2.title(asLink=True, forceInterwiki=True,
+                                  withNamespace=False, insite=site),
+                         u"[[en:File:Jean-Léon Gérôme 003.jpg|Jean-Léon Gérôme 
003.jpg]]")
+        self.assertEqual(p2.title(asLink=True, textlink=True,
+                                  withNamespace=False, insite=site),
+                         u"[[:File:Jean-Léon Gérôme 003.jpg|Jean-Léon Gérôme 
003.jpg]]")
 
     def testSection(self):
         """Test section() method."""

-- 
To view, visit https://gerrit.wikimedia.org/r/127272
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic5c19d7c3f504c634ad63ff564477e4e54e532bd
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Pyfisch <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to