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

Change subject: Always return raw generators from APISite methods, not objects
......................................................................

Always return raw generators from APISite methods, not objects

Callers should treat these as iterators, they shouldn't be
able to customize their parameters (doing so in runtime could
naturally produce weird results or be unstable in other way).
Customization should happen prior to executing them, e.g. via
kwargs.

Change-Id: I62cf16579f2972f8158bb87ed6d7ccd9919e2b8a
---
M pywikibot/site/__init__.py
M tests/pagegenerators_tests.py
2 files changed, 46 insertions(+), 48 deletions(-)

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



diff --git a/pywikibot/site/__init__.py b/pywikibot/site/__init__.py
index 8a4200e..eadc2a4 100644
--- a/pywikibot/site/__init__.py
+++ b/pywikibot/site/__init__.py
@@ -3440,8 +3440,9 @@
                         namespaces=namespaces,
                         content=content
                     )
-            return itertools.chain(*genlist.values())
-        return blgen
+            yield from itertools.chain(*genlist.values())
+        else:
+            yield from blgen

     @deprecated_args(step=None, filterRedirects='filter_redirects')
     def page_embeddedin(self, page, *, filter_redirects=None, namespaces=None,
@@ -3471,9 +3472,9 @@
         if filter_redirects is not None:
             eiargs['geifilterredir'] = ('redirects' if filter_redirects
                                         else 'nonredirects')
-        return self._generator(api.PageGenerator, type_arg='embeddedin',
-                               namespaces=namespaces, total=total,
-                               g_content=content, **eiargs)
+        yield from self._generator(api.PageGenerator, type_arg='embeddedin',
+                                   namespaces=namespaces, total=total,
+                                   g_content=content, **eiargs)

     @deprecated_args(
         step=None, followRedirects='follow_redirects',
@@ -3544,10 +3545,10 @@
         else:
             pltitle = page.title(with_section=False).encode(self.encoding())
             plargs['titles'] = pltitle
-        return self._generator(api.PageGenerator, type_arg='links',
-                               namespaces=namespaces, total=total,
-                               g_content=content, redirects=follow_redirects,
-                               **plargs)
+        yield from self._generator(
+            api.PageGenerator, type_arg='links', namespaces=namespaces,
+            total=total, g_content=content, redirects=follow_redirects,
+            **plargs)

     # Sortkey doesn't work with generator
     @deprecated_args(withSortKey=None, step=None)
@@ -3566,9 +3567,8 @@
         else:
             clargs['titles'] = page.title(
                 with_section=False).encode(self.encoding())
-        return self._generator(api.PageGenerator,
-                               type_arg='categories', total=total,
-                               g_content=content, **clargs)
+        yield from self._generator(api.PageGenerator, type_arg='categories',
+                                   total=total, g_content=content, **clargs)

     @deprecated_args(step=None)
     def pageimages(self, page, *, total=None, content=False):
@@ -3582,9 +3582,9 @@

         """
         imtitle = page.title(with_section=False).encode(self.encoding())
-        return self._generator(api.PageGenerator, type_arg='images',
-                               titles=imtitle, total=total,
-                               g_content=content)
+        yield from self._generator(api.PageGenerator, type_arg='images',
+                                   titles=imtitle, total=total,
+                                   g_content=content)

     @deprecated_args(step=None)
     def pagetemplates(self, page, *, namespaces=None, total=None,
@@ -3605,9 +3605,9 @@
             type such as NoneType or bool
         """
         tltitle = page.title(with_section=False).encode(self.encoding())
-        return self._generator(api.PageGenerator, type_arg='templates',
-                               titles=tltitle, namespaces=namespaces,
-                               total=total, g_content=content)
+        yield from self._generator(api.PageGenerator, type_arg='templates',
+                                   titles=tltitle, namespaces=namespaces,
+                                   total=total, g_content=content)

     @deprecated_args(step=None)
     def categorymembers(self, category, *, namespaces=None, sortby=None,
@@ -3776,8 +3776,8 @@
             raise ValueError('categorymembers: '
                              "invalid combination of 'sortby' and 'endsort'")

-        return self._generator(api.PageGenerator, namespaces=namespaces,
-                               total=total, g_content=content, **cmargs)
+        yield from self._generator(api.PageGenerator, namespaces=namespaces,
+                                   total=total, g_content=content, **cmargs)

     @deprecated_args(getText='content', sysop=None)
     @remove_last_args(['rollback'])
@@ -4060,7 +4060,7 @@
                 apgen.request['gapprlevel'] = protect_level
         if reverse:
             apgen.request['gapdir'] = 'descending'
-        return apgen
+        yield from apgen

     @deprecated_args(step=None)
     def alllinks(self, start='!', prefix='', namespace=0, unique=False,
@@ -4127,7 +4127,7 @@
             acgen.request['gacprefix'] = prefix
         if reverse:
             acgen.request['gacdir'] = 'descending'
-        return acgen
+        yield from acgen

     def isBot(self, username):
         """Return True is username is a bot user."""
@@ -4175,7 +4175,7 @@
             augen.request['auprefix'] = prefix
         if group:
             augen.request['augroup'] = group
-        return augen
+        yield from augen

     @deprecated_args(step=None)
     def allimages(self, start='!', prefix='', minsize=None, maxsize=None,
@@ -4214,7 +4214,7 @@
             aigen.request['gaisha1'] = sha1
         if sha1base36:
             aigen.request['gaisha1base36'] = sha1base36
-        return aigen
+        yield from aigen

     @need_version('1.17')
     @deprecated_args(limit='total')  # ignore falimit setting
@@ -4247,7 +4247,7 @@
             fagen.request['fa' + k] = v
         if reverse:
             fagen.request['fadir'] = 'descending'
-        return fagen
+        yield from fagen

     @deprecated_args(step=None)
     def blocks(self, starttime=None, endtime=None, reverse=False,
@@ -4308,7 +4308,7 @@
             bkgen.request['bkusers'] = users
         elif iprange:
             bkgen.request['bkip'] = iprange
-        return bkgen
+        yield from bkgen

     @deprecated_args(step=None)
     def exturlusage(self, url=None, protocol=None, namespaces=None,
@@ -4344,10 +4344,10 @@
         # with any URL.
         if url == '*':
             url = None
-        return self._generator(api.PageGenerator, type_arg='exturlusage',
-                               geuquery=url, geuprotocol=protocol,
-                               namespaces=namespaces,
-                               total=total, g_content=content)
+        yield from self._generator(api.PageGenerator, type_arg='exturlusage',
+                                   geuquery=url, geuprotocol=protocol,
+                                   namespaces=namespaces, total=total,
+                                   g_content=content)

     @deprecated_args(step=None)
     def imageusage(self, image, namespaces=None, filterredir=None,
@@ -4375,9 +4375,9 @@
         if filterredir is not None:
             iuargs['giufilterredir'] = ('redirects' if filterredir else
                                         'nonredirects')
-        return self._generator(api.PageGenerator, type_arg='imageusage',
-                               namespaces=namespaces,
-                               total=total, g_content=content, **iuargs)
+        yield from self._generator(api.PageGenerator, type_arg='imageusage',
+                                   namespaces=namespaces, total=total,
+                                   g_content=content, **iuargs)

     @property
     def logtypes(self):
@@ -4446,7 +4446,7 @@
             # Supported in version 1.16+; earlier sites will cause APIError
             legen.request['letag'] = tag

-        return legen
+        yield from legen

     @deprecated_args(returndict=None, nobots=None, rcshow=None, rcprop=None,
                      rctype='changetype', revision=None, repeat=None,
@@ -4550,7 +4550,7 @@
         if excludeuser:
             rcgen.request['rcexcludeuser'] = excludeuser
         rcgen.request['rctag'] = tag
-        return rcgen
+        yield from rcgen

     @deprecated_args(number='total', step=None, key='searchstring',
                      getredirects='get_redirects')
@@ -4609,7 +4609,7 @@
                                 total=total, g_content=content)
         if self.mw_version < '1.23':
             srgen.request['gsrredirects'] = get_redirects
-        return srgen
+        yield from srgen

     @deprecated_args(step=None, showMinor='minor')
     def usercontribs(self, user=None, userprefix=None, start=None, end=None,
@@ -4667,7 +4667,7 @@
         option_set = api.OptionSet(self, 'usercontribs', 'show')
         option_set['minor'] = minor
         ucgen.request['ucshow'] = option_set
-        return ucgen
+        yield from ucgen

     @deprecated_args(step=None, showMinor='minor', showAnon='anon',
                      showBot='bot')
@@ -4715,7 +4715,7 @@
         filters = {'minor': minor, 'bot': bot, 'anon': anon}
         wlgen.request['wlshow'] = api.OptionSet(self, 'watchlist', 'show',
                                                 filters)
-        return wlgen
+        yield from wlgen

     @deprecated_args(step=None, get_text='content', page='titles',
                      limit='total')
@@ -4852,7 +4852,7 @@
         usgen = api.ListGenerator(
             'users', site=self, parameters={
                 'ususers': usernames, 'usprop': usprop})
-        return usgen
+        yield from usgen

     @deprecated_args(step=None)
     def randompages(self, total=None, namespaces=None,
@@ -4894,9 +4894,9 @@
                 params['grnredirect'] = redirects == 'redirects'
             else:
                 params['grnfilterredir'] = redirects
-        return self._generator(api.PageGenerator, type_arg='random',
-                               namespaces=namespaces, total=total,
-                               g_content=content, **params)
+        yield from self._generator(api.PageGenerator, type_arg='random',
+                                   namespaces=namespaces, total=total,
+                                   g_content=content, **params)

     # Catalog of editpage error codes, for use in generating messages.
     # The block at the bottom are page related errors.
@@ -6435,9 +6435,8 @@
         assert special_page in param['type'], (
             '{0} not in {1}'.format(special_page, param['type']))

-        return self._generator(api.PageGenerator,
-                               type_arg='querypage', gqppage=special_page,
-                               total=total)
+        yield from self._generator(api.PageGenerator, type_arg='querypage',
+                                   gqppage=special_page, total=total)

     @deprecated_args(number='total', step=None, repeat=None)
     def longpages(self, total=None):
@@ -7201,7 +7200,7 @@
         gen = api.PageGenerator(site=self, generator='watchlistraw',
                                 expiry=expiry)
         gen.set_maximum_items(total)
-        return gen
+        yield from gen

     @need_extension('UrlShortener')
     def create_short_link(self, url):
@@ -8099,4 +8098,4 @@
         gen = api.APIGenerator('wbsearchentities', data_name='search',
                                site=self, parameters=parameters)
         gen.set_maximum_items(total)
-        return gen
+        yield from gen
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index ffbe993..e97ea01 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -1663,7 +1663,6 @@
                                                      protocol='https',
                                                      site=self.site,
                                                      total=1)
-        self.assertIsInstance(gen, pywikibot.data.api.PageGenerator)
         self.assertEqual(len(list(gen)), 1)



--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/626731
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: I62cf16579f2972f8158bb87ed6d7ccd9919e2b8a
Gerrit-Change-Number: 626731
Gerrit-PatchSet: 2
Gerrit-Owner: Matěj Suchánek <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to