summaryrefslogtreecommitdiff
path: root/heatclient/common/format_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'heatclient/common/format_utils.py')
-rw-r--r--heatclient/common/format_utils.py40
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)))