diff options
author | Jhon Honce <jhonce@redhat.com> | 2018-11-01 11:33:32 -0700 |
---|---|---|
committer | Jhon Honce <jhonce@redhat.com> | 2018-11-01 11:36:46 -0700 |
commit | 573e21f8a0aef57c05a4de34a2ccf3b24129d3de (patch) | |
tree | 0db646b1104274662824b881e1e03a5d8900e3c8 | |
parent | 26330aa99577b36afff9ff36a86d54978195ab2e (diff) | |
download | podman-573e21f8a0aef57c05a4de34a2ccf3b24129d3de.tar.gz podman-573e21f8a0aef57c05a4de34a2ccf3b24129d3de.tar.bz2 podman-573e21f8a0aef57c05a4de34a2ccf3b24129d3de.zip |
Fix long image name handling
* Fixed issue where podman printed '<none>' and pypodman
skipped the image
* Fixed issue where port was printed in place of tags
Signed-off-by: Jhon Honce <jhonce@redhat.com>
-rw-r--r-- | contrib/python/pypodman/pypodman/lib/actions/images_action.py | 6 | ||||
-rw-r--r-- | contrib/python/pypodman/pypodman/lib/report.py | 29 |
2 files changed, 28 insertions, 7 deletions
diff --git a/contrib/python/pypodman/pypodman/lib/actions/images_action.py b/contrib/python/pypodman/pypodman/lib/actions/images_action.py index b8f5ccc78..29bf90dd2 100644 --- a/contrib/python/pypodman/pypodman/lib/actions/images_action.py +++ b/contrib/python/pypodman/pypodman/lib/actions/images_action.py @@ -37,7 +37,7 @@ class Images(AbstractActionBase): self.columns = OrderedDict({ 'name': - ReportColumn('name', 'REPOSITORY', 40), + ReportColumn('name', 'REPOSITORY', 0), 'tag': ReportColumn('tag', 'TAG', 10), 'id': @@ -71,12 +71,12 @@ class Images(AbstractActionBase): }) for r in image.repoTags: - name, tag = r.split(':', 1) + name, tag = r.rsplit(':', 1) fields.update({ 'name': name, 'tag': tag, }) - rows.append(fields) + rows.append(fields) if not self._args.digests: del self.columns['repoDigests'] diff --git a/contrib/python/pypodman/pypodman/lib/report.py b/contrib/python/pypodman/pypodman/lib/report.py index 1db4268da..b689390fd 100644 --- a/contrib/python/pypodman/pypodman/lib/report.py +++ b/contrib/python/pypodman/pypodman/lib/report.py @@ -1,8 +1,23 @@ """Report Manager.""" +import string import sys from collections import namedtuple +class ReportFormatter(string.Formatter): + """Custom formatter to default missing keys to '<none>'.""" + + def get_value(self, key, args, kwargs): + """Map missing key to value '<none>'.""" + try: + if isinstance(key, int): + return args[key] + else: + return kwargs[key] + except KeyError: + return '<none>' + + class ReportColumn(namedtuple('ReportColumn', 'key display width default')): """Hold attributes of output column.""" @@ -26,18 +41,24 @@ class Report(): """ self._columns = columns self._file = file + self._format_string = None + self._formatter = ReportFormatter() self._heading = heading self.epilog = epilog - self._format = None def row(self, **fields): """Print row for report.""" if self._heading: hdrs = {k: v.display for (k, v) in self._columns.items()} - print(self._format.format(**hdrs), flush=True, file=self._file) + print( + self._formatter.format(self._format_string, **hdrs), + flush=True, + file=self._file, + ) self._heading = False + fields = {k: str(v) for k, v in fields.items()} - print(self._format.format(**fields)) + print(self._formatter.format(self._format_string, **fields)) def __enter__(self): """Return `self` upon entering the runtime context.""" @@ -63,4 +84,4 @@ class Report(): display_len = info.width fmt.append('{{{0}:{1}.{1}}}'.format(key, display_len)) - self._format = ' '.join(fmt) + self._format_string = ' '.join(fmt) |