Commit 206e1d5d by Sébastien Eustace

Store dependencies of each package in poetry.lock

parent 0b546d20
......@@ -2,6 +2,10 @@
## [Unreleased]
## Changed
- Dependencies of each package is now stored in `poetry.lock`.
### Fixed
- Fixed the `add` command for packages with dots in their names.
......
from .command import Command
class ShowCommand(Command):
"""
Shows information about packages.
show
{ package? : Package to inspect. }
{ version? : Version to inspect. }
"""
help = """The show command displays detailed information about a package, or
lists all packages available."""
......@@ -5,6 +5,7 @@ class Dependency:
def __init__(self, name, constraint, optional=False, category='main'):
self._name = name.lower()
self._pretty_name = name
try:
self._constraint = VersionParser().parse_constraints(constraint)
except ValueError:
......@@ -28,7 +29,7 @@ class Dependency:
@property
def pretty_name(self):
return '{} ({})'.format(self._name, self.pretty_constraint)
return self._pretty_name
@property
def category(self):
......@@ -53,7 +54,7 @@ class Dependency:
return hash((self._name, self._pretty_constraint))
def __str__(self):
return self.pretty_name
return f'{self._pretty_name} ({self._pretty_constraint})'
def __repr__(self):
return '<Dependency {}>'.format(self.pretty_name)
return f'<Dependency {str(self)}>'
......@@ -93,6 +93,9 @@ class Locker:
package.hashes = lock_data['metadata']['hashes'][info['name']]
package.python_versions = info['python-versions']
for dep_name, constraint in info.get('dependencies', {}).items():
package.add_dependency(dep_name, constraint)
if 'source' in info:
package.source_type = info['source']['type']
package.source_url = info['source']['url']
......@@ -173,6 +176,13 @@ class Locker:
return locked
def _dump_package(self, package: 'poetry.packages.Package') -> dict:
dependencies = {}
for dependency in package.requires:
if dependency.is_optional():
continue
dependencies[dependency.pretty_name] = dependency.pretty_constraint
data = {
'name': package.pretty_name,
'version': package.pretty_version,
......@@ -181,6 +191,7 @@ class Locker:
'python-versions': package.python_versions,
'platform': package.platform,
'hashes': package.hashes,
'dependencies': dependencies
}
if package.source_type:
......
[[package]]
name = "A"
version = "1.0"
category = "main"
optional = false
python-versions = "*"
platform = "*"
[package.dependencies]
D = "^1.0"
[[package]]
name = "B"
version = "1.1"
category = "main"
optional = false
python-versions = "*"
platform = "*"
[package.dependencies]
C = "~1.2"
[[package]]
name = "C"
version = "1.2"
category = "main"
optional = false
python-versions = "*"
platform = "*"
[[package]]
name = "D"
version = "1.3"
category = "main"
optional = false
python-versions = "*"
platform = "*"
[metadata]
python-versions = "*"
platform = "*"
content-hash = "123456789"
[metadata.hashes]
A = []
B = []
C = []
D = []
......@@ -45,6 +45,10 @@ class Locker(BaseLocker):
return '123456789'
def _write_lock_data(self, data) -> None:
for package in data['package']:
if not package['dependencies']:
del package['dependencies']
self._written_data = data
......@@ -188,3 +192,25 @@ def test_run_whitelist_remove(installer, locker, repo, package):
expected = fixture('remove')
assert locker.written_data == expected
def test_add_with_sub_dependencies(installer, locker, repo, package):
package_a = get_package('A', '1.0')
package_b = get_package('B', '1.1')
package_c = get_package('C', '1.2')
package_d = get_package('D', '1.3')
repo.add_package(package_a)
repo.add_package(package_b)
repo.add_package(package_c)
repo.add_package(package_d)
package.add_dependency('A', '~1.0')
package.add_dependency('B', '^1.0')
package_a.add_dependency('D', '^1.0')
package_b.add_dependency('C', '~1.2')
installer.run()
expected = fixture('with-sub-dependencies')
assert locker.written_data == expected
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