2 from datetime import datetime
5 '\0', '#', '#', '#', '#', '.', '#', '#',
6 '#', 9, 10, '#', ' ', 13, '.', '.',
7 '[', ']', '0', '1', '2', '3', '4', '5',
8 '6', '7', '8', '9', '.', '<', '=', '>',
9 ' ', '!', '"', '#', '$', '%', '&', '\'',
10 '(', ')', '*', '+', ',', '-', '.', '/',
11 '0', '1', '2', '3', '4', '5', '6', '7',
12 '8', '9', ':', ';', '<', '=', '>', '?',
13 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
14 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
15 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
16 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
17 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
18 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
19 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
20 'x', 'y', 'z', '{', '|', '}', '~', '<',
22 '<', '=', '>', '#', '#', '.', '#', '#',
23 '#', '#', ' ', '#', ' ', '>', '.', '.',
24 '[', ']', '0', '1', '2', '3', '4', '5',
25 '6', '7', '8', '9', '.', '<', '=', '>',
26 ' ', '!', '"', '#', '$', '%', '&', '\'',
27 '(', ')', '*', '+', ',', '-', '.', '/',
28 '0', '1', '2', '3', '4', '5', '6', '7',
29 '8', '9', ':', ';', '<', '=', '>', '?',
30 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
31 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
32 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
33 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
34 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
35 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
36 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
37 'x', 'y', 'z', '{', '|', '}', '~', '<'
41 def qfont_decode(qstr=''):
43 Convert a name from qfont to ascii.
44 'qstr' must be a unicode string.
46 by = bytearray(qstr, 'latin_1')
47 return ''.join([qfont_table[b & 0xff] for b in by])
50 def strip_colors(str=''):
54 str = re.sub(r'\^x\w\w\w', '', str)
55 str = re.sub(r'\^\d', '', str)
59 def html_colors(str=''):
64 str = re.sub(r'\^x(\w)(\w)(\w)',
65 "<span style='color:#\g<1>\g<1>\g<2>\g<2>\g<3>\g<3>'>", str)
66 str = re.sub(r'\^1', "<span style='color:#FF9900'>", str)
67 str = re.sub(r'\^2', "<span style='color:#33FF00'>", str)
68 str = re.sub(r'\^3', "<span style='color:#FFFF00'>", str)
69 str = re.sub(r'\^4', "<span style='color:#3366FF'>", str)
70 str = re.sub(r'\^5', "<span style='color:#33FFFF'>", str)
71 str = re.sub(r'\^6', "<span style='color:#FF3366'>", str)
72 str = re.sub(r'\^7', "<span style='color:#FFFFFF'>", str)
73 str = re.sub(r'\^8', "<span style='color:#999999'>", str)
74 str = re.sub(r'\^9', "<span style='color:#666666'>", str)
75 str = re.sub(r'\^0', "<span style='color:#333333'>", str)
77 for span in range(len(re.findall(r'\^x\w\w\w|\^\d', orig))):
84 return current_route_url(request, page=page, _query=request.GET)
87 def pretty_date(time=False):
89 Get a datetime object or a int() Epoch timestamp and return a
90 pretty string like 'an hour ago', 'Yesterday', '3 months ago',
95 diff = now - datetime.fromtimestamp(time)
96 elif isinstance(time,datetime):
100 second_diff = diff.seconds
110 return str(second_diff) + " seconds ago"
111 if second_diff < 120:
112 return "a minute ago"
113 if second_diff < 3600:
114 return str( second_diff / 60 ) + " minutes ago"
115 if second_diff < 7200:
117 if second_diff < 86400:
118 return str( second_diff / 3600 ) + " hours ago"
122 return str(day_diff) + " days ago"
127 return str(day_diff/7) + " weeks ago"
132 return str(day_diff/30) + " months ago"
134 if day_diff/365 == 1:
137 return str(day_diff/365) + " years ago"