diff options
Diffstat (limited to 'heatclient/common/format_utils.py')
-rw-r--r-- | heatclient/common/format_utils.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/heatclient/common/format_utils.py b/heatclient/common/format_utils.py index 2b02fc9..5cb691a 100644 --- a/heatclient/common/format_utils.py +++ b/heatclient/common/format_utils.py @@ -13,6 +13,8 @@ # Copyright 2015 IBM Corp. from cliff import show +import six +import sys class RawFormat(show.ShowOne): @@ -51,3 +53,41 @@ class ValueFormat(RawFormat): @property def formatter_default(self): return 'value' + + +def indent_and_truncate(txt, spaces=0, truncate=False, truncate_limit=10, + truncate_prefix=None, truncate_postfix=None): + """Indents supplied multiline text by the specified number of spaces + + """ + if txt is None: + return + lines = six.text_type(txt).splitlines() + if truncate and len(lines) > truncate_limit: + lines = lines[-truncate_limit:] + if truncate_prefix is not None: + lines.insert(0, truncate_prefix) + if truncate_postfix is not None: + lines.append(truncate_postfix) + + if spaces > 0: + lines = [" " * spaces + line for line in lines] + return '\n'.join(lines) + + +def print_software_deployment_output(data, name, out=sys.stdout, long=False): + """Prints details of the software deployment for user consumption + + The format attempts to be valid yaml, but is primarily aimed at showing + useful information to the user in a helpful layout. + """ + if name in ('deploy_stdout', 'deploy_stderr'): + output = indent_and_truncate( + data.get(name), + spaces=4, + truncate=not long, + truncate_prefix='...', + truncate_postfix='(truncated, view all with --long)') + out.write(' %s: |\n%s\n' % (name, output)) + else: + out.write(' %s: %s\n' % (name, data.get(name))) |