jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/933138 )

Change subject: [bugfix] Upcast page types in 
pagegenerators.RecentChangesPageGenerator()
......................................................................

[bugfix] Upcast page types in pagegenerators.RecentChangesPageGenerator()

Yield Page, User, FilePage or Category objects with
RecentChangesPageGenerator. This also solves T340450 because a User
object can be created for anonymous users but creating a Page object
would fail.

Bug: T340450
Change-Id: Ibe6a64cb1ce67ac685747144231ad5d8ee501ea2
---
M pywikibot/pagegenerators/_generators.py
1 file changed, 49 insertions(+), 9 deletions(-)

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




diff --git a/pywikibot/pagegenerators/_generators.py 
b/pywikibot/pagegenerators/_generators.py
index 3d781a9..335f435 100644
--- a/pywikibot/pagegenerators/_generators.py
+++ b/pywikibot/pagegenerators/_generators.py
@@ -22,6 +22,7 @@
 from pywikibot.backports import (
     Callable,
     Dict,
+    Generator,
     Iterable,
     Iterator,
     List,
@@ -30,6 +31,7 @@
 )
 from pywikibot.comms import http
 from pywikibot.exceptions import APIError, ServerError
+from pywikibot.site import Namespace
 from pywikibot.tools import deprecated
 from pywikibot.tools.collections import GeneratorWrapper
 from pywikibot.tools.itertools import filter_unique, itergroup
@@ -169,26 +171,49 @@
                                               total=total, returndict=True))


-def RecentChangesPageGenerator(site: OPT_SITE_TYPE = None,
-                               _filter_unique: Optional[Callable[
-                                   [Iterable['pywikibot.page.Page']],
-                                   Iterable['pywikibot.page.Page']]] = None,
-                               **kwargs: Any
-                               ) -> Iterable['pywikibot.page.Page']:
+def RecentChangesPageGenerator(
+    site: OPT_SITE_TYPE = None,
+    _filter_unique: Optional[Callable[[Iterable['pywikibot.Page']],
+                                      Iterable['pywikibot.Page']]] = None,
+    **kwargs: Any
+) -> Generator['pywikibot.Page', None, None]:
     """
     Generate pages that are in the recent changes list, including duplicates.

-    For parameters refer pywikibot.site.recentchanges
+    For keyword parameters refer :meth:`APISite.recentchanges()
+    <pywikibot.site._generators.GeneratorsMixin.recentchanges>`.
+
+    .. versionchanged:: 8.2
+       The YieldType depends on namespace. It can be
+       :class:`pywikibot.Page`, :class:`pywikibot.User`,
+       :class:`pywikibot.FilePage` or :class:`pywikibot.Category`.

     :param site: Site for generator results.
     """
+    def upcast(gen):
+        """Upcast pywikibot.Page type."""
+        for rc in gen:
+            # The title in a log entry may have been suppressed
+            if rc['type'] == 'log' and 'title' not in rc:
+                continue
+
+            ns = rc['ns']
+            if ns == Namespace.USER:
+                pageclass = pywikibot.User
+            elif ns == Namespace.FILE:
+                pageclass = pywikibot.FilePage
+            elif ns == Namespace.CATEGORY:
+                pageclass = pywikibot.Category
+            else:
+                pageclass = pywikibot.Page
+            yield pageclass(site, rc['title'])
+
     if site is None:
         site = pywikibot.Site()

     gen = site.recentchanges(**kwargs)
     gen.request['rcprop'] = 'title'
-    gen = (pywikibot.Page(site, rc['title'])
-           for rc in gen if rc['type'] != 'log' or 'title' in rc)
+    gen = upcast(gen)

     if _filter_unique:
         gen = _filter_unique(gen)

--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/933138
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ibe6a64cb1ce67ac685747144231ad5d8ee501ea2
Gerrit-Change-Number: 933138
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to