From 824358f8463ac47c9eff44b2615987595c68fb4d Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Wed, 12 Nov 2025 18:18:17 +0100 Subject: [PATCH] CQ fixes --- .gitea/workflows/refresh_showcase_data.yml | 4 +- pyproject.toml | 4 + scripts/seed_showcase_data.py | 10 +- scripts/showcase_data_definitions.py | 117 ++++++++++----------- 4 files changed, 68 insertions(+), 67 deletions(-) diff --git a/.gitea/workflows/refresh_showcase_data.yml b/.gitea/workflows/refresh_showcase_data.yml index 9ac3637..5f3d2d8 100644 --- a/.gitea/workflows/refresh_showcase_data.yml +++ b/.gitea/workflows/refresh_showcase_data.yml @@ -3,13 +3,13 @@ name: Refresh Showcase Data on: schedule: # Run daily at 3 AM UTC - - cron: '0 3 * * *' + - cron: "0 3 * * *" workflow_dispatch: # Allow manual triggering jobs: refresh-data: runs-on: ubuntu-latest - + steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/pyproject.toml b/pyproject.toml index eef103a..0edb6d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,3 +71,7 @@ markers = [ [[tool.mypy.overrides]] module = "redis.*" ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "showcase_data_definitions.*" +ignore_missing_imports = true diff --git a/scripts/seed_showcase_data.py b/scripts/seed_showcase_data.py index 795349a..b7e2435 100644 --- a/scripts/seed_showcase_data.py +++ b/scripts/seed_showcase_data.py @@ -1,7 +1,6 @@ """Seed test data into the database for demo purposes.""" import sys -import os from pathlib import Path from datetime import datetime @@ -96,14 +95,18 @@ def seed_database(reference_time: datetime | None = None) -> None: if child_id is None: # Create new child - child_id = child_repo.create( + created_child = child_repo.create( name=child_data["name"], birth_time=child_data["birth_time"], birth_weight=child_data["birth_weight"], user_id=user_ids[0], ) + child_id = created_child["id"] print(f"✓ Created child '{child_data['name']}'") + # Ensure child_id is set + assert child_id is not None, "Child ID must be set at this point" + # Share child with second user if not already shared parent_ids = child_repo.get_parent_ids(child_id) if user_ids[1] not in parent_ids: @@ -111,9 +114,6 @@ def seed_database(reference_time: datetime | None = None) -> None: msg = f"✓ Shared child with '{test_data['users'][1]['username']}'" print(msg) - # Ensure child_id is set - assert child_id is not None, "Child ID must be set at this point" - # Clear existing logs to avoid duplicates print("Clearing existing logs...") diff --git a/scripts/showcase_data_definitions.py b/scripts/showcase_data_definitions.py index ea37a5c..397485d 100644 --- a/scripts/showcase_data_definitions.py +++ b/scripts/showcase_data_definitions.py @@ -1,6 +1,5 @@ """Definition of showcase data to be used for presenting the app.""" - from datetime import datetime, timedelta import random @@ -40,14 +39,14 @@ def get_feeding_schedule(reference_time: datetime) -> list[dict]: feedings: list[dict] = [] current_time = reference_time - timedelta(days=CHILD_AGE_DAYS) end_time = reference_time - + feeding_types = ["left_breast", "right_breast", "bottle"] - + # Day-by-day feeding patterns day_number = 0 while current_time < end_time: age_in_days = day_number - + # Newborns feed more frequently if age_in_days < 3: interval_hours = random.uniform(2, 2.5) @@ -58,39 +57,39 @@ def get_feeding_schedule(reference_time: datetime) -> list[dict]: else: interval_hours = random.uniform(3, 3.5) duration_minutes = random.randint(20, 35) - + # Alternate between breasts and occasional bottle if random.random() < 0.2: # 20% bottle feeding feeding_type = "bottle" else: # Alternate breasts feeding_type = feeding_types[len(feedings) % 2] - + start_time = current_time end_time_feeding = start_time + timedelta(minutes=duration_minutes) - - feedings.append({ - "start_time": start_time, - "end_time": end_time_feeding, - "feeding_type": feeding_type, - }) - + + feedings.append( + { + "start_time": start_time, + "end_time": end_time_feeding, + "feeding_type": feeding_type, + } + ) + current_time += timedelta(hours=interval_hours) - + # Move to next day - prev_date = ( - current_time - timedelta(hours=interval_hours) - ).date() + prev_date = (current_time - timedelta(hours=interval_hours)).date() if current_time.date() != prev_date: day_number += 1 - + return feedings def get_diaper_changes(reference_time: datetime) -> list[dict]: """ Generate realistic diaper changes for the last 14 days. - + - First 2-3 days: Black/dark (meconium), minimal pee - Days 3-5: Transition to yellow, more frequent - Days 5+: Regular yellow stools, normal pee patterns @@ -99,12 +98,12 @@ def get_diaper_changes(reference_time: datetime) -> list[dict]: diapers = [] current_time = reference_time - timedelta(days=CHILD_AGE_DAYS) end_time = reference_time - + day_number = 0 - + while current_time < end_time: age_in_days = day_number - + # Determine number of diaper changes per day based on age if age_in_days < 3: changes_per_day = random.randint(8, 10) @@ -112,32 +111,30 @@ def get_diaper_changes(reference_time: datetime) -> list[dict]: changes_per_day = random.randint(7, 9) else: changes_per_day = random.randint(6, 8) - + # Distribute changes throughout the day - day_start = current_time.replace( - hour=0, minute=0, second=0, microsecond=0 - ) + day_start = current_time.replace(hour=0, minute=0, second=0, microsecond=0) day_end = day_start + timedelta(days=1) - + for _ in range(changes_per_day): # Random time during the day random_seconds = random.randint(0, 86400) change_time = day_start + timedelta(seconds=random_seconds) - + if change_time >= end_time: break - + # Determine diaper contents has_poop = random.random() < 0.4 # 40% have poop # 90% have pee, or always if no poop has_pee = random.random() < 0.9 or not has_poop - + diaper = { "time": change_time, "has_poop": has_poop, "has_pee": has_pee, } - + # Poop characteristics based on age if has_poop: if age_in_days < 2: @@ -161,7 +158,7 @@ def get_diaper_changes(reference_time: datetime) -> list[dict]: else: amounts = ["medium", "heavy"] diaper["poop_amount"] = random.choice(amounts) - + # Pee characteristics based on age if has_pee: if age_in_days < 2: @@ -182,33 +179,35 @@ def get_diaper_changes(reference_time: datetime) -> list[dict]: diaper["pee_amount"] = random.choice(amounts) colors = ["clear", "yellow", "yellow"] diaper["pee_color"] = random.choice(colors) - + diapers.append(diaper) - + day_number += 1 current_time = day_end - - # Sort by time - diapers.sort(key=lambda x: x["time"]) + + # Sort by time (type: ignore for mypy - we know time is datetime) + diapers.sort( + key=lambda x: x["time"] # type: ignore[arg-type,return-value] + ) return diapers def get_sleep_sessions(reference_time: datetime) -> list[dict]: """ Generate realistic sleep patterns for the last 14 days. - + Newborns sleep 16-18 hours per day in short bursts (30min - 4 hours). Sleep gradually consolidates over time. """ sleep_sessions = [] current_time = reference_time - timedelta(days=CHILD_AGE_DAYS) end_time = reference_time - + day_number = 0 - + while current_time < end_time: age_in_days = day_number - + # Sleep patterns evolve with age if age_in_days < 3: # Very short, frequent naps @@ -222,37 +221,36 @@ def get_sleep_sessions(reference_time: datetime) -> list[dict]: # More consolidated sleep avg_wake_time = 2.5 sleep_duration_range = (60, 240) - + # Random wake time with variation - wake_minutes = random.randint( - int(avg_wake_time * 45), - int(avg_wake_time * 75) - ) - + wake_minutes = random.randint(int(avg_wake_time * 45), int(avg_wake_time * 75)) + # Sleep start time start_time = current_time + timedelta(minutes=wake_minutes) - + if start_time >= end_time: break - + # Sleep duration duration_minutes = random.randint(*sleep_duration_range) - + # Longer sleep at night if 20 <= start_time.hour or start_time.hour < 6: duration_minutes = int(duration_minutes * 1.3) - + end_time_sleep = start_time + timedelta(minutes=duration_minutes) - - sleep_sessions.append({ - "start_time": start_time, - "end_time": end_time_sleep, - }) - + + sleep_sessions.append( + { + "start_time": start_time, + "end_time": end_time_sleep, + } + ) + current_time = end_time_sleep birth_time = reference_time - timedelta(days=CHILD_AGE_DAYS) day_number = (current_time - birth_time).days - + return sleep_sessions @@ -269,7 +267,7 @@ def generate_showcase_data(reference_time: datetime | None = None) -> dict: """ if reference_time is None: reference_time = datetime.now() - + return { "users": SHOWCASE_USERS, "child": get_child_data(reference_time), @@ -278,4 +276,3 @@ def generate_showcase_data(reference_time: datetime | None = None) -> dict: "sleep": get_sleep_sessions(reference_time), "reference_time": reference_time, } -