summaryrefslogtreecommitdiff
path: root/lib/ansible/utils/display.py
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2015-05-03 21:47:26 -0500
committerJames Cammarata <jimi@sngx.net>2015-05-03 21:47:26 -0500
commitce3ef7f4c16e47d5a0b5600e1c56c177b7c93f0d (patch)
treeebb90eaba034dfb4ea8a3afe746a87f9b7dee66f /lib/ansible/utils/display.py
parent8cf4452d48e583cfd59f96e67cfd34a1c35226e7 (diff)
downloadansible-ce3ef7f4c16e47d5a0b5600e1c56c177b7c93f0d.tar.gz
Making the switch to v2
Diffstat (limited to 'lib/ansible/utils/display.py')
-rw-r--r--lib/ansible/utils/display.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/lib/ansible/utils/display.py b/lib/ansible/utils/display.py
new file mode 100644
index 0000000000..d5b6ad71a9
--- /dev/null
+++ b/lib/ansible/utils/display.py
@@ -0,0 +1,142 @@
+# (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>
+#
+# This file is part of Ansible
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
+
+# FIXME: copied mostly from old code, needs py3 improvements
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import textwrap
+import sys
+
+from ansible import constants as C
+from ansible.errors import AnsibleError
+from ansible.utils.color import stringc
+
+class Display:
+
+ def __init__(self, verbosity=0):
+
+ self.verbosity = verbosity
+
+ # list of all deprecation messages to prevent duplicate display
+ self._deprecations = {}
+ self._warns = {}
+ self._errors = {}
+
+ def display(self, msg, color=None, stderr=False, screen_only=False, log_only=False):
+ msg2 = msg
+ if color:
+ msg2 = stringc(msg, color)
+ if not log_only:
+ if not stderr:
+ try:
+ print(msg2)
+ except UnicodeEncodeError:
+ print(msg2.encode('utf-8'))
+ else:
+ try:
+ print(msg2, file=sys.stderr)
+ except UnicodeEncodeError:
+ print(msg2.encode('utf-8'), file=sys.stderr)
+ if C.DEFAULT_LOG_PATH != '':
+ while msg.startswith("\n"):
+ msg = msg.replace("\n","")
+ # FIXME: logger stuff needs to be implemented
+ #if not screen_only:
+ # if color == 'red':
+ # logger.error(msg)
+ # else:
+ # logger.info(msg)
+
+ def vv(self, msg, host=None):
+ return self.verbose(msg, host=host, caplevel=1)
+
+ def vvv(self, msg, host=None):
+ return self.verbose(msg, host=host, caplevel=2)
+
+ def vvvv(self, msg, host=None):
+ return self.verbose(msg, host=host, caplevel=3)
+
+ def vvvvv(self, msg, host=None):
+ return self.verbose(msg, host=host, caplevel=4)
+
+ def vvvvvv(self, msg, host=None):
+ return self.verbose(msg, host=host, caplevel=5)
+
+ def verbose(self, msg, host=None, caplevel=2):
+ # FIXME: this needs to be implemented
+ #msg = utils.sanitize_output(msg)
+ if self.verbosity > caplevel:
+ if host is None:
+ self.display(msg, color='blue')
+ else:
+ self.display("<%s> %s" % (host, msg), color='blue', screen_only=True)
+
+ def deprecated(self, msg, version, removed=False):
+ ''' used to print out a deprecation message.'''
+
+ if not removed and not C.DEPRECATION_WARNINGS:
+ return
+
+ if not removed:
+ if version:
+ new_msg = "\n[DEPRECATION WARNING]: %s. This feature will be removed in version %s." % (msg, version)
+ else:
+ new_msg = "\n[DEPRECATION WARNING]: %s. This feature will be removed in a future release." % (msg)
+ new_msg = new_msg + " Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.\n\n"
+ else:
+ raise AnsibleError("[DEPRECATED]: %s. Please update your playbooks." % msg)
+
+ wrapped = textwrap.wrap(new_msg, 79)
+ new_msg = "\n".join(wrapped) + "\n"
+
+ if new_msg not in self._deprecations:
+ self.display(new_msg, color='purple', stderr=True)
+ self._deprecations[new_msg] = 1
+
+ def warning(self, msg):
+ new_msg = "\n[WARNING]: %s" % msg
+ wrapped = textwrap.wrap(new_msg, 79)
+ new_msg = "\n".join(wrapped) + "\n"
+ if new_msg not in self._warns:
+ self.display(new_msg, color='bright purple', stderr=True)
+ self._warns[new_msg] = 1
+
+ def system_warning(self, msg):
+ if C.SYSTEM_WARNINGS:
+ self.warning(msg)
+
+ def banner(self, msg, color=None):
+ '''
+ Prints a header-looking line with stars taking up to 80 columns
+ of width (3 columns, minimum)
+ '''
+ msg = msg.strip()
+ star_len = (80 - len(msg))
+ if star_len < 0:
+ star_len = 3
+ stars = "*" * star_len
+ self.display("\n%s %s" % (msg, stars), color=color)
+
+ def error(self, msg):
+ new_msg = "\n[ERROR]: %s" % msg
+ wrapped = textwrap.wrap(new_msg, 79)
+ new_msg = "\n".join(wrapped) + "\n"
+ if new_msg not in self._errors:
+ self.display(new_msg, color='red', stderr=True)
+ self._errors[new_msg] = 1
+