-
Notifications
You must be signed in to change notification settings - Fork 0
/
lately.py
117 lines (98 loc) · 3.41 KB
/
lately.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python
# encoding: utf-8
"""
lately.py
Created by Emil Erlandsson on 2011-02-15.
Copyright (c) 2011 Emil Erlandsson. All rights reserved.
"""
import datetime
import sys
import os
import re
DONE = "done.txt"
# Bash coloring from:
# https://github.com/emilerl/emilerl/blob/master/pybash/bash/__init__.py
RESET = '\033[0m'
CCODES = {
'black' :'\033[0;30m',
'blue' :'\033[0;34m',
'green' :'\033[0;32m',
'cyan' :'\033[0;36m',
'red' :'\033[0;31m',
'purple' :'\033[0;35m',
'brown' :'\033[0;33m',
'light_gray' :'\033[0;37m',
'dark_gray' :'\033[0;30m',
'light_blue' :'\033[0;34m',
'light_green' :'\033[0;32m',
'light_cyan' :'\033[0;36m',
'light_red' :'\033[0;31m',
'light_purple' :'\033[0;35m',
'yellow' :'\033[0;33m',
'white' :'\033[0;37m',
}
class Colors(object):
"""A helper class to colorize strings"""
def __init__(self, state = False):
self.disabled = state
def disable(self):
self.disabled = True
def enable(self):
self.disabled = False
def __getattr__(self,key):
if key not in CCODES.keys():
raise AttributeError, "Colors object has no attribute '%s'" % key
else:
if self.disabled:
return lambda x: x
else:
return lambda x: RESET + CCODES[key] + x + RESET
def __dir__(self):
return self.__class__.__dict__.keys() + CCODES.keys()
def main(directory, cutoff_days = 7):
f = open(os.path.join(directory, DONE), 'r')
lines = f.readlines()
today = datetime.datetime.today()
cutoff = today - datetime.timedelta(days=cutoff_days)
c = Colors()
if os.environ['TODOTXT_PLAIN'] == '1':
c.disable()
print c.red("\nClosed tasks since %s\n" % cutoff.strftime("%Y.%m.%d"))
for line in lines:
m = re.match("x ([\d]{4}-[\d]{2}-[\d]{2}).*", line)
# m = re.match("x ([\d]{4}.[\d]{2}.[\d]{2}).*", line)
if m is not None:
done = m.group(1)
# print m.group(1)
year, month, day = m.group(1).split("-")
#year, month, day = m.group(1).split(".")
# if day == '00':
# # match.group(3) ='01'
# day1="01"
# # print matchUpdate
# # print 'hello'
# if month == '00':
# #match.group(2) = '01'
# month1="01"
# # print matchUpdate
# else:
# day1=day
# month1=month
#
# completed = datetime.datetime(int(year),int(month1),int(day1))
completed = datetime.datetime(int(year),int(month),int(day))
if completed >= cutoff:
print c.green(m.group(1)) + " " + c.blue(line.replace("x %s" % m.group(1), "").strip())
print ""
if __name__ == '__main__':
if len(sys.argv) < 2:
print "Usage: lately.py [TODO_DIR] <days back>"
sys.exit(1)
if os.path.isdir(sys.argv[1]):
if len(sys.argv) is 3:
main(sys.argv[1], int(sys.argv[2]))
else:
main(sys.argv[1])
else:
print "Error: %s is not a directory" % sys.argv[1]
sys.exit(1)