]> git.lizzy.rs Git - nhentai.git/blobdiff - nhentai/logger.py
Update serializer.py
[nhentai.git] / nhentai / logger.py
index 7d62582529803ac3050e64396976e3f753088fa8..7fb6c44e9055470f6b89c71dd473c097c379c78f 100644 (file)
@@ -1,13 +1,23 @@
-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 = {
@@ -22,22 +32,13 @@ class ColorizingStreamHandler(logging.StreamHandler):
     }
 
     # 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
@@ -47,7 +48,29 @@ class ColorizingStreamHandler(logging.StreamHandler):
         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:
@@ -65,8 +88,6 @@ class ColorizingStreamHandler(logging.StreamHandler):
         }
 
         def output_colorized(self, message):
-            import ctypes
-
             parts = self.ansi_esc.split(message)
             write = self.stream.write
             h = None
@@ -82,7 +103,10 @@ class ColorizingStreamHandler(logging.StreamHandler):
                 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)
@@ -127,7 +151,7 @@ class ColorizingStreamHandler(logging.StreamHandler):
                     prefix = ""
 
                 message = "%s%s" % (prefix, ''.join((self.csi, ';'.join(params),
-                                   'm', message, self.reset)))
+                                    'm', message, self.reset)))
 
         return message
 
@@ -135,6 +159,7 @@ class ColorizingStreamHandler(logging.StreamHandler):
         message = logging.StreamHandler.format(self, record)
         return self.colorize(message, record)
 
+
 logging.addLevelName(15, "INFO")
 logger = logging.getLogger('nhentai')
 LOGGER_HANDLER = ColorizingStreamHandler(sys.stdout)
@@ -148,7 +173,7 @@ logger.setLevel(logging.DEBUG)
 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')