83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
from pathlib import Path
|
|
from datetime import datetime
|
|
from collections import Counter
|
|
from functools import reduce
|
|
import re
|
|
import string
|
|
|
|
import sys
|
|
|
|
do_yesterday = len(sys.argv) > 1
|
|
|
|
from common import parse_foods_file
|
|
|
|
foods, recipes = parse_foods_file()
|
|
|
|
entry_re = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ', re.MULTILINE)
|
|
diet_re = re.compile(r'@diet (\d+g) ([a-zA-Z]+)')
|
|
|
|
day_index = -2 if do_yesterday else -1
|
|
|
|
current_day = list(sorted((Path.home() / 'workspace' /
|
|
'journal').glob('*.md')))[day_index]
|
|
|
|
header, *tmp = entry_re.split(current_day.read_text())
|
|
entries = list(zip(tmp[::2], tmp[1::2]))
|
|
|
|
daily_grams = 0.0
|
|
daily_calories = 0.0
|
|
daily_protein = 0.0
|
|
|
|
for (timestamp, content) in sorted(entries, key=lambda x: x[0]):
|
|
content = '\n'.join(
|
|
part.replace('\n', ' ')
|
|
for part in content.split('\n\n')
|
|
)
|
|
|
|
has_printed = False
|
|
entry_calories = 0.0
|
|
entry_protein = 0.0
|
|
for diet in diet_re.finditer(content):
|
|
if not has_printed:
|
|
print(f'-- {timestamp}')
|
|
has_printed = True
|
|
|
|
value, name = diet.groups()
|
|
value = float(value.removesuffix('g'))
|
|
|
|
if name in recipes:
|
|
food = recipes[name]
|
|
|
|
if value == 0.0:
|
|
value = food['TOTAL']
|
|
|
|
food = {k: v*(value/food['TOTAL']) for k,v in food.items()}
|
|
elif name in foods:
|
|
if value == 0.0:
|
|
value = 100
|
|
|
|
food = {k: v*(value/100.0) for k,v in foods[name].items()}
|
|
else:
|
|
breakpoint()
|
|
print(f'ERROR: Invalid diet entry: {content}')
|
|
continue
|
|
|
|
protein = round(food.get('Protein', 0.0), 2)
|
|
calories = round(food.get('Energy', 0.0), 2)
|
|
|
|
entry_calories += calories
|
|
entry_protein += protein
|
|
|
|
print(f'{name:<20} {value:<6}g, {calories:<6}kcal, {protein:<6}g protein')
|
|
|
|
if has_printed:
|
|
entry_calories = round(entry_calories, 2)
|
|
entry_protein = round(entry_protein, 2)
|
|
print(f'-- TOTAL: {entry_calories}kcal, {entry_protein}g protein')
|
|
print()
|
|
|
|
daily_calories += entry_calories
|
|
daily_protein += entry_protein
|
|
|
|
print(f'-- DAILY TOTAL ({daily_calories}kcal, {daily_protein}g protein)')
|