Update antfarm, dashboard, memory +1 more (+20 ~12 -6)

This commit is contained in:
Echo
2026-02-11 07:37:09 +00:00
parent 1e1f5baf9b
commit 6b1705bbea
83 changed files with 8231 additions and 1506 deletions

View File

@@ -117,92 +117,34 @@ def _calculate_specific_days_streak(habit: Dict[str, Any], completions: List[Dic
def _calculate_x_per_week_streak(habit: Dict[str, Any], completions: List[Dict[str, Any]]) -> int:
"""Calculate streak for x_per_week habits (consecutive weeks meeting target)."""
target_count = habit.get("frequency", {}).get("count", 1)
streak = 0
today = datetime.now().date()
# Group completions by week
week_counts = {}
for completion in completions:
completion_date = datetime.fromisoformat(completion["date"]).date()
# Get ISO week (year, week_number)
week_key = completion_date.isocalendar()[:2]
week_counts[week_key] = week_counts.get(week_key, 0) + 1
# Start from current week and count backwards
current_week = today.isocalendar()[:2]
while current_week in week_counts:
if week_counts[current_week] >= target_count:
streak += 1
# Move to previous week
year, week = current_week
if week == 1:
year -= 1
week = 52
else:
week -= 1
current_week = (year, week)
else:
break
return streak
"""Calculate streak for x_per_week habits (consecutive days with check-ins).
For x_per_week habits, streak counts consecutive DAYS with check-ins,
not consecutive weeks meeting the target. The weekly target (e.g., 4/week)
is a goal, but streak measures the chain of check-in days.
"""
# Use the same logic as daily habits - count consecutive check-in days
return _calculate_daily_streak(completions)
def _calculate_weekly_streak(completions: List[Dict[str, Any]]) -> int:
"""Calculate streak for weekly habits (consecutive weeks with at least one check)."""
today = datetime.now().date()
# Group completions by week
weeks_with_checks = set()
for completion in completions:
completion_date = datetime.fromisoformat(completion["date"]).date()
week_key = completion_date.isocalendar()[:2]
weeks_with_checks.add(week_key)
streak = 0
current_week = today.isocalendar()[:2]
while current_week in weeks_with_checks:
streak += 1
year, week = current_week
if week == 1:
year -= 1
week = 52
else:
week -= 1
current_week = (year, week)
return streak
"""Calculate streak for weekly habits (consecutive days with check-ins).
For weekly habits, streak counts consecutive DAYS with check-ins,
just like daily habits. The weekly frequency just means you should
check in at least once per week.
"""
return _calculate_daily_streak(completions)
def _calculate_monthly_streak(completions: List[Dict[str, Any]]) -> int:
"""Calculate streak for monthly habits (consecutive months with at least one check)."""
today = datetime.now().date()
# Group completions by month
months_with_checks = set()
for completion in completions:
completion_date = datetime.fromisoformat(completion["date"]).date()
month_key = (completion_date.year, completion_date.month)
months_with_checks.add(month_key)
streak = 0
current_month = (today.year, today.month)
while current_month in months_with_checks:
streak += 1
year, month = current_month
if month == 1:
year -= 1
month = 12
else:
month -= 1
current_month = (year, month)
return streak
"""Calculate streak for monthly habits (consecutive days with check-ins).
For monthly habits, streak counts consecutive DAYS with check-ins,
just like daily habits. The monthly frequency just means you should
check in at least once per month.
"""
return _calculate_daily_streak(completions)
def _calculate_custom_streak(habit: Dict[str, Any], completions: List[Dict[str, Any]]) -> int: