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,9 +54,13 @@ 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:
try:
host = urlparse.urlsplit(resource).hostname host = urlparse.urlsplit(resource).hostname
for func in (_password_from_cache, _password_from_command, for func in (_password_from_cache, _password_from_command,
_password_from_netrc, _password_from_keyring, _password_from_netrc, _password_from_keyring,
@ -66,7 +70,10 @@ def get_password(username, resource, _lock=threading.Lock()):
logger.debug('Got password for {} from {}' logger.debug('Got password for {} from {}'
.format(username, func.__doc__)) .format(username, func.__doc__))
break break
except (click.Abort, KeyboardInterrupt) as e:
password_cache[(username, host)] = e
raise
else:
password_cache[(username, host)] = password password_cache[(username, host)] = password
return password return password