-
Notifications
You must be signed in to change notification settings - Fork 0
/
read.py
43 lines (34 loc) · 1.2 KB
/
read.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
from pathlib import Path
from icalendar import Calendar, Event
from datetime import datetime, date
import pytz
import re
def read():
root = Path('~/obsidian/primary/daily').expanduser()
cal = Calendar()
cal.add('prodid', '-//Export from obsidian-ical//j.yud.co.za//')
cal.add('version', '2.0')
for day in root.glob('*.md'):
daily_date = date.fromisoformat(day.stem)
lines = [
line.strip() for line in day.read_text().splitlines()
if line.strip()
]
while lines and not lines[0].endswith('plan'):
lines.pop(0)
assert lines
lines.pop(0)
plan_item = re.compile(r'^- \[(?:x|X| )\] (.*)')
tag_regex = re.compile(r'(?: |^)#([a-z0-9]+)\b')
while lines and (match := plan_item.match(lines.pop(0))):
entry = match.group(1)
tags = tag_regex.findall(entry)
if 'nocal' in tags:
continue
event = Event()
event.add('summary', entry)
event.add('dtstart', daily_date)
cal.add_component(event)
Path('~/obsidian/cal.ical').expanduser().write_bytes(cal.to_ical())
if __name__ == '__main__':
read()