Xqt has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1310022?usp=email )
Change subject: mypy: Fix typing errors in login.py
......................................................................
mypy: Fix typing errors in login.py
Change-Id: Id9f259c9f2f8de8edb62a7433cf3591b9a826902
---
M .pre-commit-config.yaml
M conftest.py
M pywikibot/login.py
3 files changed, 23 insertions(+), 16 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9e58af9..a9e7439 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -124,7 +124,7 @@
# They should be also used in conftest.py to exclude them from
non-voting mypy test.
files: |-
(?x)^pywikibot/(
-
(__metadata__|backports|config|cosmetic_changes|daemonize|diff|echo|exceptions|fixes|logging|plural|time|titletranslate)|
+
(__metadata__|backports|config|cosmetic_changes|daemonize|diff|echo|exceptions|fixes|logging|login|plural|time|titletranslate)|
(comms|data|families|specialbots)/__init__|
comms/eventstreams|
data/(api/(__init__|_generators|_optionset)|citoid|memento|wikistats)|
diff --git a/conftest.py b/conftest.py
index 7693fa1..780fb5a 100644
--- a/conftest.py
+++ b/conftest.py
@@ -38,7 +38,7 @@
EXCLUDE_PATTERN = re.compile(
r'(?:'
r'(__metadata__|backports|config|cosmetic_changes|daemonize|diff|echo|'
- r'exceptions|fixes|logging|plural|time|titletranslate)|'
+ r'exceptions|fixes|logging|login|plural|time|titletranslate)|'
r'(comms|data|families|specialbots)/__init__|'
r'comms/eventstreams|'
r'data/(api/(__init__|_generators|_optionset)|citoid|memento|wikistats)|'
diff --git a/pywikibot/login.py b/pywikibot/login.py
index 5a856cd..9ae59f6 100644
--- a/pywikibot/login.py
+++ b/pywikibot/login.py
@@ -14,7 +14,7 @@
from enum import IntEnum
from pathlib import Path
from textwrap import fill
-from typing import Any
+from typing import Any, cast
from warnings import warn
import pywikibot
@@ -98,7 +98,8 @@
:raises pywikibot.exceptions.NoUsernameError: No username is
configured for the requested site.
"""
- site = self.site = site or pywikibot.Site()
+ site = cast(pywikibot.site.APISite, site or pywikibot.Site())
+
if not user:
config_names = config.usernames
@@ -114,8 +115,11 @@
f"usernames['{site.family.name}']['{site.code}'] ="
" 'myUsername'"
)
+
self.password = password
self.login_name = self.username = user
+ self.site = site
+
if getattr(config, 'password_file', ''):
self.readPassword()
@@ -371,6 +375,8 @@
- https://www.mediawiki.org/wiki/Extension:EmailAuth
"""
+ _waituntil: datetime.datetime
+
# API login parameters mapping
mapping = {
'user': ('lgname', 'username'),
@@ -387,18 +393,14 @@
"""Get API keyword from mapping."""
return self.mapping[key][self.action != 'login']
- def _login_parameters(self, *, botpassword: bool = False
- ) -> dict[str, str]:
+ def _login_parameters(self, user: str, password: str) -> dict[str, str]:
"""Return login parameters."""
- if botpassword:
- self.action = 'login'
- else:
- self.action = 'clientlogin'
-
+ botpassword = '@' in user or '@' in password
+ self.action = 'login' if botpassword else 'clientlogin'
# prepare default login parameters
parameters = {'action': self.action,
- self.keyword('user'): self.login_name,
- self.keyword('password'): self.password}
+ self.keyword('user'): user,
+ self.keyword('password'): password}
if self.action == 'login':
parameters['lgtoken'] = self.site.tokens['login']
@@ -424,9 +426,12 @@
2FA login was implemented.
.. version-changed:: 10.2
Secondary authentication via email was implemented.
+ .. version-changed:: 11.6
+ Raise RuntimeError if login name or password were not set.
:raises RuntimeError: Unexpected API login response key or
- unexpected API login requests response
+ unexpected API login requests response, or login name or
+ password were not set.
:raises APIError: API login error
"""
if hasattr(self, '_waituntil') \
@@ -438,12 +443,14 @@
self.site._loginstatus = LoginStatus.IN_PROGRESS
+ if self.login_name is None or self.password is None:
+ raise RuntimeError("'login_name' or 'password' were not set")
+
# Bot passwords username contains @,
# otherwise @ is not allowed in usernames.
# @ in bot password is deprecated,
# but we don't want to break bots using it.
- parameters = self._login_parameters(
- botpassword='@' in self.login_name or '@' in self.password)
+ parameters = self._login_parameters(self.login_name, self.password)
# base login request
login_request = self.site._request(use_get=False,
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1310022?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Id9f259c9f2f8de8edb62a7433cf3591b9a826902
Gerrit-Change-Number: 1310022
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]