Commit b4d74fd2 by Sébastien Eustace

Improve show command

parent c008f402
...@@ -72,6 +72,7 @@ lists all packages available.""" ...@@ -72,6 +72,7 @@ lists all packages available."""
rows = [ rows = [
['<info>name</>', f' : <fg=cyan>{pkg.pretty_name}</>'], ['<info>name</>', f' : <fg=cyan>{pkg.pretty_name}</>'],
['<info>version</>', f' : <comment>{pkg.pretty_version}</>'], ['<info>version</>', f' : <comment>{pkg.pretty_version}</>'],
['<info>description</>', f' : {pkg.description}'],
] ]
table.add_rows(rows) table.add_rows(rows)
...@@ -87,14 +88,33 @@ lists all packages available.""" ...@@ -87,14 +88,33 @@ lists all packages available."""
return 0 return 0
show_latest = self.option('latest') show_latest = self.option('latest')
terminal = self.get_application().terminal
width = terminal.width
name_length = version_length = latest_length = 0
latest_packages = {}
# Computing widths
for locked in locked_packages: for locked in locked_packages:
row = [f'<fg=cyan>{locked.pretty_name}</>', ' ' + locked.version] name_length = max(name_length, len(locked.pretty_name))
version_length = max(version_length, len(locked.full_pretty_version))
if show_latest: if show_latest:
latest = self.find_latest_package(locked) latest = self.find_latest_package(locked)
if not latest: if not latest:
latest = locked latest = locked
latest_packages[locked.pretty_name] = latest
latest_length = max(latest_length, len(latest.full_pretty_version))
write_version = name_length + version_length + 3 <= width
write_latest = name_length + version_length + latest_length + 3 <= width
write_description = name_length + version_length + latest_length + 24 <= width
for locked in locked_packages:
line = f'<fg=cyan>{locked.pretty_name:{name_length}}</>'
if write_version:
line += f' {locked.full_pretty_version:{version_length}}'
if show_latest and write_latest:
latest = latest_packages[locked.pretty_name]
update_status = self.get_update_status(latest, locked) update_status = self.get_update_status(latest, locked)
color = 'green' color = 'green'
if update_status == 'semver-safe-update': if update_status == 'semver-safe-update':
...@@ -102,19 +122,26 @@ lists all packages available.""" ...@@ -102,19 +122,26 @@ lists all packages available."""
elif update_status == 'update-possible': elif update_status == 'update-possible':
color = 'yellow' color = 'yellow'
row.append(f' <fg={color}>{latest.version}</>') line += f' <fg={color}>{latest.version:{latest_length}}</>'
if self.option('outdated') and update_status == 'up-to-date': if self.option('outdated') and update_status == 'up-to-date':
continue continue
row.append(locked.description) if write_description:
description = locked.description
remaining = width - name_length - version_length - 4
if show_latest:
remaining -= latest_length
table.add_row(row) if len(locked.description) > remaining:
description = description[:remaining-3] + '...'
table.render() line += ' ' + description
self.line(line)
def display_package_tree(self, package, installed_repo): def display_package_tree(self, package, installed_repo):
self.write(f'<info>{package.pretty_name}</info>') self.write(f'<info>{package.pretty_name}</info>')
self.line(f' {package.pretty_version}') self.line(f' {package.pretty_version} {package.description}')
dependencies = package.requires dependencies = package.requires
dependencies = sorted(dependencies, key=lambda x: x.name) dependencies = sorted(dependencies, key=lambda x: x.name)
......
...@@ -88,6 +88,7 @@ class Locker: ...@@ -88,6 +88,7 @@ class Locker:
info['version'], info['version'],
info['version'] info['version']
) )
package.description = info.get('description', '')
package.category = info['category'] package.category = info['category']
package.optional = info['optional'] package.optional = info['optional']
package.hashes = lock_data['metadata']['hashes'][info['name']] package.hashes = lock_data['metadata']['hashes'][info['name']]
...@@ -186,6 +187,7 @@ class Locker: ...@@ -186,6 +187,7 @@ class Locker:
data = { data = {
'name': package.pretty_name, 'name': package.pretty_name,
'version': package.pretty_version, 'version': package.pretty_version,
'description': package.description,
'category': package.category, 'category': package.category,
'optional': package.optional, 'optional': package.optional,
'python-versions': package.python_versions, 'python-versions': package.python_versions,
......
...@@ -52,7 +52,7 @@ class Package: ...@@ -52,7 +52,7 @@ class Package:
self._version = version self._version = version
self._pretty_version = pretty_version or version self._pretty_version = pretty_version or version
self._description = '' self.description = ''
self._stability = parse_stability(version) self._stability = parse_stability(version)
self._dev = self._stability == 'dev' self._dev = self._stability == 'dev'
...@@ -92,10 +92,6 @@ class Package: ...@@ -92,10 +92,6 @@ class Package:
return self._pretty_version return self._pretty_version
@property @property
def description(self):
return self._description
@property
def unique_name(self): def unique_name(self):
return self.name + '-' + self._version return self.name + '-' + self._version
......
...@@ -174,6 +174,7 @@ class LegacyRepository(Repository): ...@@ -174,6 +174,7 @@ class LegacyRepository(Repository):
data = { data = {
'name': name, 'name': name,
'version': version, 'version': version,
'summary': '',
'requires_dist': requires, 'requires_dist': requires,
'digests': hashes 'digests': hashes
} }
......
...@@ -91,6 +91,9 @@ class PyPiRepository(Repository): ...@@ -91,6 +91,9 @@ class PyPiRepository(Repository):
) )
) )
# Adding description
package.description = release_info.get('summary', '')
# Adding hashes information # Adding hashes information
package.hashes = release_info['digests'] package.hashes = release_info['digests']
...@@ -163,6 +166,7 @@ class PyPiRepository(Repository): ...@@ -163,6 +166,7 @@ class PyPiRepository(Repository):
data = { data = {
'name': info['name'], 'name': info['name'],
'version': info['version'], 'version': info['version'],
'summary': info['summary'],
'platform': info['platform'], 'platform': info['platform'],
'requires_dist': info['requires_dist'], 'requires_dist': info['requires_dist'],
'requires_python': info['requires_python'], 'requires_python': info['requires_python'],
......
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