jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/428148 )
Change subject: CategorizedPageGenerator: Use startprefix parameter of category.articles ......................................................................
CategorizedPageGenerator: Use startprefix parameter of category.articles
The previous method of passing `start` to `startsort` was wrong. It does not work as expected because `startsort` needs to be a binary string.[1]
For older versions of MediaWiki implement a workaround by iterating over all category.articles. This is inefficient, but no better way found.
Remove `kwargs['sortby'] = 'sortkey'`, 'sortkey' is API's default.
[1]: https://www.mediawiki.org/wiki/API:Categorymembers
Bug: T74101 Bug: T143120 Change-Id: I7eece66e258659f84479fbdd1094a8df9ee69479 --- M pywikibot/pagegenerators.py 1 file changed, 12 insertions(+), 2 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py index e503671..9071e1a 100644 --- a/pywikibot/pagegenerators.py +++ b/pywikibot/pagegenerators.py @@ -56,6 +56,7 @@ ) from pywikibot.logentries import LogEntryFactory from pywikibot.proofreadpage import ProofreadPage +from pywikibot.tools import MediaWikiVersion
if sys.version_info[0] > 2: basestring = (str, ) @@ -1386,8 +1387,17 @@ 'content': content, 'namespaces': namespaces, } if start: - kwargs['sortby'] = 'sortkey' - kwargs['startsort'] = start + if category.site.version() < MediaWikiVersion('1.18'): + kwargs.pop('total', None) + count = 0 + for article in category.articles(**kwargs): + if article.title() >= start: + count += 1 + yield article + if count == total: + return + return + kwargs['startprefix'] = start for a in category.articles(**kwargs): yield a
pywikibot-commits@lists.wikimedia.org