jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/691149 )
Change subject: [IMPR] pagelanglinks() may skip links with empty titles. ......................................................................
[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(-)
Approvals: Meno25: Looks good to me, approved jenkins-bot: Verified
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%7D
@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):
pywikibot-commits@lists.wikimedia.org