from common import format_timestamp import json def generate_godword(value): return f"{' '.join(value[:10])}\n{' '.join(value[10:])}" def generate_habits(value): 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) header_modules = { 'godword': generate_godword, 'habits': generate_habits, 'notifications': generate_notifications, } def generate_diet(block): _, amount, food = block.values() return f'@diet {amount}g {food}' def generate_exercise(block): if block['kind'] == 'walk': return f'@exercise {block["minutes"]}min {block["distance"]}km {block["steps"]}steps' def generate_default(block): return f'@{block["type"]} {block["value"]}' def generate_timer(block): 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 = { 'diet': generate_diet, 'exercise': generate_exercise, 'hide': lambda _: '@hide', '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')) for curr_day in journal: header, entries = journal[curr_day].values() result = f'# {curr_day}\n' for name, value in header.items(): result += f'\n{name.title()}:\n' result += header_modules[name](value) result += '\n' def format_block(block): if isinstance(block, str): return block else: return entry_modules[block['type']](block) for entry in entries: result += f'\n{format_timestamp(entry["timestamp"])} ' if len(entry['blocks']) == 1: result += f'{format_block(entry["blocks"][0])}\n' else: result += '\n' for block in entry['blocks']: result += f'\n{format_block(block)}\n' print(result)