I am unable to use a private index using credentials stored in my keyring if I explicitly provide the username in the index URL. This seems to be an issue specifically with SecretService keyring back-end, and with keyring
v19.2 and above (Ubuntu 20.04 ships with keyring
18.0.1). In addition, everything works fine if I don't specify the username in the index URL (and of course, it works fine if I pass username and password in the index URL).
It seems as if keyring
returns a credentials object regardless of whether it found a matching entry and a truthy password, as opposed to the default behaviour of returning a falsy if the password is falsy, in keyring.get_credential
.
$ keyring --list-backends
keyring.backends.chainer.ChainerBackend (priority: -10)
keyring.backends.fail.Keyring (priority: 0)
keyring.backends.SecretService.Keyring (priority: 5)
Store username and password in keyring for index hostname
echo pass | keyring set pypi.myorg.com user
Attempt to download a package, providing the username in the index URL
pip3 install myorg-mypackage --extra-index-url https://[email protected]/
ERROR: Could not find a version that satisfies the requirement myorg-mypackage (from versions: none)
ERROR: No matching distribution found for myorg-mypackage
Can you write up a reproducer for this issue with keyring in isolation - show where the true/false expectation is missed - and file what with the keyring project?
The fix for this issue might be bumping the version of keyring we have vendored in pip.
Does pip vendor keyring?
No, that's sort of the whole point of what's wrong with the keyring integration, IMO.
Most helpful comment
No, that's sort of the whole point of what's wrong with the keyring integration, IMO.