Skip to content

Commit

Permalink
locker: ensure dependency constraint is correct
Browse files Browse the repository at this point in the history
  • Loading branch information
abn committed Oct 7, 2020
1 parent 63a512d commit 15bfdbe
Showing 1 changed file with 31 additions and 11 deletions.
42 changes: 31 additions & 11 deletions poetry/packages/locker.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,23 +417,43 @@ def _lock_packages(

return locked

def _dump_dependency(self, dependency): # type: (Dependency) -> Union[str, dict]
constraint = inline_table()

if dependency.is_vcs():
constraint["git"] = dependency.source_url
if dependency.source_resolved_reference:
constraint["rev"] = dependency.source_resolved_reference
else:
for key in {"branch", "tag", "rev"}:
value = getattr(dependency, key, None)
if value is not None:
constraint[key] = value
elif dependency.is_url():
constraint["url"] = dependency.source_url
elif dependency.is_file() or dependency.is_directory():
constraint["path"] = dependency.source_url
else:
constraint["version"] = str(dependency.pretty_constraint)

if dependency.extras:
constraint["extras"] = sorted(dependency.extras)

if dependency.is_optional():
constraint["optional"] = True

if not dependency.marker.is_any():
constraint["markers"] = str(dependency.marker)

return constraint

def _dump_package(self, package): # type: (Package) -> dict
dependencies = {}
for dependency in sorted(package.requires, key=lambda d: d.name):
if dependency.pretty_name not in dependencies:
dependencies[dependency.pretty_name] = []

constraint = inline_table()
constraint["version"] = str(dependency.pretty_constraint)

if dependency.extras:
constraint["extras"] = sorted(dependency.extras)

if dependency.is_optional():
constraint["optional"] = True

if not dependency.marker.is_any():
constraint["markers"] = str(dependency.marker)
constraint = self._dump_dependency(dependency)

dependencies[dependency.pretty_name].append(constraint)

Expand Down

0 comments on commit 15bfdbe

Please sign in to comment.