Don't ask for same password twice

This commit is contained in:
Markus Unterwaditzer 2015-08-16 19:45:39 +02:00
parent 6e1846ea9d
commit 1aa6812bad

View file

@ -54,21 +54,28 @@ def get_password(username, resource, _lock=threading.Lock()):
def _password_from_cache(username, host): def _password_from_cache(username, host):
'''internal cache''' '''internal cache'''
return password_cache.get((username, host), None) rv = password_cache.get((username, host), None)
if isinstance(rv, BaseException):
raise rv
return rv
with _lock: with _lock:
host = urlparse.urlsplit(resource).hostname try:
for func in (_password_from_cache, _password_from_command, host = urlparse.urlsplit(resource).hostname
_password_from_netrc, _password_from_keyring, for func in (_password_from_cache, _password_from_command,
_password_from_prompt): _password_from_netrc, _password_from_keyring,
password = func(username, host) _password_from_prompt):
if password is not None: password = func(username, host)
logger.debug('Got password for {} from {}' if password is not None:
.format(username, func.__doc__)) logger.debug('Got password for {} from {}'
break .format(username, func.__doc__))
break
password_cache[(username, host)] = password except (click.Abort, KeyboardInterrupt) as e:
return password password_cache[(username, host)] = e
raise
else:
password_cache[(username, host)] = password
return password
def _password_from_prompt(username, host): def _password_from_prompt(username, host):