Commit 206e1d5d by Sébastien Eustace

Store dependencies of each package in poetry.lock

parent 0b546d20
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
## [Unreleased] ## [Unreleased]
## Changed
- Dependencies of each package is now stored in `poetry.lock`.
### Fixed ### Fixed
- Fixed the `add` command for packages with dots in their names. - 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: ...@@ -5,6 +5,7 @@ class Dependency:
def __init__(self, name, constraint, optional=False, category='main'): def __init__(self, name, constraint, optional=False, category='main'):
self._name = name.lower() self._name = name.lower()
self._pretty_name = name
try: try:
self._constraint = VersionParser().parse_constraints(constraint) self._constraint = VersionParser().parse_constraints(constraint)
except ValueError: except ValueError:
...@@ -28,7 +29,7 @@ class Dependency: ...@@ -28,7 +29,7 @@ class Dependency:
@property @property
def pretty_name(self): def pretty_name(self):
return '{} ({})'.format(self._name, self.pretty_constraint) return self._pretty_name
@property @property
def category(self): def category(self):
...@@ -53,7 +54,7 @@ class Dependency: ...@@ -53,7 +54,7 @@ class Dependency:
return hash((self._name, self._pretty_constraint)) return hash((self._name, self._pretty_constraint))
def __str__(self): def __str__(self):
return self.pretty_name return f'{self._pretty_name} ({self._pretty_constraint})'
def __repr__(self): def __repr__(self):
return '<Dependency {}>'.format(self.pretty_name) return f'<Dependency {str(self)}>'
...@@ -93,6 +93,9 @@ class Locker: ...@@ -93,6 +93,9 @@ class Locker:
package.hashes = lock_data['metadata']['hashes'][info['name']] package.hashes = lock_data['metadata']['hashes'][info['name']]
package.python_versions = info['python-versions'] 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: if 'source' in info:
package.source_type = info['source']['type'] package.source_type = info['source']['type']
package.source_url = info['source']['url'] package.source_url = info['source']['url']
...@@ -173,6 +176,13 @@ class Locker: ...@@ -173,6 +176,13 @@ class Locker:
return locked return locked
def _dump_package(self, package: 'poetry.packages.Package') -> dict: 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 = { data = {
'name': package.pretty_name, 'name': package.pretty_name,
'version': package.pretty_version, 'version': package.pretty_version,
...@@ -181,6 +191,7 @@ class Locker: ...@@ -181,6 +191,7 @@ class Locker:
'python-versions': package.python_versions, 'python-versions': package.python_versions,
'platform': package.platform, 'platform': package.platform,
'hashes': package.hashes, 'hashes': package.hashes,
'dependencies': dependencies
} }
if package.source_type: 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): ...@@ -45,6 +45,10 @@ class Locker(BaseLocker):
return '123456789' return '123456789'
def _write_lock_data(self, data) -> None: def _write_lock_data(self, data) -> None:
for package in data['package']:
if not package['dependencies']:
del package['dependencies']
self._written_data = data self._written_data = data
...@@ -188,3 +192,25 @@ def test_run_whitelist_remove(installer, locker, repo, package): ...@@ -188,3 +192,25 @@ def test_run_whitelist_remove(installer, locker, repo, package):
expected = fixture('remove') expected = fixture('remove')
assert locker.written_data == expected 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