from __future__ import print_function
import sys


_COLOR_CODES = {
    "white": '\033[0m',
    "red":  '\033[31m',
    "green": '\033[32m',
    "orange": '\033[33m',
    "blue": '\033[34m',
    "purple": '\033[35m',
    "W": '\033[0m',
    "R":  '\033[31m',
    "G": '\033[32m',
    "O": '\033[33m',
    "B": '\033[34m',
    "P": '\033[35m'
}


def console_log(data, color="white", end="\n"):
    """
    log data to console.
    (if not flush console log, Gitlab-CI won't update logs during job execution)

    :param data: data content
    :param color: color
    """
    if color not in _COLOR_CODES:
        color = "white"
    color_codes = _COLOR_CODES[color]
    print(color_codes + data, end=end)
    if color not in ["white", "W"]:
        # reset color to white for later logs
        print(_COLOR_CODES["white"] + "\r")
    sys.stdout.flush()

from __future__ import print_function
import sys


_COLOR_CODES = {
    "white": u'\033[0m',
    "red":  u'\033[31m',
    "green": u'\033[32m',
    "orange": u'\033[33m',
    "blue": u'\033[34m',
    "purple": u'\033[35m',
    "W": u'\033[0m',
    "R": u'\033[31m',
    "G": u'\033[32m',
    "O": u'\033[33m',
    "B": u'\033[34m',
    "P": u'\033[35m'
}


def console_log(data, color="white", end="\n"):
    """
    log data to console.
    (if not flush console log, Gitlab-CI won't update logs during job execution)

    :param data: data content
    :param color: color
    """
    if color not in _COLOR_CODES:
        color = "white"
    color_codes = _COLOR_CODES[color]
    if type(data) is type(b''):
        data = data.decode('utf-8', 'replace')
    print(color_codes + data, end=end)
    if color not in ["white", "W"]:
        # reset color to white for later logs
        print(_COLOR_CODES["white"] + u"\r")
    sys.stdout.flush()

Make Utility.console_log accept Unicode and byte strings as well
tools: Make Utility.console_log accept Unicode and byte strings as well

  from __future__ import print_function
  import sys
  
  
  _COLOR_CODES = {
-     "white": '\033[0m',
+     "white": u'\033[0m',
-     "red":  '\033[31m',
+     "red":  u'\033[31m',
-     "green": '\033[32m',
+     "green": u'\033[32m',
-     "orange": '\033[33m',
+     "orange": u'\033[33m',
-     "blue": '\033[34m',
+     "blue": u'\033[34m',
-     "purple": '\033[35m',
+     "purple": u'\033[35m',
-     "W": '\033[0m',
+     "W": u'\033[0m',
-     "R":  '\033[31m',
+     "R": u'\033[31m',
-     "G": '\033[32m',
+     "G": u'\033[32m',
-     "O": '\033[33m',
+     "O": u'\033[33m',
-     "B": '\033[34m',
+     "B": u'\033[34m',
-     "P": '\033[35m'
+     "P": u'\033[35m'
  }
  
  
  def console_log(data, color="white", end="\n"):
      """
      log data to console.
      (if not flush console log, Gitlab-CI won't update logs during job execution)
  
      :param data: data content
      :param color: color
      """
      if color not in _COLOR_CODES:
          color = "white"
      color_codes = _COLOR_CODES[color]
+     if type(data) is type(b''):
+         data = data.decode('utf-8', 'replace')
      print(color_codes + data, end=end)
      if color not in ["white", "W"]:
          # reset color to white for later logs
-         print(_COLOR_CODES["white"] + "\r")
+         print(_COLOR_CODES["white"] + u"\r")
      sys.stdout.flush()
  
Make Utility.console_log accept Unicode and byte strings as well
## Code Before:
from __future__ import print_function
import sys


_COLOR_CODES = {
    "white": '\033[0m',
    "red":  '\033[31m',
    "green": '\033[32m',
    "orange": '\033[33m',
    "blue": '\033[34m',
    "purple": '\033[35m',
    "W": '\033[0m',
    "R":  '\033[31m',
    "G": '\033[32m',
    "O": '\033[33m',
    "B": '\033[34m',
    "P": '\033[35m'
}


def console_log(data, color="white", end="\n"):
    """
    log data to console.
    (if not flush console log, Gitlab-CI won't update logs during job execution)

    :param data: data content
    :param color: color
    """
    if color not in _COLOR_CODES:
        color = "white"
    color_codes = _COLOR_CODES[color]
    print(color_codes + data, end=end)
    if color not in ["white", "W"]:
        # reset color to white for later logs
        print(_COLOR_CODES["white"] + "\r")
    sys.stdout.flush()

## Instruction:
Make Utility.console_log accept Unicode and byte strings as well
## Code After:
from __future__ import print_function
import sys


_COLOR_CODES = {
    "white": u'\033[0m',
    "red":  u'\033[31m',
    "green": u'\033[32m',
    "orange": u'\033[33m',
    "blue": u'\033[34m',
    "purple": u'\033[35m',
    "W": u'\033[0m',
    "R": u'\033[31m',
    "G": u'\033[32m',
    "O": u'\033[33m',
    "B": u'\033[34m',
    "P": u'\033[35m'
}


def console_log(data, color="white", end="\n"):
    """
    log data to console.
    (if not flush console log, Gitlab-CI won't update logs during job execution)

    :param data: data content
    :param color: color
    """
    if color not in _COLOR_CODES:
        color = "white"
    color_codes = _COLOR_CODES[color]
    if type(data) is type(b''):
        data = data.decode('utf-8', 'replace')
    print(color_codes + data, end=end)
    if color not in ["white", "W"]:
        # reset color to white for later logs
        print(_COLOR_CODES["white"] + u"\r")
    sys.stdout.flush()
