Skip to content

Commit 6e43299

Browse files
committed
Improving typing conventions
1 parent e563814 commit 6e43299

2 files changed

Lines changed: 16 additions & 23 deletions

File tree

python_snoo/baby.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from typing import AsyncGenerator
12
from datetime import datetime
23

3-
from python_snoo.containers import Activity, BabyData, DiaperActivity, DiaperTypes, parse_activities_from_list
4+
from python_snoo.containers import Activity, BabyData, BreastfeedingActivity, DiaperActivity, DiaperTypes
45
from python_snoo.exceptions import SnooBabyError
56
from python_snoo.snoo import Snoo
67

@@ -51,10 +52,22 @@ async def get_activity_data(self, from_date: datetime, to_date: datetime) -> lis
5152
if r.status < 200 or r.status >= 300:
5253
raise SnooBabyError(f"Failed to get activity data: {r.status}: {resp}. Payload: {params}")
5354

55+
activities: list[Activity] = []
5456
if isinstance(resp, list):
55-
return parse_activities_from_list(resp)
57+
for activity in resp:
58+
activity_type = activity.get("type", "").lower()
59+
60+
if activity_type == "diaper":
61+
activities.append(DiaperActivity.from_dict(activity))
62+
elif activity_type == "breastfeeding":
63+
activities.append(BreastfeedingActivity.from_dict(activity))
64+
else:
65+
# Other activity types exist but aren't supported yet
66+
raise SnooBabyError(f"Unknown activity type: {activity_type}")
5667
else:
5768
raise SnooBabyError(f"Unexpected response format: {type(resp)}")
69+
70+
return activities
5871

5972
except Exception as ex:
6073
raise SnooBabyError from ex
@@ -81,16 +94,14 @@ async def log_diaper_change(
8194
if start_time.tzinfo is None:
8295
start_time = start_time.astimezone()
8396

84-
start_time = start_time.isoformat(timespec="milliseconds")
85-
8697
hdrs = self.snoo.generate_snoo_auth_headers(self.snoo.tokens.aws_id)
8798
url = f"{self.activity_base_url}/journals"
8899

89100
payload = {
90101
"babyId": self.baby_id,
91102
"data": {"types": [dt.value for dt in diaper_types]},
92103
"type": "diaper",
93-
"startTime": start_time,
104+
"startTime": start_time.isoformat(timespec="milliseconds"),
94105
}
95106

96107
if note:

python_snoo/containers.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -198,22 +198,4 @@ class BreastfeedingActivity(DataClassJSONMixin):
198198
createdAt: str
199199
updatedAt: str
200200

201-
202-
# Union type for all activity types
203201
Activity = Union[DiaperActivity, BreastfeedingActivity]
204-
205-
206-
def parse_activity_from_dict(data: dict) -> Activity:
207-
activity_type = data.get("type", "").lower()
208-
209-
if activity_type == "diaper":
210-
return DiaperActivity.from_dict(data)
211-
elif activity_type == "breastfeeding":
212-
return BreastfeedingActivity.from_dict(data)
213-
else:
214-
raise ValueError(f"Unknown activity type: {activity_type}")
215-
216-
217-
def parse_activities_from_list(activities_data: list) -> list[Activity]:
218-
"""Parse a list of activity dictionaries into typed objects"""
219-
return [parse_activity_from_dict(activity) for activity in activities_data]

0 commit comments

Comments
 (0)