jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1022453?usp=email )

Change subject: [bugfix] circumvent problems with unique and prefix parameters 
(T359425)
......................................................................

[bugfix] circumvent problems with unique and prefix parameters (T359425)

Bug: T359427
Change-Id: Iee4c51f934efc446b493c5c98afe1d0f103e38a5
---
M pywikibot/site/_generators.py
M tests/site_generators_tests.py
2 files changed, 24 insertions(+), 11 deletions(-)

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




diff --git a/pywikibot/site/_generators.py b/pywikibot/site/_generators.py
index a1be9e6..846e626 100644
--- a/pywikibot/site/_generators.py
+++ b/pywikibot/site/_generators.py
@@ -975,7 +975,7 @@

     def alllinks(
         self,
-        start: str = '!',
+        start: str = '',
         prefix: str = '',
         namespace: SingleNamespaceType = 0,
         unique: bool = False,
@@ -1013,20 +1013,30 @@
         algen = self._generator(api.ListGenerator, type_arg='alllinks',
                                 namespaces=namespace, alfrom=start,
                                 total=total)
-        if prefix:
-            algen.request['alprefix'] = prefix
         if fromids:
             algen.request['alprop'] = 'title|ids'
-        if not unique:
-            pass
-        elif self.mw_version < '1.43':
-            algen.request['alunique'] = True
+
+        # circumvent problems with unique and prefix due to T359425 and T359427
+        if self.mw_version < '1.43':
+            if prefix:
+                algen.request['alprefix'] = prefix
+                prefix = ''  # don't break the loop later
+            if start:
+                algen.request['alstart'] = start
+            algen.request['alunique'] = unique
         else:
-            # unique filter for mw >= 1.43, use (title, ns) as key
-            # See: T359425, T359427
-            algen = filter_unique(algen, key=lambda x: (x['title'], x['ns']))
+            if prefix:
+                algen.request['alstart'] = prefix
+            elif start:
+                algen.request['alstart'] = start
+            if unique:
+                algen = filter_unique(
+                    algen, key=lambda link: (link['title'], link['ns']))
+
         for link in algen:
             p = pywikibot.Page(self, link['title'], link['ns'])
+            if prefix and p.title() > prefix:  # T359425, T359427
+                break
             if fromids:
                 p._fromid = link['fromid']  # type: ignore[attr-defined]
             yield p
diff --git a/tests/site_generators_tests.py b/tests/site_generators_tests.py
index 5ca8748..3fae8e7 100755
--- a/tests/site_generators_tests.py
+++ b/tests/site_generators_tests.py
@@ -358,7 +358,10 @@
             for page in mysite.alllinks(prefix='Fix', total=5):
                 self.assertIsInstance(page, pywikibot.Page)
                 self.assertEqual(page.namespace(), 0)
-                self.assertTrue(page.title().startswith('Fix'))
+                self.assertTrue(
+                    page.title().startswith('Fix'),
+                    msg=f"{page.title()} does not start with 'Fix'"
+                )

         with self.subTest(msg='Test namespace parameter'):
             for page in mysite.alllinks(namespace=1, total=5):

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1022453?usp=email
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: Iee4c51f934efc446b493c5c98afe1d0f103e38a5
Gerrit-Change-Number: 1022453
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to