Skip to content

Commit de20d90

Browse files
authored
fix(venv_bundler): install all deps as not editable (#106)
1 parent e1db188 commit de20d90

File tree

8 files changed

+126
-1
lines changed

8 files changed

+126
-1
lines changed

src/poetry_plugin_bundle/bundlers/venv_bundler.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from cleo.io.outputs.section_output import SectionOutput
1616
from poetry.core.constraints.version import Version
1717
from poetry.poetry import Poetry
18+
from poetry.repositories.lockfile_repository import LockfileRepository
1819

1920

2021
class VenvBundler(Bundler):
@@ -57,6 +58,7 @@ def bundle(self, poetry: Poetry, io: IO) -> bool:
5758
from poetry.core.packages.package import Package
5859
from poetry.installation.installer import Installer
5960
from poetry.installation.operations.install import Install
61+
from poetry.packages.locker import Locker
6062
from poetry.utils.env import EnvManager
6163
from poetry.utils.env import SystemEnv
6264
from poetry.utils.env import VirtualEnv
@@ -118,11 +120,20 @@ def bundle(self, poetry: Poetry, io: IO) -> bool:
118120

119121
self._write(io, f"{message}: <info>Installing dependencies</info>")
120122

123+
class CustomLocker(Locker):
124+
def locked_repository(self) -> LockfileRepository:
125+
repo = super().locked_repository()
126+
for package in repo.packages:
127+
package.develop = False
128+
return repo
129+
130+
custom_locker = CustomLocker(poetry.locker.lock, poetry.local_config)
131+
121132
installer = Installer(
122133
NullIO() if not io.is_debug() else io,
123134
env,
124135
poetry.package,
125-
poetry.locker,
136+
custom_locker,
126137
poetry.pool,
127138
poetry.config,
128139
)

tests/bundlers/test_venv_bundler.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from cleo.io.buffered_io import BufferedIO
1313
from poetry.core.packages.package import Package
1414
from poetry.factory import Factory
15+
from poetry.installation.operations.install import Install
1516
from poetry.puzzle.exceptions import SolverProblemError
1617
from poetry.repositories.repository import Repository
1718
from poetry.repositories.repository_pool import RepositoryPool
@@ -268,3 +269,43 @@ def test_bundler_can_filter_dependency_groups(
268269
• Bundled simple-project (1.2.3) into {path}
269270
"""
270271
assert expected == io.fetch_output()
272+
273+
274+
def test_bundler_editable_deps(
275+
io: BufferedIO, tmpdir: str, poetry: Poetry, mocker: MockerFixture, config: Config
276+
) -> None:
277+
poetry = Factory().create_poetry(
278+
Path(__file__).parent.parent / "fixtures" / "simple_project_with_editable_dep"
279+
)
280+
poetry.set_config(config)
281+
282+
install_spy = mocker.spy(Install, "__init__")
283+
mocker.patch("poetry.installation.executor.Executor._execute_operation")
284+
285+
bundler = VenvBundler()
286+
bundler.set_path(Path(tmpdir))
287+
288+
io.clear_output()
289+
290+
bundler.bundle(poetry, io)
291+
292+
path = tmpdir
293+
python_version = ".".join(str(v) for v in sys.version_info[:3])
294+
expected = f"""\
295+
• Bundling simple-project (1.2.3) into {path}
296+
• Bundling simple-project (1.2.3) into {path}: Removing existing virtual environment
297+
• Bundling simple-project (1.2.3) into {path}: Creating a virtual environment using Python {python_version}
298+
• Bundling simple-project (1.2.3) into {path}: Installing dependencies
299+
• Bundling simple-project (1.2.3) into {path}: Installing simple-project (1.2.3)
300+
• Bundled simple-project (1.2.3) into {path}
301+
"""
302+
assert expected == io.fetch_output()
303+
304+
installed_packages = [call.args[1] for call in install_spy.call_args_list]
305+
dep_installs = list(
306+
filter(lambda package: package.name == "bar", installed_packages)
307+
)
308+
assert len(dep_installs) > 0
309+
310+
editable_installs = list(filter(lambda package: package.develop, dep_installs))
311+
assert len(editable_installs) == 0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
My Package
2+
==========

tests/fixtures/simple_project_with_editable_dep/bar/bar/__init__.py

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
[tool.poetry]
2+
name = "bar"
3+
version = "1.2.3"
4+
description = "Some description."
5+
authors = [
6+
"Sébastien Eustace <[email protected]>"
7+
]
8+
license = "MIT"
9+
10+
readme = "README.rst"
11+
12+
homepage = "https://python-poetry.org"
13+
repository = "https://github.com/python-poetry/poetry"
14+
documentation = "https://python-poetry.org/docs"
15+
16+
keywords = ["packaging", "dependency", "poetry"]
17+
18+
classifiers = [
19+
"Topic :: Software Development :: Build Tools",
20+
"Topic :: Software Development :: Libraries :: Python Modules"
21+
]
22+
23+
# Requirements
24+
[tool.poetry.dependencies]
25+
python = "~2.7 || ^3.4"

tests/fixtures/simple_project_with_editable_dep/poetry.lock

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
[tool.poetry]
2+
name = "simple-project"
3+
version = "1.2.3"
4+
description = "Some description."
5+
authors = [
6+
"Sébastien Eustace <[email protected]>"
7+
]
8+
license = "MIT"
9+
10+
readme = "README.rst"
11+
12+
homepage = "https://python-poetry.org"
13+
repository = "https://github.com/python-poetry/poetry"
14+
documentation = "https://python-poetry.org/docs"
15+
16+
keywords = ["packaging", "dependency", "poetry"]
17+
18+
classifiers = [
19+
"Topic :: Software Development :: Build Tools",
20+
"Topic :: Software Development :: Libraries :: Python Modules"
21+
]
22+
23+
# Requirements
24+
[tool.poetry.dependencies]
25+
python = "~2.7 || ^3.4"
26+
bar = { path = "bar", develop = true }
27+
28+
[tool.poetry.scripts]
29+
foo = "foo:bar"
30+
baz = "bar:baz.boom.bim"

tests/fixtures/simple_project_with_editable_dep/simple_project/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)