3 # configuration options
4 database_filename = "mako_open_todos.csv"
5 caldav_url = "https://mako:{pw}@nimbus.mako.cc/remote.php/dav/calendars/mako/personal/"
14 from caldav.elements import dav, cdav
16 # read password from a file
17 with open("nextcloud_password_file", "r") as f:
18 nimbus_password = f.read().strip()
20 current_timestamp = datetime.datetime.now()
21 data_original = pd.read_csv(database_filename)
23 def get_flags_for_maildir (maildir_name):
24 mb_counts = { 'unread' : 0, 'flagged' : 0 }
26 mb = mailbox.Maildir(maildir_name)
29 flags = msg.get_flags()
31 mb_counts['unread'] += 1
33 mb_counts['flagged'] += 1
37 def rows_from_mb_counts (source_string, mb_counts):
38 return pd.DataFrame({'time' : current_timestamp,
39 'source' : source_string,
40 'feature' : list(mb_counts.keys()),
41 'count' : list(mb_counts.values())})
43 data_email_personal = rows_from_mb_counts("default inbox",
44 get_flags_for_maildir("~/incoming/mail/default"))
46 data_email_uw = rows_from_mb_counts("UW inbox",
47 get_flags_for_maildir("~/incoming/mail/uw-inbox"))
50 caldav_client = caldav.DAVClient(caldav_url.format(pw=nimbus_password))
51 cal = caldav_client.principal().calendars()[0]
53 caldav_count = np.sum(["PERCENT-COMPLETE:100" not in c.data
54 for c in cal.todos(include_completed=True)])
56 data_nextcloud = pd.DataFrame({'time' : [current_timestamp],
57 'source' : ['nextcloud tasks'],
59 'count' : [caldav_count]})
61 ## write things out to the data file
62 pd.concat([data_original,
65 data_nextcloud]).to_csv(database_filename, index=False)