-
Notifications
You must be signed in to change notification settings - Fork 0
/
due.py
72 lines (63 loc) · 2.33 KB
/
due.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
#!/usr/bin/env python
"""
due.py
Python 2 script for todo.txt add-on
Created by Rebecca Morgan 2017-03-10
Copyright (c) 2017 Rebecca Morgan. All rights reserved.
"""
import os
import sys
from datetime import datetime, timedelta
import re
def main(todo_dir, future_days = 0):
# Prepare lists to store tasks
overdue = list()
due_today = list()
due_future = list()
# Open todo.txt file
with open(os.path.join(todo_dir,'todo.txt'), 'r') as f:
content = f.readlines()
date = datetime.today()
# Loop through content and look for due dates, assuming the key due: is used and standard date format
for i, task in enumerate(content):
match = re.search(r't:\d{4}-\d{2}-\d{2}', task)
if match is not None:
date = datetime.strptime(match.group()[2:], '%Y-%m-%d').date()
# Add matching tasks to list with line number
if date < datetime.today().date():
overdue.append(str(i+1).zfill(2) + " " + task)
elif date == datetime.today().date():
due_today.append(str(i+1).zfill(2) + " " + task)
elif date < datetime.today().date() + timedelta(days=future_days+1):
due_future.append(str(i+1).zfill(2) + " " + task)
# Print to console
if len(overdue) > 0:
print "==============================="
print "Overdue tasks:"
print "==============================="
for task in overdue:
print task,
if len(due_today) > 0:
print "==============================="
print "Tasks due today:"
print "==============================="
for task in due_today:
print task,
if len(due_future) > 0:
print "==============================="
print "Tasks due in the next " + str(future_days) + " days:"
print "==============================="
for task in due_future:
print task,
if __name__ == '__main__':
if len(sys.argv) < 2:
print "Usage: due.py [TODO_DIR] <future_days>"
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)