-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Closed
Labels
kind/bugSomething isn't working as expectedSomething isn't working as expected
Description
- [ x ] I am on the latest Poetry version.
- [ x ] I have searched the issues of this repo and believe that this is not a duplicate.
- [ x ] If an exception occurs when executing a command, I executed it again in debug mode (
-vvvoption).
- OS version and name: *nix
- Poetry version: Poetry version 1.0.0
Issue
I'm failing to use env. variables to set custom pypi credentials.
My pyproject.toml contains private pypi's like this:
[[tool.poetry.source]]
url = "https://XXXXX/nexus/repository/pypi-central/simple"
name = "nexus"I'm running this script:
export POETRY_HTTP_BASIC_NEXUS_USERNAME=****
export POETRY_HTTP_BASIC_NEXUS_PASSWORD=****
poetry installand it fails with:
[EnvCommandError]
Command ['/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/bin/pip', 'install', '--no-deps', '--index-url', 'https://XXXXX/nexus/repository/pypi-central/simple', '--extra-index-url', 'https://pypi.org/', 'six==1.12.0'] errored with the following return code 2, and output:
Looking in indexes: https://RESOLVED-XXXXX/nexus/repository/pypi-central/simple, https://****:****@XXXXX/nexus/repository/epd-pypi/simple, https://pypi.org/
Collecting six==1.12.0
....
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/download.py", line 386, in handle_401
username, password, save = self._prompt_for_password(parsed.netloc)
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/download.py", line 358, in _prompt_for_password
username = ask_input("User for %s: " % netloc)
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/utils/misc.py", line 281, in ask_input
return input(message)
EOFError: EOF when reading a line
User for XXXXX:
I investigated the code and it seems that credentials are never acquired separately from config, but always as a pair. That means that code never ask for http-basic.nexus.password and http-basic.nexus.username, but for http-basic.nexus then the value is used as a dict (search for password_manager.get_http_auth usage). I could not find single test case, so I wrote one, fill free to use it:
diff --git a/tests/config/test_config.py b/tests/config/test_config.py
index 07373ad..72ad236 100644
--- a/tests/config/test_config.py
+++ b/tests/config/test_config.py
@@ -14,3 +14,13 @@ def test_config_get_from_environment_variable(config, environ):
os.environ["POETRY_VIRTUALENVS_CREATE"] = "false"
assert not config.get("virtualenvs.create")
+
+def test_basic_http_credentials_through_env(config, environ):
+ assert config.get("http-basic.test_repo") is None
+
+ os.environ["POETRY_HTTP_BASIC_TEST_REPO_USERNAME"] = "foo"
+ os.environ["POETRY_HTTP_BASIC_TEST_REPO_PASSWORD"] = "bar"
+ credentials = config.get("http-basic.test-repo")
+ assert credentials is not None
+ assert credentials["username"] == "foo"
+ assert credentials["password"] == "bar"Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
kind/bugSomething isn't working as expectedSomething isn't working as expected