Compare commits
2 Commits
d4067f5dca
...
96dda8ec5e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96dda8ec5e | ||
|
|
bf589d94b5 |
39
generate.py
39
generate.py
@@ -7,9 +7,17 @@ def generate_godword(value):
|
|||||||
def generate_habits(value):
|
def generate_habits(value):
|
||||||
return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items())
|
return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items())
|
||||||
|
|
||||||
|
def generate_notifications(value):
|
||||||
|
return '\n'.join(f'[[{n["source"]}]] {n["message"]}' for n in value)
|
||||||
|
|
||||||
|
def generate_tasks(value):
|
||||||
|
return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items())
|
||||||
|
|
||||||
header_modules = {
|
header_modules = {
|
||||||
'godword': generate_godword,
|
'godword': generate_godword,
|
||||||
'habits': generate_habits,
|
'habits': generate_habits,
|
||||||
|
'notifications': generate_notifications,
|
||||||
|
'tasks': generate_tasks,
|
||||||
}
|
}
|
||||||
|
|
||||||
def generate_diet(block):
|
def generate_diet(block):
|
||||||
@@ -24,13 +32,42 @@ def generate_default(block):
|
|||||||
return f'@{block["type"]} {block["value"]}'
|
return f'@{block["type"]} {block["value"]}'
|
||||||
|
|
||||||
def generate_timer(block):
|
def generate_timer(block):
|
||||||
return f'@{block["type"]} {format_timestamp(block["timestamp"])}'
|
parts = [f'@{block["type"]}']
|
||||||
|
|
||||||
|
if ts := block.get('timestamp'):
|
||||||
|
parts.append(format_timestamp(ts))
|
||||||
|
|
||||||
|
return ' '.join(parts)
|
||||||
|
|
||||||
|
def generate_info(block):
|
||||||
|
return f'@info {block["value"]}'
|
||||||
|
|
||||||
|
def generate_notes(block):
|
||||||
|
parts = ['@notes']
|
||||||
|
|
||||||
|
if source := block.get('source'):
|
||||||
|
parts.append(source)
|
||||||
|
if title := block.get('title'):
|
||||||
|
parts.append(title)
|
||||||
|
|
||||||
|
return '\n'.join(parts)
|
||||||
|
|
||||||
|
def generate_notify(block):
|
||||||
|
return f'@notify {block["day"]} {block["message"]}'
|
||||||
|
|
||||||
entry_modules = {
|
entry_modules = {
|
||||||
'diet': generate_diet,
|
'diet': generate_diet,
|
||||||
'exercise': generate_exercise,
|
'exercise': generate_exercise,
|
||||||
'hide': lambda _: '@hide',
|
'hide': lambda _: '@hide',
|
||||||
'post': generate_timer,
|
'post': generate_timer,
|
||||||
|
'info': generate_default,
|
||||||
|
'notes': generate_notes,
|
||||||
|
'behavior': generate_default,
|
||||||
|
'task': generate_default,
|
||||||
|
'start': generate_timer,
|
||||||
|
'stop': generate_timer,
|
||||||
|
'done': generate_timer,
|
||||||
|
'notify': generate_notify,
|
||||||
}
|
}
|
||||||
|
|
||||||
journal = json.load(open('journal.json'))
|
journal = json.load(open('journal.json'))
|
||||||
|
|||||||
@@ -23,6 +23,20 @@ words = (journal_path / 'godword').read_text().strip().split('\n')
|
|||||||
godword = '\n'.join(' '.join(random.choice(words)
|
godword = '\n'.join(' '.join(random.choice(words)
|
||||||
for __ in range(10)) for _ in range(2))
|
for __ in range(10)) for _ in range(2))
|
||||||
|
|
||||||
|
def parse_tasks_file():
|
||||||
|
result = []
|
||||||
|
|
||||||
|
tasks = (journal_path / 'tasks').read_text().splitlines()
|
||||||
|
|
||||||
|
for task in tasks:
|
||||||
|
days, name = task.split(':')
|
||||||
|
days = days.split(',')
|
||||||
|
result.append((days, name))
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
tasks_file = parse_tasks_file()
|
||||||
|
|
||||||
if not target_page.exists():
|
if not target_page.exists():
|
||||||
Popen(
|
Popen(
|
||||||
['bash', str(script_path / 'backup-script.sh'), current_date+'.zip'],
|
['bash', str(script_path / 'backup-script.sh'), current_date+'.zip'],
|
||||||
@@ -43,6 +57,16 @@ if not target_page.exists():
|
|||||||
block['message']
|
block['message']
|
||||||
))
|
))
|
||||||
|
|
||||||
|
tasks = []
|
||||||
|
curr_day = {
|
||||||
|
0: 'mo', 1: 'tu', 2: 'we', 3: 'th',
|
||||||
|
4: 'fr', 5: 'sa', 6: 'su',
|
||||||
|
}[datetime.now().weekday()]
|
||||||
|
|
||||||
|
for days, name in tasks_file:
|
||||||
|
if curr_day in days:
|
||||||
|
tasks.append(name)
|
||||||
|
|
||||||
parts = [
|
parts = [
|
||||||
f'# {target_page.stem}',
|
f'# {target_page.stem}',
|
||||||
f'Godword:\n{godword}',
|
f'Godword:\n{godword}',
|
||||||
@@ -56,6 +80,14 @@ if not target_page.exists():
|
|||||||
)
|
)
|
||||||
|
|
||||||
parts.append(f'Notifications:\n{notifications_rendered}')
|
parts.append(f'Notifications:\n{notifications_rendered}')
|
||||||
|
|
||||||
|
if tasks:
|
||||||
|
tasks_rendered = '\n'.join(
|
||||||
|
f'[-] {task}'
|
||||||
|
for task in tasks
|
||||||
|
)
|
||||||
|
|
||||||
|
parts.append(f'Tasks:\n{tasks_rendered}')
|
||||||
|
|
||||||
header = '\n\n'.join(parts) + '\n'
|
header = '\n\n'.join(parts) + '\n'
|
||||||
target_page.write_text(header)
|
target_page.write_text(header)
|
||||||
|
|||||||
8
parse.py
8
parse.py
@@ -29,11 +29,19 @@ def parse_notifications(notifications):
|
|||||||
})
|
})
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def parse_tasks(tasks):
|
||||||
|
result = {}
|
||||||
|
for task in tasks.splitlines():
|
||||||
|
value, name = task.split(maxsplit=1)
|
||||||
|
name = name.strip()
|
||||||
|
result[name] = value[1] == 'x'
|
||||||
|
return result
|
||||||
|
|
||||||
header_modules = {
|
header_modules = {
|
||||||
'godword': parse_godword,
|
'godword': parse_godword,
|
||||||
'habits': parse_habits,
|
'habits': parse_habits,
|
||||||
'notifications': parse_notifications,
|
'notifications': parse_notifications,
|
||||||
|
'tasks': parse_tasks,
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_header(header):
|
def parse_header(header):
|
||||||
|
|||||||
13
test.py
Normal file
13
test.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from generate import generate_page
|
||||||
|
from parse import parse_page
|
||||||
|
|
||||||
|
for fpath in list(sorted((Path.home() / 'workspace' / 'journal').glob('*.md'))):
|
||||||
|
text = fpath.read_text()
|
||||||
|
parsed = parse_page(text)
|
||||||
|
generated = generate_page(fpath.stem, parsed['header'], parsed['entries'])
|
||||||
|
for l1, l2 in zip(text.split('\n'), generated.split('\n')):
|
||||||
|
if l1 != l2:
|
||||||
|
print('\n'.join([fpath.stem, l1, l2]))
|
||||||
|
breakpoint()
|
||||||
Reference in New Issue
Block a user