| | import os |
| | import time |
| | from contextlib import contextmanager |
| | from typing import Callable, Optional |
| |
|
| | _inited = False |
| |
|
| |
|
| | def _lazy_colorama_init(): |
| | """ |
| | Lazily init colorama if necessary, not to screw up stdout if debugging is |
| | not enabled. |
| | |
| | This version of the function does nothing. |
| | """ |
| |
|
| |
|
| | try: |
| | if os.name == 'nt': |
| | |
| | raise ImportError |
| | else: |
| | |
| | from colorama import Fore, init |
| | from colorama import initialise |
| |
|
| | def _lazy_colorama_init(): |
| | """ |
| | Lazily init colorama if necessary, not to screw up stdout is |
| | debug not enabled. |
| | |
| | This version of the function does init colorama. |
| | """ |
| | global _inited |
| | if not _inited: |
| | |
| | |
| | |
| | initialise.atexit_done = True |
| | try: |
| | init(strip=False) |
| | except Exception: |
| | |
| | |
| | pass |
| | _inited = True |
| |
|
| | except ImportError: |
| | class Fore: |
| | RED = '' |
| | GREEN = '' |
| | YELLOW = '' |
| | MAGENTA = '' |
| | RESET = '' |
| | BLUE = '' |
| |
|
| | NOTICE = object() |
| | WARNING = object() |
| | SPEED = object() |
| |
|
| | enable_speed = False |
| | enable_warning = False |
| | enable_notice = False |
| |
|
| | |
| | debug_function: Optional[Callable[[str, str], None]] = None |
| | _debug_indent = 0 |
| | _start_time = time.time() |
| |
|
| |
|
| | def reset_time(): |
| | global _start_time, _debug_indent |
| | _start_time = time.time() |
| | _debug_indent = 0 |
| |
|
| |
|
| | def increase_indent(func): |
| | """Decorator for makin """ |
| | def wrapper(*args, **kwargs): |
| | with increase_indent_cm(): |
| | return func(*args, **kwargs) |
| | return wrapper |
| |
|
| |
|
| | @contextmanager |
| | def increase_indent_cm(title=None, color='MAGENTA'): |
| | global _debug_indent |
| | if title: |
| | dbg('Start: ' + title, color=color) |
| | _debug_indent += 1 |
| | try: |
| | yield |
| | finally: |
| | _debug_indent -= 1 |
| | if title: |
| | dbg('End: ' + title, color=color) |
| |
|
| |
|
| | def dbg(message, *args, color='GREEN'): |
| | """ Looks at the stack, to see if a debug message should be printed. """ |
| | assert color |
| |
|
| | if debug_function and enable_notice: |
| | i = ' ' * _debug_indent |
| | _lazy_colorama_init() |
| | debug_function(color, i + 'dbg: ' + message % tuple(repr(a) for a in args)) |
| |
|
| |
|
| | def warning(message, *args, format=True): |
| | if debug_function and enable_warning: |
| | i = ' ' * _debug_indent |
| | if format: |
| | message = message % tuple(repr(a) for a in args) |
| | debug_function('RED', i + 'warning: ' + message) |
| |
|
| |
|
| | def speed(name): |
| | if debug_function and enable_speed: |
| | now = time.time() |
| | i = ' ' * _debug_indent |
| | debug_function('YELLOW', i + 'speed: ' + '%s %s' % (name, now - _start_time)) |
| |
|
| |
|
| | def print_to_stdout(color, str_out): |
| | """ |
| | The default debug function that prints to standard out. |
| | |
| | :param str color: A string that is an attribute of ``colorama.Fore``. |
| | """ |
| | col = getattr(Fore, color) |
| | _lazy_colorama_init() |
| | print(col + str_out + Fore.RESET) |
| |
|