Skip to content

Commit 7fac676

Browse files
authored
handle poetry init non-interactive dependencies (#2899)
* handle poetry init non-interactive dependencies 1. in non-interactive mode, suppress "This command will guide you through..." 2. in interactive mode, respect command line --dependency if the user chooses NO for "Would you like to define your main dependencies interactively?"
1 parent b34cd71 commit 7fac676

File tree

2 files changed

+40
-12
lines changed

2 files changed

+40
-12
lines changed

poetry/console/commands/init.py

+18-12
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,12 @@ def handle(self) -> int:
8686

8787
vcs_config = GitConfig()
8888

89-
self.line("")
90-
self.line(
91-
"This command will guide you through creating your <info>pyproject.toml</> config."
92-
)
93-
self.line("")
89+
if self.io.is_interactive():
90+
self.line("")
91+
self.line(
92+
"This command will guide you through creating your <info>pyproject.toml</> config."
93+
)
94+
self.line("")
9495

9596
name = self.option("name")
9697
if not name:
@@ -154,7 +155,8 @@ def handle(self) -> int:
154155
)
155156
python = self.ask(question)
156157

157-
self.line("")
158+
if self.io.is_interactive():
159+
self.line("")
158160

159161
requirements = {}
160162
if self.option("dependency"):
@@ -175,12 +177,14 @@ def handle(self) -> int:
175177
)
176178
help_displayed = False
177179
if self.confirm(question, True):
178-
self.line(help_message)
179-
help_displayed = True
180+
if self.io.is_interactive():
181+
self.line(help_message)
182+
help_displayed = True
180183
requirements.update(
181184
self._format_requirements(self._determine_requirements([]))
182185
)
183-
self.line("")
186+
if self.io.is_interactive():
187+
self.line("")
184188

185189
dev_requirements = {}
186190
if self.option("dev-dependency"):
@@ -192,13 +196,14 @@ def handle(self) -> int:
192196
"Would you like to define your development dependencies interactively?"
193197
)
194198
if self.confirm(question, True):
195-
if not help_displayed:
199+
if self.io.is_interactive() and not help_displayed:
196200
self.line(help_message)
197201

198202
dev_requirements.update(
199203
self._format_requirements(self._determine_requirements([]))
200204
)
201-
self.line("")
205+
if self.io.is_interactive():
206+
self.line("")
202207

203208
layout_ = layout("standard")(
204209
name,
@@ -317,7 +322,8 @@ def _determine_requirements(
317322
if package is not False:
318323
requires.append(constraint)
319324

320-
package = self.ask("\nAdd a package:")
325+
if self.io.is_interactive():
326+
package = self.ask("\nAdd a package:")
321327

322328
return requires
323329

tests/console/commands/test_init.py

+22
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,28 @@ def test_basic_interactive(tester, init_basic_inputs, init_basic_toml):
8181
assert init_basic_toml in tester.io.fetch_output()
8282

8383

84+
def test_noninteractive(app, mocker, poetry, repo, tmp_path):
85+
command = app.find("init")
86+
command._pool = poetry.pool
87+
88+
repo.add_package(get_package("pytest", "3.6.0"))
89+
90+
p = mocker.patch("poetry.utils._compat.Path.cwd")
91+
p.return_value = tmp_path
92+
93+
tester = CommandTester(command)
94+
args = "--name my-package --dependency pytest"
95+
tester.execute(args=args, interactive=False)
96+
97+
expected = "Using version ^3.6.0 for pytest\n"
98+
assert tester.io.fetch_output() == expected
99+
assert "" == tester.io.fetch_error()
100+
101+
toml_content = (tmp_path / "pyproject.toml").read_text()
102+
assert 'name = "my-package"' in toml_content
103+
assert 'pytest = "^3.6.0"' in toml_content
104+
105+
84106
def test_interactive_with_dependencies(tester, repo):
85107
repo.add_package(get_package("django-pendulum", "0.1.6-pre4"))
86108
repo.add_package(get_package("pendulum", "2.0.0"))

0 commit comments

Comments
 (0)