# -*- coding: utf-8 -*-
"""
sceptre.stack_status_colourer
This module implements a StackStatusColourer class, colours any Stack Statuses
found in a given string.
"""
import re
from colorama import Fore, Style
[docs]class StackStatusColourer(object):
"""
StackStatusColourer adds colours to stack statuses.
These are documented here:
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
"""
STACK_STATUS_CODES = {
"CREATE_COMPLETE": Fore.GREEN,
"CREATE_FAILED": Fore.RED,
"CREATE_IN_PROGRESS": Fore.YELLOW,
"DELETE_COMPLETE": Fore.GREEN,
"DELETE_FAILED": Fore.RED,
"DELETE_IN_PROGRESS": Fore.YELLOW,
"DELETE_SKIPPED": Fore.CYAN,
"IMPORT_COMPLETE": Fore.GREEN,
"IMPORT_IN_PROGRESS": Fore.YELLOW,
"IMPORT_ROLLBACK_COMPLETE": Fore.GREEN,
"IMPORT_ROLLBACK_FAILED": Fore.RED,
"IMPORT_ROLLBACK_IN_PROGRESS": Fore.YELLOW,
"PENDING": Fore.CYAN,
"REVIEW_IN_PROGRESS": Fore.YELLOW,
"ROLLBACK_COMPLETE": Fore.RED,
"ROLLBACK_FAILED": Fore.RED,
"ROLLBACK_IN_PROGRESS": Fore.YELLOW,
"UPDATE_COMPLETE": Fore.GREEN,
"UPDATE_COMPLETE_CLEANUP_IN_PROGRESS": Fore.YELLOW,
"UPDATE_FAILED": Fore.RED,
"UPDATE_IN_PROGRESS": Fore.YELLOW,
"UPDATE_ROLLBACK_COMPLETE": Fore.GREEN,
"UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS": Fore.YELLOW,
"UPDATE_ROLLBACK_FAILED": Fore.RED,
"UPDATE_ROLLBACK_IN_PROGRESS": Fore.YELLOW,
}
STACK_STATUS_PATTERN = re.compile(r"\b({0})\b".format("|".join(STACK_STATUS_CODES)))
[docs] def colour(self, string):
"""
Colours all Stack Statueses in ``string``.
The colours applied are defined in
``sceptre.stack_status_colourer.StackStatusColourer.STACK_STATUS_CODES``
:param string: A string to colour.
:type string: str
:returns: The string with all stack status values coloured.
:rtype: str
"""
stack_statuses = re.findall(self.STACK_STATUS_PATTERN, string)
for status in stack_statuses:
string = re.sub(
r"\b{0}\b".format(status),
"{0}{1}{2}".format(
self.STACK_STATUS_CODES[status], status, Style.RESET_ALL
),
string,
)
return string