Dalba has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/323518

Change subject: login.py: Support specifying '*' for 'family' in user-config.py
......................................................................

login.py: Support specifying '*' for 'family' in user-config.py

In addition to a few minor changes in LoginManager.__init__,
readPassword was  also changed to support '@' in usernames.

Now users should be able to add the following lines to their
user-config.py file:
```
usernames['*']['fa'] = 'USERNAME'
password_file = r"secretsfile"
```
where `secretsfile` is a file containing:
```
("USERNAME@BotName", "Password obtained from Special:BotPasswords")
```
and login should work as expected.

Bug: T120334
Change-Id: I23749a4035c7d27186a92e67c6d6206e10326ff0
---
M pywikibot/login.py
1 file changed, 22 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/18/323518/1

diff --git a/pywikibot/login.py b/pywikibot/login.py
index e110c47..6842e08 100644
--- a/pywikibot/login.py
+++ b/pywikibot/login.py
@@ -91,8 +91,11 @@
         if user:
             self.username = user
         elif sysop:
+            config_names = config.sysopnames
             try:
-                family_sysopnames = config.sysopnames[self.site.family.name]
+                family_sysopnames = (
+                    config_names[self.site.family.name] or config_names['*']
+                )
                 self.username = family_sysopnames.get(self.site.code, None)
                 self.username = self.username or family_sysopnames['*']
             except KeyError:
@@ -104,11 +107,14 @@
                                  % {'fam_name': self.site.family.name,
                                     'wiki_code': self.site.code})
         else:
+            config_names = config.usernames
             try:
-                family_usernames = config.usernames[self.site.family.name]
+                family_usernames = (
+                    config_names[self.site.family.name] or config_names['*']
+                )
                 self.username = family_usernames.get(self.site.code, None)
                 self.username = self.username or family_usernames['*']
-            except:
+            except KeyError:
                 raise NoUsername(u"""\
 ERROR: Username for %(fam_name)s:%(wiki_code)s is undefined.
 If you have an account for that site, please add a line to user-config.py:
@@ -262,17 +268,19 @@
             # When the tuple is inverted the default family and code can be
             # easily appended which makes the next condition easier as it does
             # not need to know if it's using the default value or not.
-            entry = list(entry[::-1]) + [self.site.family.name,
-                                         self.site.code][len(entry) - 2:]
-
-            if (normalize_username(entry[1]) == self.username and
-                    entry[2] == self.site.family.name and
-                    entry[3] == self.site.code):
-                if isinstance(entry[0], basestring):
-                    self.password = entry[0]
-                elif isinstance(entry[0], BotPassword):
-                    self.password = entry[0].password
-                    self.login_name = entry[0].login_name(self.username)
+            entry_pass, entry_user, entry_family, entry_code = entry[::-1] +\
+                (self.site.family.name, self.site.code)[len(entry) - 2:]
+            normal_username = normalize_username(entry_user.partition('@')[0])
+            if (
+                normal_username == self.username and
+                entry_family == self.site.family.name and
+                entry_code == self.site.code
+            ):
+                self.login_name = entry_user
+                if isinstance(entry_pass, basestring):
+                    self.password = entry_pass
+                elif isinstance(entry_pass, BotPassword):
+                    self.password = entry_pass.password
                 else:
                     warn('Invalid password format', _PasswordFileWarning)
         password_f.close()

-- 
To view, visit https://gerrit.wikimedia.org/r/323518
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I23749a4035c7d27186a92e67c6d6206e10326ff0
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Dalba <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to