jenkins-bot submitted this change.

View Change


Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
[bugfix] Use a default result for allusers() if next() leads to StopIteration

- use a default result for allusers() if next() leads to StopIteration
- catch the NoUsernameError exception in login.py script and only
show the exception message instead of raising it
- fix error messages handling

Bug: T326063
Change-Id: Ia41bc9d80fcfd2e9e88542201236ceab87c6508c
---
M pywikibot/login.py
M pywikibot/scripts/login.py
2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/pywikibot/login.py b/pywikibot/login.py
index 1b1b661..e284b98 100644
--- a/pywikibot/login.py
+++ b/pywikibot/login.py
@@ -1,6 +1,6 @@
"""Library to log the bot in to a wiki account."""
#
-# (C) Pywikibot team, 2003-2022
+# (C) Pywikibot team, 2003-2023
#
# Distributed under the terms of the MIT license.
#
@@ -133,7 +133,7 @@

try:
data = self.site.allusers(start=main_username, total=1)
- user = next(data)
+ user = next(data, {'name': None})
except APIError as e:
if e.code == 'readapidenied':
pywikibot.warning("Could not check user '{}' exists on {}"
@@ -294,15 +294,16 @@
self.login_to_site()
except APIError as e:
error_code = e.code
- pywikibot.error(f'Login failed ({error_code}).')
+
+ # TODO: investigate other unhandled API codes
if error_code in self._api_error:
- error_msg = 'Username "{}" {} on {}'.format(
+ error_msg = 'Username {!r} {} on {}'.format(
self.login_name, self._api_error[error_code], self.site)
if error_code in ('Failed', 'FAIL'):
- error_msg += f'\n.{e.info}'
+ error_msg += f'.\n{e.info}'
raise NoUsernameError(error_msg)

- # TODO: investigate other unhandled API codes (bug T75539)
+ pywikibot.error(f'Login failed ({error_code}).')
if retry:
self.password = None
return self.login(retry=False)
diff --git a/pywikibot/scripts/login.py b/pywikibot/scripts/login.py
index f47bc20..cbdd9a2 100755
--- a/pywikibot/scripts/login.py
+++ b/pywikibot/scripts/login.py
@@ -47,7 +47,7 @@
moved to :mod:`pywikibot.scripts` folder
"""
#
-# (C) Pywikibot team, 2003-2022
+# (C) Pywikibot team, 2003-2023
#
# Distributed under the terms of the MIT license.
#
@@ -58,7 +58,7 @@
import pywikibot
from pywikibot import config
from pywikibot.backports import Tuple, nullcontext
-from pywikibot.exceptions import SiteDefinitionError
+from pywikibot.exceptions import NoUsernameError, SiteDefinitionError
from pywikibot.login import OauthLoginManager


@@ -109,7 +109,10 @@
if logout:
site.logout()
else:
- site.login(autocreate=autocreate)
+ try:
+ site.login(autocreate=autocreate)
+ except NoUsernameError as e:
+ pywikibot.error(e)

user = site.user()
if user:

To view, visit change 874023. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ia41bc9d80fcfd2e9e88542201236ceab87c6508c
Gerrit-Change-Number: 874023
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged