Skip to content

Commit 58db424

Browse files
abnAgni SairentDarsstar
authored andcommitted
authenticator: allow multiple repos w/ same netloc
Co-authored-by: Agni Sairent <[email protected]> Co-authored-by: Dos Moonen <[email protected]>
1 parent 070ea6b commit 58db424

File tree

7 files changed

+406
-115
lines changed

7 files changed

+406
-115
lines changed

src/poetry/config/config.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,20 @@ def _all(config: dict, parent_key: str = "") -> dict:
112112
def raw(self) -> dict[str, Any]:
113113
return self._config
114114

115+
@staticmethod
116+
def _get_environment_repositories() -> dict[str, dict[str, str]]:
117+
repositories = {}
118+
pattern = re.compile(r"POETRY_REPOSITORIES_(?P<name>[A-Z_]+)_URL")
119+
120+
for env_key in os.environ.keys():
121+
match = pattern.match(env_key)
122+
if match:
123+
repositories[match.group("name").lower().replace("_", "-")] = {
124+
"url": os.environ[env_key]
125+
}
126+
127+
return repositories
128+
115129
def get(self, setting_name: str, default: Any = None) -> Any:
116130
"""
117131
Retrieve a setting value.
@@ -121,6 +135,12 @@ def get(self, setting_name: str, default: Any = None) -> Any:
121135
# Looking in the environment if the setting
122136
# is set via a POETRY_* environment variable
123137
if self._use_environment:
138+
if setting_name == "repositories":
139+
# repositories setting is special for now
140+
repositories = self._get_environment_repositories()
141+
if repositories:
142+
return repositories
143+
124144
env = "POETRY_" + "_".join(k.upper().replace("-", "_") for k in keys)
125145
env_value = os.getenv(env)
126146
if env_value is not None:

src/poetry/publishing/publisher.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ def publish(
6969
logger.debug(
7070
f"Found authentication information for {repository_name}."
7171
)
72-
username = auth["username"]
73-
password = auth["password"]
72+
username = auth.username
73+
password = auth.password
7474

7575
resolved_client_cert = client_cert or get_client_cert(
7676
self._poetry.config, repository_name
7777
)
7878
# Requesting missing credentials but only if there is not a client cert defined.
79-
if not resolved_client_cert:
79+
if not resolved_client_cert and hasattr(self._io, "ask"):
8080
if username is None:
8181
username = self._io.ask("Username:")
8282

0 commit comments

Comments
 (0)