jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/630237 )
Change subject: Revert "Always return raw generators from APISite methods, not objects" ......................................................................
Revert "Always return raw generators from APISite methods, not objects"
This reverts commit 8ec067010722940f121ce4b97890f39f3d15df18.
Reason for revert: The main reason is that pagegenerators does not work with this change. getCombinedGenerator enables namespaces filtering. NamespaceFilterPageGenerator loads all items even they are not needed which may need a lot of time. Site.allpages will always fail if no namespaces is given to the generator. You cannot specify a page generator in the current way for that patch
Bug: T263916 Change-Id: I459102e9a0f1e0672d1a54eeb33b861c04201d51 --- M pywikibot/site/__init__.py M tests/pagegenerators_tests.py 2 files changed, 48 insertions(+), 46 deletions(-)
Approvals: JJMC89: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/site/__init__.py b/pywikibot/site/__init__.py index eadc2a4..8a4200e 100644 --- a/pywikibot/site/__init__.py +++ b/pywikibot/site/__init__.py @@ -3440,9 +3440,8 @@ namespaces=namespaces, content=content ) - yield from itertools.chain(*genlist.values()) - else: - yield from blgen + return itertools.chain(*genlist.values()) + return blgen
@deprecated_args(step=None, filterRedirects='filter_redirects') def page_embeddedin(self, page, *, filter_redirects=None, namespaces=None, @@ -3472,9 +3471,9 @@ if filter_redirects is not None: eiargs['geifilterredir'] = ('redirects' if filter_redirects else 'nonredirects') - yield from self._generator(api.PageGenerator, type_arg='embeddedin', - namespaces=namespaces, total=total, - g_content=content, **eiargs) + return self._generator(api.PageGenerator, type_arg='embeddedin', + namespaces=namespaces, total=total, + g_content=content, **eiargs)
@deprecated_args( step=None, followRedirects='follow_redirects', @@ -3545,10 +3544,10 @@ else: pltitle = page.title(with_section=False).encode(self.encoding()) plargs['titles'] = pltitle - yield from self._generator( - api.PageGenerator, type_arg='links', namespaces=namespaces, - total=total, g_content=content, redirects=follow_redirects, - **plargs) + return 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) @@ -3567,8 +3566,9 @@ else: clargs['titles'] = page.title( with_section=False).encode(self.encoding()) - yield from self._generator(api.PageGenerator, type_arg='categories', - total=total, g_content=content, **clargs) + return 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()) - yield from self._generator(api.PageGenerator, type_arg='images', - titles=imtitle, total=total, - g_content=content) + return 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()) - yield from self._generator(api.PageGenerator, type_arg='templates', - titles=tltitle, namespaces=namespaces, - total=total, g_content=content) + return 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'")
- yield from self._generator(api.PageGenerator, namespaces=namespaces, - total=total, g_content=content, **cmargs) + return 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' - yield from apgen + return 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' - yield from acgen + return 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 - yield from augen + return 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 - yield from aigen + return 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' - yield from fagen + return 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 - yield from bkgen + return 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 - yield from self._generator(api.PageGenerator, type_arg='exturlusage', - geuquery=url, geuprotocol=protocol, - namespaces=namespaces, total=total, - g_content=content) + return 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') - yield from self._generator(api.PageGenerator, type_arg='imageusage', - namespaces=namespaces, total=total, - g_content=content, **iuargs) + return 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
- yield from legen + return 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 - yield from rcgen + return 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 - yield from srgen + return 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 - yield from ucgen + return 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) - yield from wlgen + return 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}) - yield from usgen + return usgen
@deprecated_args(step=None) def randompages(self, total=None, namespaces=None, @@ -4894,9 +4894,9 @@ params['grnredirect'] = redirects == 'redirects' else: params['grnfilterredir'] = redirects - yield from self._generator(api.PageGenerator, type_arg='random', - namespaces=namespaces, total=total, - g_content=content, **params) + return 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,8 +6435,9 @@ assert special_page in param['type'], ( '{0} not in {1}'.format(special_page, param['type']))
- yield from self._generator(api.PageGenerator, type_arg='querypage', - gqppage=special_page, total=total) + return 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): @@ -7200,7 +7201,7 @@ gen = api.PageGenerator(site=self, generator='watchlistraw', expiry=expiry) gen.set_maximum_items(total) - yield from gen + return gen
@need_extension('UrlShortener') def create_short_link(self, url): @@ -8098,4 +8099,4 @@ gen = api.APIGenerator('wbsearchentities', data_name='search', site=self, parameters=parameters) gen.set_maximum_items(total) - yield from gen + return gen diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py index e97ea01..ffbe993 100755 --- a/tests/pagegenerators_tests.py +++ b/tests/pagegenerators_tests.py @@ -1663,6 +1663,7 @@ protocol='https', site=self.site, total=1) + self.assertIsInstance(gen, pywikibot.data.api.PageGenerator) self.assertEqual(len(list(gen)), 1)
pywikibot-commits@lists.wikimedia.org