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]

Reply via email to