hw: replace with python that uses due
also move due to a .py so it can be imported
This commit is contained in:
parent
c36a301d08
commit
07d05db080
83
due
83
due
@ -1,83 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
from datetime import datetime
|
|
||||||
import parsedatetime
|
|
||||||
|
|
||||||
TAGS = ['t', 'due']
|
|
||||||
|
|
||||||
class todo_item:
|
|
||||||
tag = []
|
|
||||||
full_tag = ""
|
|
||||||
date = None
|
|
||||||
text = ""
|
|
||||||
fancy_text = ""
|
|
||||||
|
|
||||||
def __init__(self, text):
|
|
||||||
self.text = text
|
|
||||||
try:
|
|
||||||
self.full_tag = re.findall("[^ ]+:\\d\\d\\d\\d-\\d\\d-\\d\\d", text)[0].strip()
|
|
||||||
self.tag = self.full_tag.split(":")
|
|
||||||
self.date = datetime.strptime(self.tag[1], "%Y-%m-%d")
|
|
||||||
except IndexError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
if self.text:
|
|
||||||
return self.text
|
|
||||||
else:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def fancy_print(self, relative=False):
|
|
||||||
if self.date < datetime.today():
|
|
||||||
#if the date has already passed, wrap with bold/unbold escapes
|
|
||||||
fancy_text = self.text.replace(self.full_tag,
|
|
||||||
'\033[1m' + self.full_tag + '\033[22m')
|
|
||||||
else:
|
|
||||||
fancy_text = self.text
|
|
||||||
|
|
||||||
if relative:
|
|
||||||
difference = (self.date - datetime.now()).days + 1
|
|
||||||
fancy_text = fancy_text.replace(self.full_tag,
|
|
||||||
"{}:{} days".format(self.tag[0],
|
|
||||||
difference))
|
|
||||||
|
|
||||||
return fancy_text
|
|
||||||
|
|
||||||
def add(date_input, desc):
|
|
||||||
cal = parsedatetime.Calendar()
|
|
||||||
time_struct, parse_status = cal.parse(date_input)
|
|
||||||
date = datetime(*time_struct[:6]).strftime("%Y-%m-%d")
|
|
||||||
subprocess.call(["todo.sh", "add", desc, "t:" + date])
|
|
||||||
|
|
||||||
def due(search_term="", relative=False):
|
|
||||||
command = ["todo.sh", "list"]
|
|
||||||
command.append(search_term)
|
|
||||||
lines = subprocess.check_output(command).decode(encoding='UTF-8').split('\n')
|
|
||||||
items = []
|
|
||||||
|
|
||||||
for line in lines:
|
|
||||||
if " t:" in line:
|
|
||||||
item = todo_item(line)
|
|
||||||
if item.date is not None:
|
|
||||||
items.append(item)
|
|
||||||
|
|
||||||
items.sort(key= lambda x: x.date)
|
|
||||||
|
|
||||||
for i in items:
|
|
||||||
print(i.fancy_print(relative))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
if len(sys.argv) >= 3:
|
|
||||||
if sys.argv[2] == "-r":
|
|
||||||
relative = True
|
|
||||||
del sys.argv[2]
|
|
||||||
else:
|
|
||||||
relative = False
|
|
||||||
search_term = " ".join(sys.argv[2:])
|
|
||||||
due(search_term, relative)
|
|
||||||
else:
|
|
||||||
due()
|
|
83
due.py
Executable file
83
due.py
Executable file
@ -0,0 +1,83 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
import parsedatetime
|
||||||
|
|
||||||
|
TAGS = ['t', 'due']
|
||||||
|
|
||||||
|
class todo_item:
|
||||||
|
tag = []
|
||||||
|
full_tag = ""
|
||||||
|
date = None
|
||||||
|
text = ""
|
||||||
|
fancy_text = ""
|
||||||
|
|
||||||
|
def __init__(self, text):
|
||||||
|
self.text = text
|
||||||
|
try:
|
||||||
|
self.full_tag = re.findall("[^ ]+:\\d\\d\\d\\d-\\d\\d-\\d\\d", text)[0].strip()
|
||||||
|
self.tag = self.full_tag.split(":")
|
||||||
|
self.date = datetime.strptime(self.tag[1], "%Y-%m-%d")
|
||||||
|
except IndexError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
if self.text:
|
||||||
|
return self.text
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def fancy_print(self, relative=False):
|
||||||
|
if self.date < datetime.today():
|
||||||
|
#if the date has already passed, wrap with bold/unbold escapes
|
||||||
|
fancy_text = self.text.replace(self.full_tag,
|
||||||
|
'\033[1m' + self.full_tag + '\033[22m')
|
||||||
|
else:
|
||||||
|
fancy_text = self.text
|
||||||
|
|
||||||
|
if relative:
|
||||||
|
difference = (self.date - datetime.now()).days + 1
|
||||||
|
fancy_text = fancy_text.replace(self.full_tag,
|
||||||
|
"{}:{} days".format(self.tag[0],
|
||||||
|
difference))
|
||||||
|
|
||||||
|
return fancy_text
|
||||||
|
|
||||||
|
def add(date_input, desc):
|
||||||
|
cal = parsedatetime.Calendar()
|
||||||
|
time_struct, parse_status = cal.parse(date_input)
|
||||||
|
date = datetime(*time_struct[:6]).strftime("%Y-%m-%d")
|
||||||
|
subprocess.call(["todo.sh", "add", desc, "t:" + date])
|
||||||
|
|
||||||
|
def due(search_term="", relative=False):
|
||||||
|
command = ["todo.sh", "list"]
|
||||||
|
command.append(search_term)
|
||||||
|
lines = subprocess.check_output(command).decode(encoding='UTF-8').split('\n')
|
||||||
|
items = []
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
if " t:" in line:
|
||||||
|
item = todo_item(line)
|
||||||
|
if item.date is not None:
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
items.sort(key= lambda x: x.date)
|
||||||
|
|
||||||
|
for i in items:
|
||||||
|
print(i.fancy_print(relative))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) >= 3:
|
||||||
|
if sys.argv[2] == "-r":
|
||||||
|
relative = True
|
||||||
|
del sys.argv[2]
|
||||||
|
else:
|
||||||
|
relative = False
|
||||||
|
search_term = " ".join(sys.argv[2:])
|
||||||
|
due(search_term, relative)
|
||||||
|
else:
|
||||||
|
due()
|
113
hw
113
hw
@ -1,72 +1,47 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
me="$(basename $0)"
|
import sys
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
import subprocess
|
||||||
|
import parsedatetime
|
||||||
|
|
||||||
textToDate ()
|
import due
|
||||||
{
|
|
||||||
if [ ! "$(grep -P "(\d\d\.?){3}" <<< "$1")" ]
|
|
||||||
then
|
|
||||||
d=$(sed 's/^\(next\|n\)$/tomorrow/' <<< "$1")
|
|
||||||
date --date="$d" +"%Y-%m-%d" || exit 1
|
|
||||||
else
|
|
||||||
echo "$1";
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$1" = "usage" ]
|
PRIORITY = "(B)"
|
||||||
then
|
|
||||||
echo " hw"
|
if len(sys.argv) < 2:
|
||||||
echo " list homework"
|
print("Not enough args!")
|
||||||
echo " hw add"
|
exit(0)
|
||||||
echo " prompt for adding an assignment"
|
|
||||||
echo " hw [due date] [class] [description]"
|
if sys.argv[1] == "usage":
|
||||||
echo " add an assignment without a prompt"
|
print(" hw\n"
|
||||||
echo " hw [date]"
|
" list homework\n"
|
||||||
echo " list assignments due on [date]"
|
" hw rel\n"
|
||||||
echo " hw rel"
|
" list assignments with the dates in days relative to today\n"
|
||||||
echo " list assignments with the dates in days relative to today"
|
" hw due [date]\n"
|
||||||
exit 0
|
" list assignments due on [date]\n"
|
||||||
fi
|
" hw add\n"
|
||||||
shift
|
" prompt for adding an assignment\n"
|
||||||
|
" hw add [due date] [class] [description]\n"
|
||||||
if [ "$1" = "add" ]
|
" add an assignment without a prompt\n")
|
||||||
then
|
exit(0)
|
||||||
read -p "Due: " due
|
|
||||||
due="$(textToDate "$date")"
|
if len(sys.argv) < 3 or sys.argv[2] == "due": #default case
|
||||||
read -p "Class: " class
|
due.due("+hw")
|
||||||
read -p "Description: " desc
|
elif sys.argv[2] == "rel":
|
||||||
"$TODO_FULL_SH" add "(B) +hw" "class:$class $due $desc"
|
due.due("+hw", True)
|
||||||
elif [ "$1" = "rel" ]
|
elif sys.argv[2] == "add":
|
||||||
then
|
if len(sys.argv) == 3: #prompt
|
||||||
"$TODO_FULL_SH" "$me" | sed -e "s/.*/echo \'&\'/g;s/due:\([0-9-]*\)/due:\'"'$(( ($(date --date="\1" +%s) - $(date --date="00:00" +%s)) \/ 86400 ))'"\'d/ge"
|
c = input("Class")
|
||||||
elif [ -n "$1" -a -n "$2" -a -n "$3" ]
|
date = input("Date")
|
||||||
then
|
desc = input("Assignment")
|
||||||
due="due:$(textToDate "$1")" || { echo "invalid date" ; exit 1; }
|
due.add(date, "{} +hw class:{} {}".format(PRIORITY, c, desc))
|
||||||
shift
|
elif len(sys.argv) >= 6:
|
||||||
class="class:$1"
|
print(sys.argv[3:])
|
||||||
shift
|
due.add(sys.argv[3],
|
||||||
"$TODO_FULL_SH" add "(B) +hw $due $class $@"
|
"{} +hw class:{} {}".format(PRIORITY,
|
||||||
else
|
sys.argv[4],
|
||||||
IFS=$'\n'
|
" ".join(sys.argv[5:])))
|
||||||
today=$(textToDate "today" | tr -d '-')
|
else:
|
||||||
if [ -n "$1" ]
|
print("Invalid args")
|
||||||
then
|
|
||||||
inDate="$(textToDate "$1" | tr -d '-' | cut -f1)"
|
|
||||||
fi
|
|
||||||
for i in $("$TODO_FULL_SH" list | grep "+hw")
|
|
||||||
do
|
|
||||||
date=$(grep -oP "due:\K[0-9-]*" <<< "$i"| tr -d '-' | cut -f1)
|
|
||||||
if [ "$date" -le "$today" ]
|
|
||||||
then
|
|
||||||
echo "$i" | sed "s/\(due:[0-9-]*\)/$(tput bold)\1$(tput sgr0)/g"
|
|
||||||
elif [ -n "$inDate" ]
|
|
||||||
then
|
|
||||||
if [ "$date" -eq "$inDate" ]
|
|
||||||
then
|
|
||||||
echo "$i"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$i"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
Loading…
Reference in New Issue
Block a user