summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2014-08-18 01:06:55 -0400
committerThibaut Horel <thibaut.horel@gmail.com>2014-08-18 01:06:55 -0400
commit270b47a9ef0624954b0f962b90d7c7aa089439ab (patch)
tree4a97a7a8668db14d22326ac2c1b1695611df6011
parentbac3ba044d8fd406aeff0489cbc533161f8f55cd (diff)
downloadmutt-helpers-master.tar.gz
First working version of email event parserHEADmaster
-rwxr-xr-xevent.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/event.py b/event.py
index e522a70..c079516 100755
--- a/event.py
+++ b/event.py
@@ -6,6 +6,10 @@ import sys
import email
from email.utils import parsedate
from itertools import takewhile, dropwhile
+from tempfile import mkstemp
+import os
+from subprocess import check_call
+from icalendar import Calendar, Event
days = [day.lower() for day in day_name]
days_abbr = [day.lower()[:3] for day in day_name]
@@ -162,19 +166,15 @@ def align(dates, times):
return r, unmatched
-def parse_text(text, ref=None):
- text, dates = parse_dates(text, ref)
- text, times = parse_times(text)
- return align(dates, times)
-
-
def parse_email(fp):
mail = email.message_from_file(fp)
values = parsedate(mail["date"])
subject = mail["subject"]
date = datetime(*values[:6]).date()
text = clean(mail.get_payload())
- m, u = parse_text(text, ref=date)
+ text, dates = parse_dates(text, date)
+ text, times = parse_times(text)
+ m, u = align(dates, times)
m.sort(key=lambda d: d[1][0])
if len(m) >= 2:
return subject, m[0][0], m[1][0]
@@ -183,12 +183,30 @@ def parse_email(fp):
else:
return subject, date, date + timedelta(hours=1)
+
def edit(subject, begin, end):
- pass
+ d = {"Summary": subject, "Start": begin.isoformat(),
+ "End": end.isoformat()}
+ fd, fname = mkstemp()
+ with open(fname, "w") as fo:
+ fo.write("\n".join(": ".join(e) for e in d.iteritems()))
+ editor = os.getenv("EDITOR") or "gvim"
+ check_call([editor, "-f", fname])
+ return fname
-if __name__ == "__main__":
- subject, begin, end = parse_email(sys.stdin)
+def gen_icalendar(file_name):
+ d = {key.strip(): value.strip() for key, value in
+ (line.split(": ", 1) for line in open(file_name))}
+ cal = Calendar()
+ event = Event()
+ event.add("summary", d["Summary"])
+ event.add("dtstart", datetime.strptime(d["Start"], "%Y-%m-%dT%H:%M:%S"))
+ event.add("dtend", datetime.strptime(d["End"], "%Y-%m-%dT%H:%M:%S"))
+ cal.add_component(event)
+ open(file_name, "w").write(cal.to_ical())
+ print file_name
- print begin.isoformat(), end.isoformat(), subject
+if __name__ == "__main__":
+ gen_icalendar(edit(*parse_email(sys.stdin)))
a = raw_input()