jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/611425 )
Change subject: [4.0] Remove Python 2 related code in pagegenerators.py ......................................................................
[4.0] Remove Python 2 related code in pagegenerators.py
Change-Id: I376d19b712b27db7a7d56601c725f5b8391de4d7 --- M pywikibot/pagegenerators.py 1 file changed, 26 insertions(+), 45 deletions(-)
Approvals: Zhuyifei1999: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py index 1328bd4..a37e88b 100644 --- a/pywikibot/pagegenerators.py +++ b/pywikibot/pagegenerators.py @@ -18,8 +18,6 @@ # # Distributed under the terms of the MIT license. # -from __future__ import absolute_import, division, unicode_literals - import calendar import codecs import datetime @@ -30,6 +28,7 @@
from datetime import timedelta from functools import partial +from itertools import zip_longest from requests.exceptions import ReadTimeout from warnings import warn
@@ -57,12 +56,7 @@ UnknownExtension, ) from pywikibot.proofreadpage import ProofreadPage -from pywikibot.tools import PY2, UnicodeType
-if not PY2: - from itertools import zip_longest -else: - from itertools import izip_longest as zip_longest
_logger = 'pagegenerators'
@@ -423,7 +417,7 @@ filter_unique, key=lambda page: '{}:{}:{}'.format(*page._cmpkey()))
-class GeneratorFactory(object): +class GeneratorFactory:
"""Process command line arguments and return appropriate page generator.
@@ -674,7 +668,7 @@ """ total = None start = start or None # because start might be an empty string - if isinstance(start, UnicodeType) and len(start) == 8: + if isinstance(start, str) and len(start) == 8: start = pywikibot.Timestamp.strptime(start, '%Y%m%d') elif start is not None: try: @@ -1209,11 +1203,7 @@ if value == '': value = None
- try: - handler = getattr(self, '_handle_' + arg[1:], None) - except UnicodeEncodeError: - # getattr() on py2 does implicit unicode -> str - return False + handler = getattr(self, '_handle_' + arg[1:], None) if handler: handler_result = handler(value) if isinstance(handler_result, bool): @@ -1545,8 +1535,7 @@ return return kwargs['startprefix'] = start - for a in category.articles(**kwargs): - yield a + yield from category.articles(**kwargs)
@deprecated_args(step=None) @@ -1633,7 +1622,7 @@
def PagesFromTitlesGenerator(iterable, site=None): """ - Generate pages from the titles (unicode strings) yielded by iterable. + Generate pages from the titles (strings) yielded by iterable.
@param site: Site for generator results. @type site: L{pywikibot.site.BaseSite} @@ -1641,7 +1630,7 @@ if site is None: site = pywikibot.Site() for title in iterable: - if not isinstance(title, UnicodeType): + if not isinstance(title, str): break yield pywikibot.Page(pywikibot.Link(title, site))
@@ -1783,7 +1772,7 @@ % page)
-class ItemClaimFilter(object): +class ItemClaimFilter:
"""Item claim filter."""
@@ -1876,7 +1865,7 @@ % page)
-class RegexFilter(object): +class RegexFilter:
"""Regex filter."""
@@ -1902,7 +1891,7 @@ regex = [regex] # Test if regex is already compiled. # We assume that all list components have the same type - if isinstance(regex[0], UnicodeType): + if isinstance(regex[0], str): regex = [re.compile(r, flag) for r in regex] return regex
@@ -2093,7 +2082,7 @@ @type show_filtered: bool """ if timestamp: - if isinstance(timestamp, UnicodeType): + if isinstance(timestamp, str): ts = pywikibot.Timestamp.fromtimestampformat(timestamp) else: ts = timestamp @@ -2190,8 +2179,8 @@ else: break pywikibot.sleep(sleep_duration) - for item in list(filtered_generator())[::-1]: - yield item + + yield from list(filtered_generator())[::-1]
@deprecated_args(pageNumber='groupsize', step='groupsize', lookahead=None) @@ -2213,12 +2202,11 @@ if len(sites[site]) >= groupsize: # if this site is at the groupsize, process it group = sites.pop(site) - for i in site.preloadpages(group, groupsize): - yield i + yield from site.preloadpages(group, groupsize) + for site, pages in sites.items(): # process any leftover sites that never reached the groupsize - for i in site.preloadpages(pages, groupsize): - yield i + yield from site.preloadpages(pages, groupsize)
@deprecated_args(step='groupsize') @@ -2232,8 +2220,7 @@ if not page_count: return
- for page in PreloadingGenerator(generator, page_count): - yield page + yield from PreloadingGenerator(generator, page_count)
@deprecated_args(step='groupsize') @@ -2256,13 +2243,12 @@ # if this site is at the groupsize, process it group = sites.pop(site) repo = site.data_repository() - for i in repo.preload_entities(group, groupsize): - yield i + yield from repo.preload_entities(group, groupsize) + for site, pages in sites.items(): # process any leftover sites that never reached the groupsize repo = site.data_repository() - for i in repo.preload_entities(pages, groupsize): - yield i + yield from repo.preload_entities(pages, groupsize)
@deprecated_args(number='total', step=None, repeat=None) @@ -2667,7 +2653,7 @@ # following classes just ported from version 1 without revision; not tested
-class GoogleSearchPageGenerator(object): +class GoogleSearchPageGenerator:
""" Page generator using Google search results. @@ -2719,8 +2705,7 @@ 'To install, please run: pip install google.') exit(1) pywikibot.warning('Please read http://www.google.com/accounts/TOS') - for url in google.search(query): - yield url + yield from google.search(query)
def __iter__(self): """Iterate results.""" @@ -2845,10 +2830,7 @@ def __next__(self): """Get next Page.""" while True: - try: - entry = next(self.parser) - except StopIteration: - raise + entry = next(self.parser) if self.skipping: if entry.title < self.start: continue @@ -2867,7 +2849,7 @@
def __next__(self): """Get next Page from dump and remove the text.""" - page = super(XMLDumpPageGenerator, self).__next__() + page = super().__next__() del page.text return page
@@ -3002,7 +2984,7 @@ return (pywikibot.ItemPage(repo, item['id']) for item in data)
-class PetScanPageGenerator(object): +class PetScanPageGenerator: """Queries PetScan (https://petscan.wmflabs.org/) to generate pages."""
def __init__(self, categories, subset_combination=True, namespaces=None, @@ -3075,8 +3057,7 @@ 'received {0} status from {1}'.format(req.status, req.uri)) j = json.loads(req.text) raw_pages = j['*'][0]['a']['*'] - for raw_page in raw_pages: - yield raw_page + yield from raw_pages
def __iter__(self): for raw_page in self.query():
pywikibot-commits@lists.wikimedia.org