-import logging
#
# Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license.
#
import logging
-import os
import re
+import platform
import sys
+if platform.system() == 'Windows':
+ import ctypes
+ import ctypes.wintypes
+
+ # Reference: https://gist.github.com/vsajip/758430
+ # https://github.com/ipython/ipython/issues/4252
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx
+ ctypes.windll.kernel32.SetConsoleTextAttribute.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
+ ctypes.windll.kernel32.SetConsoleTextAttribute.restype = ctypes.wintypes.BOOL
+
+
class ColorizingStreamHandler(logging.StreamHandler):
# color names to indices
color_map = {
}
# levels to (background, foreground, bold/intense)
- if os.name == 'nt':
- level_map = {
- logging.DEBUG: (None, 'white', False),
- logging.INFO: (None, 'green', False),
- logging.WARNING: (None, 'yellow', False),
- logging.ERROR: (None, 'red', False),
- logging.CRITICAL: ('red', 'white', False)
- }
- else:
- level_map = {
- logging.DEBUG: (None, 'white', False),
- logging.INFO: (None, 'green', False),
- logging.WARNING: (None, 'yellow', False),
- logging.ERROR: (None, 'red', False),
- logging.CRITICAL: ('red', 'white', False)
- }
+ level_map = {
+ logging.DEBUG: (None, 'blue', False),
+ logging.INFO: (None, 'green', False),
+ logging.WARNING: (None, 'yellow', False),
+ logging.ERROR: (None, 'red', False),
+ logging.CRITICAL: ('red', 'white', False)
+ }
csi = '\x1b['
reset = '\x1b[0m'
disable_coloring = False
isatty = getattr(self.stream, 'isatty', None)
return isatty and isatty() and not self.disable_coloring
- if os.name != 'nt':
+ def emit(self, record):
+ try:
+ message = self.format(record)
+ stream = self.stream
+
+ if not self.is_tty:
+ if message and message[0] == "\r":
+ message = message[1:]
+ stream.write(message)
+ else:
+ self.output_colorized(message)
+ stream.write(getattr(self, 'terminator', '\n'))
+
+ self.flush()
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ except IOError:
+ pass
+ except:
+ self.handleError(record)
+
+
+ if not platform.system() == 'Windows':
def output_colorized(self, message):
self.stream.write(message)
else:
}
def output_colorized(self, message):
- import ctypes
-
parts = self.ansi_esc.split(message)
write = self.stream.write
h = None
text = parts.pop(0)
if text:
- write(text)
+ if sys.version_info < (3, 0, 0):
+ write(text.encode('utf-8'))
+ else:
+ write(text)
if parts:
params = parts.pop(0)
prefix = ""
message = "%s%s" % (prefix, ''.join((self.csi, ';'.join(params),
- 'm', message, self.reset)))
+ 'm', message, self.reset)))
return message
message = logging.StreamHandler.format(self, record)
return self.colorize(message, record)
+
logging.addLevelName(15, "INFO")
logger = logging.getLogger('nhentai')
LOGGER_HANDLER = ColorizingStreamHandler(sys.stdout)
if __name__ == '__main__':
logger.log(15, 'nhentai')
logger.info('info')
- logger.warn('warn')
+ logger.warning('warning')
logger.debug('debug')
logger.error('error')
logger.critical('critical')