jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/516994 )
Change subject: feat(TokenWallet): login automatically ......................................................................
feat(TokenWallet): login automatically
The following script used to fail with "AssertionError: User must login in this site".
from pywikibot import Site print(Site().tokens['edit'])
This patch makes TokenWallet.load_tokens and TokenWallet.__getitem__ login automatically if not already.
Change-Id: I3f5c8fa873aa447b1d7679cbfc9f004af2ffdc93 --- M pywikibot/site.py 1 file changed, 8 insertions(+), 3 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py index 18a745d..d212853 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -1740,7 +1740,10 @@ """Container for tokens."""
def __init__(self, site): - """Initializer.""" + """Initializer. + + @type site: pywikibot.site.APISite + """ self.site = site self._tokens = {} self.failed_cache = set() # cache unavailable tokens. @@ -1755,7 +1758,8 @@ in one request. @type all: bool """ - assert self.site.user(), 'User must login in this site' + if self.site.user() is None: + self.site.login()
self._tokens.setdefault(self.site.user(), {}).update( self.site.get_tokens(types, all=all)) @@ -1771,7 +1775,8 @@
def __getitem__(self, key): """Get token value for the given key.""" - assert self.site.user(), 'User must login in this site' + if self.site.user() is None: + self.site.login()
user_tokens = self._tokens.setdefault(self.site.user(), {}) # always preload all for users without tokens