diff rhodecode/lib/colored_formatter.py @ 1186:b9ea10d3e419 beta

timperproxy will just measure the time of queries, and formatting will be handled by the new sql_formatter of queries from sqlalchemy itself. Updated ini files for new way logging
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 28 Mar 2011 22:13:21 +0200
parents 1e757ac98988
children 6832ef664673
line wrap: on
line diff
--- a/rhodecode/lib/colored_formatter.py	Mon Mar 28 21:28:16 2011 +0200
+++ b/rhodecode/lib/colored_formatter.py	Mon Mar 28 22:13:21 2011 +0200
@@ -14,8 +14,35 @@
     'WARNING': CYAN, # level 30
     'INFO': GREEN, # level 20
     'DEBUG': BLUE, # level 10
+    'SQL' : YELLOW
 }
 
+def one_space_trim(s):
+    if s.find("  ") == -1:
+        return s
+    else:
+        s = s.replace('  ', ' ')
+        return one_space_trim(s)
+
+def format_sql(sql):
+    sql = sql.replace('\n', '')
+    sql = one_space_trim(sql)
+    sql = sql\
+        .replace(',', ',\n\t')\
+        .replace('SELECT', '\n\tSELECT \n\t')\
+        .replace('UPDATE', '\n\tUPDATE \n\t')\
+        .replace('DELETE', '\n\tDELETE \n\t')\
+        .replace('FROM', '\n\tFROM')\
+        .replace('ORDER BY', '\n\tORDER BY')\
+        .replace('LIMIT', '\n\tLIMIT')\
+        .replace('WHERE', '\n\tWHERE')\
+        .replace('AND', '\n\tAND')\
+        .replace('LEFT', '\n\tLEFT')\
+        .replace('INNER', '\n\tINNER')\
+        .replace('INSERT', '\n\tINSERT')\
+        .replace('DELETE', '\n\tDELETE')
+    return sql
+
 class ColorFormatter(logging.Formatter):
 
     def __init__(self, *args, **kwargs):
@@ -26,13 +53,31 @@
         """
         Changes record's levelname to use with COLORS enum
         """
-        
+
         levelname = record.levelname
         start = COLOR_SEQ % (COLORS[levelname])
         def_record = logging.Formatter.format(self, record)
         end = RESET_SEQ
-        
+
         colored_record = start + def_record + end
         return colored_record
 
-logging.ColorFormatter = ColorFormatter
+
+class ColorFormatterSql(logging.Formatter):
+
+    def __init__(self, *args, **kwargs):
+        # can't do super(...) here because Formatter is an old school class
+        logging.Formatter.__init__(self, *args, **kwargs)
+
+    def format(self, record):
+        """
+        Changes record's levelname to use with COLORS enum
+        """
+
+        start = COLOR_SEQ % (COLORS['SQL'])
+        def_record = format_sql(logging.Formatter.format(self, record))
+        end = RESET_SEQ
+
+        colored_record = start + def_record + end
+        return colored_record
+