jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/731206 )
Change subject: pagegenerators: typing cleanup ......................................................................
pagegenerators: typing cleanup
mark `recurse` parameters as accepting bool or int, to match docs and implementation.
Use Iterator instead of Iterable for most return types. All iterators are iterables (has __iter__), but not all iterables are iterators (has __iter__ and __next__). Generator functions and expressions return iterators, and it's usually best to be specific about return types.
Change-Id: I8bf21d683ef746e3bb5a1de6ff80efe17ebccaae --- M pywikibot/pagegenerators.py 1 file changed, 39 insertions(+), 39 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py index f85c0f4..4579107 100644 --- a/pywikibot/pagegenerators.py +++ b/pywikibot/pagegenerators.py @@ -709,7 +709,7 @@ return cat, startfrom
def getCategoryGen(self, category: str, - recurse: bool = False, + recurse: Union[int, bool] = False, content: bool = False, gen_func: Optional[Callable] = None) -> Any: """ @@ -1413,7 +1413,7 @@ start: OPT_TIMESTAMP_TYPE = None, end: OPT_TIMESTAMP_TYPE = None, reverse: bool = False - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Generate Pages for specified modes of logevents.
@@ -1443,7 +1443,7 @@ def NewpagesPageGenerator(site: OPT_SITE_TYPE = None, namespaces: Tuple[int] = (0, ), total: Optional[int] = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Iterate Page objects for all new titles in a single namespace.
@@ -1537,7 +1537,7 @@
def CategorizedPageGenerator(category: pywikibot.page.Category, - recurse: bool = False, + recurse: Union[int, bool] = False, start: Optional[int] = None, total: Optional[int] = None, content: bool = False, @@ -1568,7 +1568,7 @@
def SubCategoriesPageGenerator(category: 'pywikibot.page.Category', - recurse: bool = False, + recurse: Union[int, bool] = False, start: Optional[int] = None, total: Optional[int] = None, content: bool = False @@ -1717,7 +1717,7 @@ [Iterable['pywikibot.page.Page']], Iterable['pywikibot.page.Page']]] = _filter_unique_pages - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Yield unique pages edited by user:username.
:param total: Maximum number of pages to retrieve in total @@ -1745,7 +1745,7 @@ NAMESPACE_OR_STR_TYPE, Sequence[NAMESPACE_OR_STR_TYPE]], site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ A generator yielding pages from another generator in given namespaces.
@@ -1781,7 +1781,7 @@
def PageTitleFilterPageGenerator(generator: Iterable['pywikibot.page.Page'], ignore_list: Dict[str, Dict[str, str]] - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield only those pages are not listed in the ignore list.
@@ -1808,7 +1808,7 @@ def RedirectFilterPageGenerator(generator: Iterable['pywikibot.page.Page'], no_redirects: bool = True, show_filtered: bool = False - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield pages from another generator that are redirects or not.
@@ -1879,7 +1879,7 @@ prop: str, claim: str, qualifiers: Optional[Dict[str, str]] = None, - negate: bool = False) -> Iterable['pywikibot.page.Page']: + negate: bool = False) -> Iterator['pywikibot.page.Page']: """ Yield all ItemPages which contain certain claim in a property.
@@ -1967,7 +1967,7 @@ regex: PATTERN_STR_OR_SEQ_TYPE, quantifier: str = 'any', ignore_namespace: bool = True - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Yield pages from another generator whose title matches regex.
Uses regex option re.IGNORECASE depending on the quantifier parameter. @@ -2001,7 +2001,7 @@ generator: Iterable['pywikibot.page.Page'], regex: PATTERN_STR_OR_SEQ_TYPE, quantifier: str = 'any' - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Yield pages from another generator whose body matches regex.
Uses regex option re.IGNORECASE depending on the quantifier parameter. @@ -2015,7 +2015,7 @@
def QualityFilterPageGenerator(generator: Iterable['pywikibot.page.Page'], quality: List[int] - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Wrap a generator to filter pages according to quality levels.
@@ -2037,7 +2037,7 @@ def CategoryFilterPageGenerator(generator: Iterable['pywikibot.page.Page'], category_list: Sequence['pywikibot.page.Category'] - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Wrap a generator to filter pages by categories specified.
@@ -2061,7 +2061,7 @@ first_edit_start: Optional[datetime.datetime] = None, first_edit_end: Optional[datetime.datetime] = None, show_filtered: bool = False -) -> Iterable['pywikibot.page.Page']: +) -> Iterator['pywikibot.page.Page']: """ Wrap a generator to filter pages outside last or first edit range.
@@ -2124,7 +2124,7 @@ skip: bool = False, max_revision_depth: Optional[int] = None, show_filtered: bool = False - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Generator which will yield Pages modified by username.
@@ -2157,13 +2157,13 @@
@deprecated('itertools.chain(*iterables)', since='20180513') def CombinedPageGenerator(generators: Sequence[Iterable['pywikibot.page.Page']] - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Yield from each iterable until exhausted, then proceed with the next.""" return itertools.chain(*generators) # pragma: no cover
def PageClassGenerator(generator: Iterable['pywikibot.page.Page'] - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield pages from another generator as Page subclass objects.
@@ -2183,7 +2183,7 @@
def PageWithTalkPageGenerator(generator: Iterable['pywikibot.page.Page'], return_talk_only: bool = False - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Yield pages and associated talk pages from another generator.
Only yields talk pages if the original generator yields a non-talk page, @@ -2202,7 +2202,7 @@ key_func: Callable[[Any], Any] = lambda x: x, sleep_duration: int = 60, total: Optional[int] = None, - **kwargs: Any) -> Iterable['pywikibot.page.Page']: + **kwargs: Any) -> Iterator['pywikibot.page.Page']: """Yield items in live time.
The provided generator must support parameter 'start', 'end', @@ -2252,7 +2252,7 @@
def PreloadingGenerator(generator: Iterable['pywikibot.page.Page'], groupsize: int = 50 - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield preloaded pages taken from another generator.
@@ -2280,7 +2280,7 @@
def DequePreloadingGenerator(generator: Iterable['pywikibot.page.Page'], groupsize: int = 50 - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Preload generator of type DequeGenerator.""" assert isinstance(generator, DequeGenerator), \ 'generator must be a DequeGenerator object' @@ -2295,7 +2295,7 @@
def PreloadingEntityGenerator(generator: Iterable['pywikibot.page.Page'], groupsize: int = 50 - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield preloaded pages taken from another generator.
@@ -2322,7 +2322,7 @@
def NewimagesPageGenerator(total: Optional[int] = None, site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ New file generator.
@@ -2336,7 +2336,7 @@
def WikibaseItemGenerator(gen: Iterable['pywikibot.page.Page'] - ) -> Iterable['pywikibot.page.ItemPage']: + ) -> Iterator['pywikibot.page.ItemPage']: """ A wrapper generator used to yield Wikibase items of another generator.
@@ -2358,7 +2358,7 @@ def WikibaseItemFilterPageGenerator(generator: Iterable['pywikibot.page.Page'], has_item: bool = True, show_filtered: bool = False - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ A wrapper generator used to exclude if page has a Wikibase item or not.
@@ -2539,7 +2539,7 @@
def AncientPagesPageGenerator(total: int = 100, # pragma: no cover site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Ancient page generator.
@@ -2568,7 +2568,7 @@
def LongPagesPageGenerator(total: int = 100, site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Long page generator.
@@ -2582,7 +2582,7 @@
def ShortPagesPageGenerator(total: int = 100, site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Short page generator.
@@ -2673,7 +2673,7 @@
def LiveRCPageGenerator(site: OPT_SITE_TYPE = None, total: Optional[int] = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield pages from a socket.io RC stream.
@@ -2732,7 +2732,7 @@ self.site = site self._google_query = None
- def queryGoogle(self, query: str) -> Any: + def queryGoogle(self, query: str) -> Iterator[Any]: """ Perform a query using python package 'google'.
@@ -2776,7 +2776,7 @@
def MySQLPageGenerator(query: str, site: OPT_SITE_TYPE = None, verbose: Optional[bool] = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Yield a list of pages based on a MySQL query.
@@ -2886,7 +2886,7 @@
def YearPageGenerator(start: int = 1, end: int = 2050, site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Year page generator.
@@ -2906,7 +2906,7 @@
def DayPageGenerator(start_month: int = 1, end_month: int = 12, site: OPT_SITE_TYPE = None, year: int = 2000 - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """ Day page generator.
@@ -2926,7 +2926,7 @@
def WikidataPageFromItemGenerator(gen: Iterable['pywikibot.page.ItemPage'], site: 'pywikibot.site.BaseSite' - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Generate pages from site based on sitelinks of item pages.
:param gen: generator of :py:obj:`pywikibot.ItemPage` @@ -2955,7 +2955,7 @@ endpoint: Optional[str] = None, entity_url: Optional[str] = None, result_type: Any = set - ) -> Iterable['pywikibot.page.Page']: + ) -> Iterator['pywikibot.page.Page']: """Generate pages that result from the given SPARQL query.
:param query: the SPARQL query string. @@ -2989,7 +2989,7 @@ language: Optional[str] = None, total: Optional[int] = None, site: OPT_SITE_TYPE = None - ) -> Iterable['pywikibot.page.ItemPage']: + ) -> Iterator['pywikibot.page.ItemPage']: """ Generate pages that contain the provided text.
@@ -3073,7 +3073,7 @@
return query_final
- def query(self) -> Iterable[Dict[str, Any]]: + def query(self) -> Iterator[Dict[str, Any]]: """Query PetScan.""" url = 'https://petscan.wmflabs.org'
@@ -3091,7 +3091,7 @@ raw_pages = j['*'][0]['a']['*'] yield from raw_pages
- def __iter__(self) -> Iterable['pywikibot.page.Page']: + def __iter__(self) -> Iterator['pywikibot.page.Page']: for raw_page in self.query(): page = pywikibot.Page(self.site, raw_page['title'], int(raw_page['namespace']))