Commit af71f6c0 by Sébastien Eustace

Fix invalid lock file generation in some cases

parent 94dd726e
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
- The `pyproject.toml` configuration is now properly validated. - The `pyproject.toml` configuration is now properly validated.
- Fixed installing Poetry-based packages breaking with `pip`. - Fixed installing Poetry-based packages breaking with `pip`.
- Fixed packages with empty markers being added to the lock file. - Fixed packages with empty markers being added to the lock file.
- Fixed invalid lock file generation in some cases.
## [0.12.17] - 2019-07-03 ## [0.12.17] - 2019-07-03
......
...@@ -218,6 +218,11 @@ class Locker(object): ...@@ -218,6 +218,11 @@ class Locker(object):
if dependency.pretty_name not in dependencies: if dependency.pretty_name not in dependencies:
dependencies[dependency.pretty_name] = [] dependencies[dependency.pretty_name] = []
else:
# Ensure we don't have mixed types in the lock file
for i, spec in enumerate(dependencies[dependency.pretty_name]):
if not isinstance(spec, dict):
dependencies[dependency.pretty_name][i] = {"version": spec}
constraint = {"version": str(dependency.pretty_constraint)} constraint = {"version": str(dependency.pretty_constraint)}
......
...@@ -6,6 +6,7 @@ import tomlkit ...@@ -6,6 +6,7 @@ import tomlkit
from poetry.packages.locker import Locker from poetry.packages.locker import Locker
from poetry.packages.project_package import ProjectPackage from poetry.packages.project_package import ProjectPackage
from ..helpers import get_dependency
from ..helpers import get_package from ..helpers import get_package
...@@ -135,3 +136,46 @@ A = [] ...@@ -135,3 +136,46 @@ A = []
""" """
assert expected == content assert expected == content
def test_lock_file_should_not_have_mixed_types(locker, root):
package_a = get_package("A", "1.0.0")
package_a.add_dependency("B", "^1.0.0")
package_a.add_dependency("B", {"version": ">=1.0.0", "optional": True})
package_a.requires[-1].activate()
package_a.extras["foo"] = [get_dependency("B", ">=1.0.0")]
locker.set_lock_data(root, [package_a])
expected = """[[package]]
category = "main"
description = ""
name = "A"
optional = false
python-versions = "*"
version = "1.0.0"
[package.dependencies]
[[package.dependencies.B]]
version = "^1.0.0"
[[package.dependencies.B]]
optional = true
version = ">=1.0.0"
[package.extras]
foo = ["B (>=1.0.0)"]
[metadata]
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8"
python-versions = "*"
[metadata.hashes]
A = []
"""
with locker.lock.open(encoding="utf-8") as f:
content = f.read()
print(content)
assert expected == content
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment