Merge pull request #10033 from snook92/multi_cred_index_url

This commit is contained in:
Pradyun Gedam 2021-06-11 11:59:36 +01:00 committed by GitHub
commit a90dd11e3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 6 deletions

1
news/3931.bugfix.rst Normal file
View File

@ -0,0 +1 @@
Prefer credentials from the URL over the previously-obtained credentials from URLs of the same domain, so it is possible to use different credentials on the same index server for different ``--extra-index-url`` options.

View File

@ -170,13 +170,12 @@ class MultiDomainBasicAuth(AuthBase):
"""
url, netloc, _ = split_auth_netloc_from_url(original_url)
# Use any stored credentials that we have for this netloc
username, password = self.passwords.get(netloc, (None, None))
# Try to get credentials from original url
username, password = self._get_new_credentials(original_url)
# If credentials not found, use any stored credentials for this netloc
if username is None and password is None:
# No stored credentials. Acquire new credentials without prompting
# the user. (e.g. from netrc, keyring, or the URL itself)
username, password = self._get_new_credentials(original_url)
username, password = self.passwords.get(netloc, (None, None))
if username is not None or password is not None:
# Convert the username and password if they're None, so that

View File

@ -47,11 +47,29 @@ def test_get_credentials_parses_correctly(input_url, url, username, password):
)
def test_get_credentials_uses_cached_credentials():
def test_get_credentials_not_to_uses_cached_credentials():
auth = MultiDomainBasicAuth()
auth.passwords['example.com'] = ('user', 'pass')
got = auth._get_url_and_credentials("http://foo:bar@example.com/path")
expected = ('http://example.com/path', 'foo', 'bar')
assert got == expected
def test_get_credentials_not_to_uses_cached_credentials_only_username():
auth = MultiDomainBasicAuth()
auth.passwords['example.com'] = ('user', 'pass')
got = auth._get_url_and_credentials("http://foo@example.com/path")
expected = ('http://example.com/path', 'foo', '')
assert got == expected
def test_get_credentials_uses_cached_credentials():
auth = MultiDomainBasicAuth()
auth.passwords['example.com'] = ('user', 'pass')
got = auth._get_url_and_credentials("http://example.com/path")
expected = ('http://example.com/path', 'user', 'pass')
assert got == expected