jenkins-bot submitted this change.

View Change

Approvals: Meno25: Looks good to me, approved jenkins-bot: Verified
[IMPR] pagelanglinks() may skip links with empty titles.

langlinks API call may retrieve site links with empty titles like
[[en:]]. Introduce a new parameter include_empty_titles (default False)
to ignore such links because it cannot be upcasted to a Page object
but link.astitle() would work.

raise an InvalidTitleError if a Page is to be created with empty title
raise an InvalidPageError if a Page has no pageid

Bug: T223157
Change-Id: Iab294e318ff5412ef9a5b7485afcfb85600d531f
---
M pywikibot/page/__init__.py
M pywikibot/site/_generators.py
2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/pywikibot/page/__init__.py b/pywikibot/page/__init__.py
index 390e23a..5553d95 100644
--- a/pywikibot/page/__init__.py
+++ b/pywikibot/page/__init__.py
@@ -179,6 +179,13 @@
self._link = Link(title, source=source.site,
default_namespace=ns)
elif isinstance(source, BaseLink):
+ if not source.title:
+ raise InvalidTitleError(
+ '{} title of {} {} cannot be empty.'
+ .format(self.__class__.__name__,
+ source.__class__.__name__,
+ source.astext()))
+
self._link = source
self._revisions = {}
else:
@@ -707,7 +714,9 @@
If the title includes a section, return False if this section isn't
found.
"""
- return self.pageid > 0
+ with suppress(AttributeError):
+ return self.pageid > 0
+ raise InvalidPageError(self)

@property
def oldest_revision(self):
diff --git a/pywikibot/site/_generators.py b/pywikibot/site/_generators.py
index 5bd2755..475d71b 100644
--- a/pywikibot/site/_generators.py
+++ b/pywikibot/site/_generators.py
@@ -730,13 +730,18 @@
api.update_page(page, pagedata, rvgen.props)

@deprecated_args(step=True)
- def pagelanglinks(self, page, *, total=None, include_obsolete=False):
+ def pagelanglinks(self, page, *,
+ total: Optional[int] = None,
+ include_obsolete: bool = False,
+ include_empty_titles: bool = False):
"""Iterate all interlanguage links on page, yielding Link objects.

@see: U{https://www.mediawiki.org/wiki/API:Langlinks}

@param include_obsolete: if true, yield even Link objects whose
- site is obsolete
+ site is obsolete
+ @param include_empty_titles: if true, yield even Link objects whose
+ title is empty but redirects to a site like [[en:]]
"""
lltitle = page.title(with_section=False)
llquery = self._generator(api.PropertyGenerator,
@@ -755,7 +760,8 @@
if link.site.obsolete and not include_obsolete:
continue

- yield link
+ if link.title or include_empty_titles:
+ yield link

@deprecated_args(step=True)
def page_extlinks(self, page, *, total=None):

To view, visit change 691149. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Iab294e318ff5412ef9a5b7485afcfb85600d531f
Gerrit-Change-Number: 691149
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: JJMC89 <JJMC89.Wikimedia@gmail.com>
Gerrit-Reviewer: Matěj Suchánek <matejsuchanek97@gmail.com>
Gerrit-Reviewer: Meno25 <meno25mail@gmail.com>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged