Statistics
| Branch: | Tag: | Revision:

root / qa / colors.py @ 1490a90c

History | View | Annotate | Download (1.9 kB)

1 d5a9b556 Petr Pudlak
#!/usr/bin/python -u
2 d5a9b556 Petr Pudlak
#
3 d5a9b556 Petr Pudlak
4 d5a9b556 Petr Pudlak
# Copyright (C) 2013 Google Inc.
5 d5a9b556 Petr Pudlak
#
6 d5a9b556 Petr Pudlak
# This program is free software; you can redistribute it and/or modify
7 d5a9b556 Petr Pudlak
# it under the terms of the GNU General Public License as published by
8 d5a9b556 Petr Pudlak
# the Free Software Foundation; either version 2 of the License, or
9 d5a9b556 Petr Pudlak
# (at your option) any later version.
10 d5a9b556 Petr Pudlak
#
11 d5a9b556 Petr Pudlak
# This program is distributed in the hope that it will be useful, but
12 d5a9b556 Petr Pudlak
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 d5a9b556 Petr Pudlak
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 d5a9b556 Petr Pudlak
# General Public License for more details.
15 d5a9b556 Petr Pudlak
#
16 d5a9b556 Petr Pudlak
# You should have received a copy of the GNU General Public License
17 d5a9b556 Petr Pudlak
# along with this program; if not, write to the Free Software
18 d5a9b556 Petr Pudlak
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 d5a9b556 Petr Pudlak
# 02110-1301, USA.
20 d5a9b556 Petr Pudlak
21 d5a9b556 Petr Pudlak
22 d5a9b556 Petr Pudlak
"""Script for adding colorized output to Ganeti.
23 d5a9b556 Petr Pudlak

24 d5a9b556 Petr Pudlak
Colors are enabled only if the standard output is a proper terminal.
25 1490a90c Petr Pudlak
(Or call check_for_colors() to make a thorough test using "tput".)
26 d5a9b556 Petr Pudlak

27 d5a9b556 Petr Pudlak
"""
28 d5a9b556 Petr Pudlak
29 d5a9b556 Petr Pudlak
import os
30 1490a90c Petr Pudlak
import subprocess
31 d5a9b556 Petr Pudlak
import sys
32 d5a9b556 Petr Pudlak
33 d5a9b556 Petr Pudlak
DEFAULT = '\033[0m'
34 d5a9b556 Petr Pudlak
RED = '\033[91m'
35 d5a9b556 Petr Pudlak
GREEN = '\033[92m'
36 d5a9b556 Petr Pudlak
BLUE = '\033[94m'
37 d5a9b556 Petr Pudlak
CYAN = '\033[96m'
38 d5a9b556 Petr Pudlak
WHITE = '\033[97m'
39 d5a9b556 Petr Pudlak
YELLOW = '\033[93m'
40 d5a9b556 Petr Pudlak
MAGENTA = '\033[95m'
41 d5a9b556 Petr Pudlak
GREY = '\033[90m'
42 d5a9b556 Petr Pudlak
BLACK = '\033[90m'
43 d5a9b556 Petr Pudlak
44 d5a9b556 Petr Pudlak
_enabled = sys.stdout.isatty()
45 d5a9b556 Petr Pudlak
46 d5a9b556 Petr Pudlak
47 d5a9b556 Petr Pudlak
def colorize(line, color=None):
48 d5a9b556 Petr Pudlak
  if _enabled and color is not None:
49 d5a9b556 Petr Pudlak
    return color + line + DEFAULT
50 d5a9b556 Petr Pudlak
  else:
51 d5a9b556 Petr Pudlak
    return line
52 1490a90c Petr Pudlak
53 1490a90c Petr Pudlak
54 1490a90c Petr Pudlak
def check_for_colors():
55 1490a90c Petr Pudlak
  """Tries to call 'tput' to properly determine, if the terminal has colors.
56 1490a90c Petr Pudlak

57 1490a90c Petr Pudlak
  This functions is meant to be run once at the program's start. If not
58 1490a90c Petr Pudlak
  invoked, colors are enabled iff standard output is a terminal.
59 1490a90c Petr Pudlak
  """
60 1490a90c Petr Pudlak
  colors = 0
61 1490a90c Petr Pudlak
  if sys.stdout.isatty():
62 1490a90c Petr Pudlak
    try:
63 1490a90c Petr Pudlak
      p = subprocess.Popen(["tput", "colors"], stdout=subprocess.PIPE)
64 1490a90c Petr Pudlak
      output = p.communicate()[0]
65 1490a90c Petr Pudlak
      if p.returncode == 0:
66 1490a90c Petr Pudlak
        colors = int(output)
67 1490a90c Petr Pudlak
    except (OSError, ValueError):
68 1490a90c Petr Pudlak
      pass
69 1490a90c Petr Pudlak
  global _enabled
70 1490a90c Petr Pudlak
  _enabled = (colors >= 2)