This commit is contained in:
olari
2021-05-31 12:47:57 +03:00
parent 3aef7c4133
commit a10d3e1326
3 changed files with 84 additions and 103 deletions

72
foods
View File

@@ -1,4 +1,52 @@
Cereal
Energy 373kcal
Fat 1.4g
SaturatedFat 0.4g
Carbs 78g
Sugar 13.9g
Fiber 7.1g
Protein 8.5g
Salt 0.39g
SadonkorjuuPuuro
Energy 385kcal
Fat 11g
SaturatedFat 1.7g
Carbs 51g
Sugar 1.1g
Fiber 11g
Protein 14g
DaimCake
Energy 446kcal
Fat 28g
SaturatedFat 9.3g
Carbs 39g
Sugar 37g
Protein 9.1g
Salt 0.35g
KaneliKierre
Energy 350kcal
Fat 14g
SaturatedFat 5.6g
Carbs 55g
Sugar 20g
Fiber 2g
Protein 6g
Salt 0.7g
Munkki
Energy 395kcal
Fat 23g
SaturatedFat 10g
Carbs 39g
Sugar 9.6g
Fiber 2.7g
Protein 5.8g
Salt 0.5g
ProteinRakha ProteinRakha
Energy 67kcal Energy 67kcal
Fat 0.2g Fat 0.2g
@@ -693,6 +741,10 @@ Milk 180g
Potato 1000g Potato 1000g
TOTAL 1300g TOTAL 1300g
MashedPotato3
Potato 1050g
Milk 350g
Blov Blov
BrownRice 600g BrownRice 600g
Ketchup 250g Ketchup 250g
@@ -791,6 +843,12 @@ Milk 240g
Egg 65g Egg 65g
GrahamFlour 60g GrahamFlour 60g
VegeKotlet2
HarkisRouheseos 200g
Milk 450g
WholeGrainBread 50g
Flour 90g
RoastedVeggies2 RoastedVeggies2
Broccoli 300g Broccoli 300g
Oil 70g Oil 70g
@@ -804,9 +862,23 @@ PeasCornPepper 200g
Ketchup 100g Ketchup 100g
TOTAL 760g TOTAL 760g
BeanitHarkisVeggies2
Oil 40g
BeanitHarkis 250g
PeasCornPepper 220g
Ketchup 100g
TOTAL 740g
Pancake Pancake
SkimMilk 430g SkimMilk 430g
Water 300g Water 300g
Oil 30g Oil 30g
Flour 430g Flour 430g
Sugar 20g Sugar 20g
SadonkorjuuPuuroBoiled
SadonkorjuuPuuro 160g
SkimMilk 100g
Margarine 20g
TOTAL 788

View File

@@ -7,27 +7,11 @@ from common import parse_timestamp
content = open(sys.argv[1]).read().strip() content = open(sys.argv[1]).read().strip()
"""
* Total hours
* Hours today
* Hours this week
* Percentage completed
* Pages completed
* Estimated hours to completion
* Estimated completion date
"""
lines = content.splitlines() lines = content.splitlines()
i = 0
current_chapter = '' current_chapter = ''
result = defaultdict(float)
total_chapters = 0 total_chapters = 0
completed_chapters = 0 completed_chapters = set()
today = datetime.now().replace(hour=0,minute=0,second=0,microsecond=0) today = datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)
this_week = today - timedelta(days=7) this_week = today - timedelta(days=7)
@@ -38,13 +22,17 @@ week_hours = 0.0
oldest_timestamp = datetime.now() oldest_timestamp = datetime.now()
i = 0
while i < len(lines): while i < len(lines):
line = lines[i].strip() line = lines[i].strip()
if line.startswith('#'): if line.startswith('#'):
current_chapter = line[line.find(' ')+1:] current_chapter = line[line.find(' ')+1:]
total_chapters += 1 total_chapters += 1
elif line.startswith('@start'): else:
completed_chapters.add(current_chapter)
if line.startswith('@start'):
start = parse_timestamp(line.removeprefix('@start ')) start = parse_timestamp(line.removeprefix('@start '))
if start < oldest_timestamp: if start < oldest_timestamp:
@@ -54,28 +42,18 @@ while i < len(lines):
line = lines[i].strip() line = lines[i].strip()
end = parse_timestamp(line.removeprefix('@stop ')) end = parse_timestamp(line.removeprefix('@stop '))
delta = end - start delta = end - start
hours = delta.seconds / 60 / 60 hours = delta.seconds / 60 / 60
result[current_chapter] += hours
total_hours += hours total_hours += hours
if start > this_week: if start > this_week:
week_hours += hours week_hours += hours
if start > today: if start > today:
day_hours += hours day_hours += hours
elif line.startswith('@done'):
completed_chapters += 1
i += 1 i += 1
#from pprint import pprint completed_chapters = len(completed_chapters)
#pprint(dict(result), sort_dicts=False)
num_days = (datetime.now() - oldest_timestamp).days or 1 num_days = (datetime.now() - oldest_timestamp).days or 1
hours_per_day = total_hours / num_days hours_per_day = total_hours / num_days

View File

@@ -7,88 +7,19 @@ import string
import sys import sys
def parse_foods_file(): do_yesterday = len(sys.argv) > 1
path = Path.home() / 'projects' / 'open-journal' / 'foods'
text = path.read_text()
foods, recipes = text.split('---')
def parse_macro(macro): from common import parse_foods_file
if macro == '...':
return ('INVALID', 0.0)
name, value = macro.split()
value = float(value.removesuffix('g').removesuffix('kcal'))
return (name, value)
foods = {
macros[0]: dict(parse_macro(macro) for macro in macros[1:])
for macros in [food.split('\n') for food in foods.strip().split('\n\n')]
}
def combine_values(fst, snd):
result = fst.copy()
for k,v in snd.items():
if k in fst:
result[k] += v
else:
result[k] = v
return result
def evaluate_ingredients(ingredients):
result = {}
total_weight = 0.0
for ingredient in ingredients:
k,v = parse_macro(ingredient)
if k == 'TOTAL':
result[k] = v
break
else:
total_weight += v
food = foods[k]
for kk,vv in food.items():
if kk not in result:
result[kk] = 0.0
result[kk] += vv * (v/100.0)
if 'TOTAL' not in result:
result['TOTAL'] = total_weight
return result
recipes = {
ingredients[0]: evaluate_ingredients(ingredients[1:])
for ingredients in [
recipe.split('\n') for recipe in recipes.strip().split('\n\n')
]
}
def get_calories_from_macros(mm):
calories = 0.0
for k,v in mm.items():
calories += v * {
'Carbs': 4,
'Fat': 9,
'Protein': 4
}.get(k, 0.0)
return calories
#for k,v in foods.items():
# print(round(v.get('Energy') - get_calories_from_macros(v)), k)
return foods, recipes
foods, recipes = 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) 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]+)') 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' / current_day = list(sorted((Path.home() / 'workspace' /
'journal').glob('*.md')))[-1] 'journal').glob('*.md')))[day_index]
header, *tmp = entry_re.split(current_day.read_text()) header, *tmp = entry_re.split(current_day.read_text())
entries = list(zip(tmp[::2], tmp[1::2])) entries = list(zip(tmp[::2], tmp[1::2]))