2010-08-16 12:52:39 -04:00
|
|
|
import logging
|
2010-12-05 16:56:33 -05:00
|
|
|
import re
|
2011-12-18 23:48:44 -08:00
|
|
|
import string
|
2012-07-13 14:56:12 -07:00
|
|
|
import time
|
2011-09-16 09:26:22 -07:00
|
|
|
from django.core.handlers.wsgi import WSGIRequest
|
2011-12-18 23:48:44 -08:00
|
|
|
from django.conf import settings
|
2010-08-16 12:52:39 -04:00
|
|
|
|
2011-05-08 19:25:58 -04:00
|
|
|
class NullHandler(logging.Handler): #exists in python 3.1
|
|
|
|
def emit(self, record):
|
|
|
|
pass
|
|
|
|
|
2010-08-16 12:52:39 -04:00
|
|
|
def getlogger():
|
|
|
|
logger = logging.getLogger('newsblur')
|
|
|
|
return logger
|
|
|
|
|
2011-02-23 13:46:47 -05:00
|
|
|
def user(u, msg):
|
2011-09-16 09:26:22 -07:00
|
|
|
platform = '------'
|
2012-07-13 14:56:12 -07:00
|
|
|
time_elapsed = ""
|
2011-09-16 09:26:22 -07:00
|
|
|
if isinstance(u, WSGIRequest):
|
|
|
|
request = u
|
|
|
|
u = request.user
|
|
|
|
user_agent = request.environ.get('HTTP_USER_AGENT', '')
|
2012-06-30 11:59:17 -07:00
|
|
|
if 'iPad App' in user_agent:
|
|
|
|
platform = 'iPad'
|
|
|
|
elif 'iPhone App' in user_agent:
|
2011-09-16 09:26:22 -07:00
|
|
|
platform = 'iPhone'
|
|
|
|
elif 'Blar' in user_agent:
|
|
|
|
platform = 'Blar'
|
2012-07-03 17:00:09 -07:00
|
|
|
elif 'Android' in user_agent:
|
|
|
|
platform = 'Androd'
|
2011-09-16 09:26:22 -07:00
|
|
|
elif 'MSIE' in user_agent:
|
|
|
|
platform = 'IE'
|
2012-07-12 22:26:49 -07:00
|
|
|
if 'MSIE 9' in user_agent:
|
|
|
|
platform += '9'
|
|
|
|
elif 'MSIE 10' in user_agent:
|
|
|
|
platform += '10'
|
|
|
|
elif 'MSIE 8' in user_agent:
|
|
|
|
platform += '8'
|
2011-09-16 09:26:22 -07:00
|
|
|
elif 'Chrome' in user_agent:
|
|
|
|
platform = 'Chrome'
|
|
|
|
elif 'Safari' in user_agent:
|
|
|
|
platform = 'Safari'
|
2011-12-17 13:24:50 -08:00
|
|
|
elif 'MeeGo' in user_agent:
|
|
|
|
platform = 'MeeGo'
|
2011-09-16 09:26:22 -07:00
|
|
|
elif 'Firefox' in user_agent:
|
|
|
|
platform = 'FF'
|
|
|
|
elif 'Opera' in user_agent:
|
|
|
|
platform = 'Opera'
|
2011-12-22 15:16:45 -08:00
|
|
|
elif 'WP7' in user_agent:
|
|
|
|
platform = 'WP7'
|
2012-07-13 14:56:12 -07:00
|
|
|
|
|
|
|
if hasattr(request, 'start_time'):
|
|
|
|
now = time.time()
|
|
|
|
time_elapsed = "[%.4ss] " % (now - request.start_time)
|
2011-02-23 13:46:47 -05:00
|
|
|
premium = '*' if u.is_authenticated() and u.profile.is_premium else ''
|
2012-01-04 21:49:55 -08:00
|
|
|
username = cipher(unicode(u)) if settings.CIPHER_USERNAMES else u
|
2012-07-13 14:56:12 -07:00
|
|
|
info(' ---> [~FB~SN%-6s~SB] [%s%s] %s%s' % (platform, time_elapsed, username, premium, msg))
|
2011-12-18 23:48:44 -08:00
|
|
|
|
|
|
|
def cipher(msg):
|
|
|
|
shift = len(msg)
|
|
|
|
in_alphabet = unicode(string.ascii_lowercase)
|
|
|
|
out_alphabet = in_alphabet[shift:] + in_alphabet[:shift]
|
|
|
|
translation_table = dict((ord(ic), oc) for ic, oc in zip(in_alphabet, out_alphabet))
|
|
|
|
|
|
|
|
return msg.translate(translation_table)
|
2011-02-23 13:46:47 -05:00
|
|
|
|
2010-08-16 12:52:39 -04:00
|
|
|
def debug(msg):
|
|
|
|
logger = getlogger()
|
2010-12-05 16:56:33 -05:00
|
|
|
logger.debug(colorize(msg))
|
2010-08-16 12:52:39 -04:00
|
|
|
|
|
|
|
def info(msg):
|
|
|
|
logger = getlogger()
|
2010-12-05 16:56:33 -05:00
|
|
|
logger.info(colorize(msg))
|
2010-08-16 12:52:39 -04:00
|
|
|
|
|
|
|
def error(msg):
|
|
|
|
logger = getlogger()
|
2010-12-07 23:51:58 -05:00
|
|
|
logger.error(msg)
|
2010-12-05 16:56:33 -05:00
|
|
|
|
|
|
|
def colorize(msg):
|
|
|
|
params = {
|
2010-12-05 16:59:48 -05:00
|
|
|
r'\-\-\->' : '~FB~SB--->~FW',
|
|
|
|
r'\*\*\*>' : '~FB~SB~BB--->~BT~FW',
|
|
|
|
r'\[' : '~SB~FB[~SN~FM',
|
2010-12-05 17:01:14 -05:00
|
|
|
r'AnonymousUser' : '~FBAnonymousUser',
|
2011-02-23 13:46:47 -05:00
|
|
|
r'\*\]' : '~SN~FR*]',
|
2010-12-05 16:59:48 -05:00
|
|
|
r'\]' : '~FB~SB]~FW~SN',
|
2010-12-05 16:56:33 -05:00
|
|
|
}
|
|
|
|
colors = {
|
|
|
|
'~SB' : Style.BRIGHT,
|
|
|
|
'~SN' : Style.NORMAL,
|
|
|
|
'~SK' : Style.BLINK,
|
|
|
|
'~SU' : Style.UNDERLINE,
|
|
|
|
'~ST' : Style.RESET_ALL,
|
|
|
|
'~FK': Fore.BLACK,
|
|
|
|
'~FR': Fore.RED,
|
|
|
|
'~FG': Fore.GREEN,
|
|
|
|
'~FY': Fore.YELLOW,
|
|
|
|
'~FB': Fore.BLUE,
|
|
|
|
'~FM': Fore.MAGENTA,
|
|
|
|
'~FC': Fore.CYAN,
|
|
|
|
'~FW': Fore.WHITE,
|
|
|
|
'~FT': Fore.RESET,
|
|
|
|
'~BK': Back.BLACK,
|
|
|
|
'~BR': Back.RED,
|
|
|
|
'~BG': Back.GREEN,
|
|
|
|
'~BY': Back.YELLOW,
|
|
|
|
'~BB': Back.BLUE,
|
|
|
|
'~BM': Back.MAGENTA,
|
|
|
|
'~BC': Back.CYAN,
|
|
|
|
'~BW': Back.WHITE,
|
|
|
|
'~BT': Back.RESET,
|
|
|
|
}
|
|
|
|
for k, v in params.items():
|
|
|
|
msg = re.sub(k, v, msg)
|
|
|
|
msg = msg + '~ST~FW~BT'
|
|
|
|
msg = re.sub(r'(~[A-Z]{2})', r'%(\1)s', msg)
|
2010-12-07 23:58:01 -05:00
|
|
|
try:
|
|
|
|
msg = msg % colors
|
2011-02-05 15:34:43 -05:00
|
|
|
except (TypeError, ValueError, KeyError):
|
2010-12-07 23:58:01 -05:00
|
|
|
pass
|
2011-07-27 09:33:34 -07:00
|
|
|
return msg
|
|
|
|
|
|
|
|
'''
|
|
|
|
This module generates ANSI character codes to printing colors to terminals.
|
|
|
|
See: http://en.wikipedia.org/wiki/ANSI_escape_code
|
|
|
|
'''
|
|
|
|
|
|
|
|
COLOR_ESC = '\033['
|
|
|
|
|
|
|
|
class AnsiCodes(object):
|
|
|
|
def __init__(self, codes):
|
|
|
|
for name in dir(codes):
|
|
|
|
if not name.startswith('_'):
|
|
|
|
value = getattr(codes, name)
|
|
|
|
setattr(self, name, COLOR_ESC + str(value) + 'm')
|
|
|
|
|
|
|
|
class AnsiFore:
|
|
|
|
BLACK = 30
|
|
|
|
RED = 31
|
|
|
|
GREEN = 32
|
|
|
|
YELLOW = 33
|
|
|
|
BLUE = 34
|
|
|
|
MAGENTA = 35
|
|
|
|
CYAN = 36
|
|
|
|
WHITE = 37
|
|
|
|
RESET = 39
|
|
|
|
|
|
|
|
class AnsiBack:
|
|
|
|
BLACK = 40
|
|
|
|
RED = 41
|
|
|
|
GREEN = 42
|
|
|
|
YELLOW = 43
|
|
|
|
BLUE = 44
|
|
|
|
MAGENTA = 45
|
|
|
|
CYAN = 46
|
|
|
|
WHITE = 47
|
|
|
|
RESET = 49
|
|
|
|
|
|
|
|
class AnsiStyle:
|
|
|
|
BRIGHT = 1
|
|
|
|
DIM = 2
|
|
|
|
UNDERLINE = 4
|
|
|
|
BLINK = 5
|
|
|
|
NORMAL = 22
|
|
|
|
RESET_ALL = 0
|
|
|
|
|
|
|
|
Fore = AnsiCodes(AnsiFore)
|
|
|
|
Back = AnsiCodes(AnsiBack)
|
|
|
|
Style = AnsiCodes(AnsiStyle)
|