fix: convert PostgreSQL Decimal to float for math operations
Fixed TypeError when preparing AI prompt template variables. PostgreSQL returns NUMERIC columns as decimal.Decimal, not float. **Fixed in _prepare_template_vars:** - Weight calculations (protein targets, delta) - Nutrition averages (kcal, protein, fat, carbs) - Activity totals (kcal_active) All Decimal values now converted to float before math operations. Error was: "TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float'" Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8e25b54cc2
commit
f7f7f745b1
|
|
@ -790,7 +790,7 @@ def _prepare_template_vars(data: dict) -> dict:
|
||||||
# Weight trend summary
|
# Weight trend summary
|
||||||
if len(weight) >= 2:
|
if len(weight) >= 2:
|
||||||
recent = weight[:30]
|
recent = weight[:30]
|
||||||
delta = recent[0]['weight'] - recent[-1]['weight']
|
delta = float(recent[0]['weight']) - float(recent[-1]['weight'])
|
||||||
vars['weight_trend'] = f"{len(recent)} Einträge, Δ30d: {delta:+.1f}kg"
|
vars['weight_trend'] = f"{len(recent)} Einträge, Δ30d: {delta:+.1f}kg"
|
||||||
else:
|
else:
|
||||||
vars['weight_trend'] = "zu wenig Daten"
|
vars['weight_trend'] = "zu wenig Daten"
|
||||||
|
|
@ -815,15 +815,15 @@ def _prepare_template_vars(data: dict) -> dict:
|
||||||
# Nutrition summary
|
# Nutrition summary
|
||||||
if nutrition:
|
if nutrition:
|
||||||
n = len(nutrition)
|
n = len(nutrition)
|
||||||
avg_kcal = sum(d.get('kcal',0) for d in nutrition) / n
|
avg_kcal = sum(float(d.get('kcal',0) or 0) for d in nutrition) / n
|
||||||
avg_prot = sum(d.get('protein_g',0) for d in nutrition) / n
|
avg_prot = sum(float(d.get('protein_g',0) or 0) for d in nutrition) / n
|
||||||
vars['nutrition_summary'] = f"{n} Tage, Ø {avg_kcal:.0f}kcal, {avg_prot:.0f}g Protein"
|
vars['nutrition_summary'] = f"{n} Tage, Ø {avg_kcal:.0f}kcal, {avg_prot:.0f}g Protein"
|
||||||
vars['nutrition_detail'] = vars['nutrition_summary']
|
vars['nutrition_detail'] = vars['nutrition_summary']
|
||||||
vars['nutrition_days'] = n
|
vars['nutrition_days'] = n
|
||||||
vars['kcal_avg'] = round(avg_kcal)
|
vars['kcal_avg'] = round(avg_kcal)
|
||||||
vars['protein_avg'] = round(avg_prot,1)
|
vars['protein_avg'] = round(avg_prot,1)
|
||||||
vars['fat_avg'] = round(sum(d.get('fat_g',0) for d in nutrition) / n,1)
|
vars['fat_avg'] = round(sum(float(d.get('fat_g',0) or 0) for d in nutrition) / n,1)
|
||||||
vars['carb_avg'] = round(sum(d.get('carbs_g',0) for d in nutrition) / n,1)
|
vars['carb_avg'] = round(sum(float(d.get('carbs_g',0) or 0) for d in nutrition) / n,1)
|
||||||
else:
|
else:
|
||||||
vars['nutrition_summary'] = "keine Daten"
|
vars['nutrition_summary'] = "keine Daten"
|
||||||
vars['nutrition_detail'] = "keine Daten"
|
vars['nutrition_detail'] = "keine Daten"
|
||||||
|
|
@ -835,13 +835,14 @@ def _prepare_template_vars(data: dict) -> dict:
|
||||||
|
|
||||||
# Protein targets
|
# Protein targets
|
||||||
w = weight[0]['weight'] if weight else prof.get('height',178) - 100
|
w = weight[0]['weight'] if weight else prof.get('height',178) - 100
|
||||||
|
w = float(w) # Convert Decimal to float for math operations
|
||||||
vars['protein_ziel_low'] = round(w * 1.6)
|
vars['protein_ziel_low'] = round(w * 1.6)
|
||||||
vars['protein_ziel_high'] = round(w * 2.2)
|
vars['protein_ziel_high'] = round(w * 2.2)
|
||||||
|
|
||||||
# Activity summary
|
# Activity summary
|
||||||
if activity:
|
if activity:
|
||||||
n = len(activity)
|
n = len(activity)
|
||||||
total_kcal = sum(a.get('kcal_active',0) for a in activity)
|
total_kcal = sum(float(a.get('kcal_active',0) or 0) for a in activity)
|
||||||
vars['activity_summary'] = f"{n} Trainings, {total_kcal:.0f}kcal gesamt"
|
vars['activity_summary'] = f"{n} Trainings, {total_kcal:.0f}kcal gesamt"
|
||||||
vars['activity_detail'] = vars['activity_summary']
|
vars['activity_detail'] = vars['activity_summary']
|
||||||
vars['activity_kcal_summary'] = f"Ø {total_kcal/n:.0f}kcal/Training"
|
vars['activity_kcal_summary'] = f"Ø {total_kcal/n:.0f}kcal/Training"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user