|
23 | 23 | _LOGGER = logging.getLogger(__name__) |
24 | 24 |
|
25 | 25 |
|
| 26 | +def _safe_float(value, default: float) -> float: |
| 27 | + """Convert value to float, returning default on failure.""" |
| 28 | + try: |
| 29 | + return float(value) if value is not None else default |
| 30 | + except (ValueError, TypeError): |
| 31 | + return default |
| 32 | + |
| 33 | + |
| 34 | +def _safe_int(value, default: int) -> int: |
| 35 | + """Convert value to int, returning default on failure.""" |
| 36 | + try: |
| 37 | + return int(value) if value is not None else default |
| 38 | + except (ValueError, TypeError): |
| 39 | + return default |
| 40 | + |
| 41 | + |
26 | 42 | async def async_setup_entry( |
27 | 43 | hass: HomeAssistant, |
28 | 44 | entry: ConfigEntry, |
@@ -147,7 +163,7 @@ def extra_state_attributes(self) -> dict: |
147 | 163 | "completion_id": comp.id, |
148 | 164 | "chore_id": comp.chore_id, |
149 | 165 | "child_id": comp.child_id, |
150 | | - "child_name": child_lookup.get(comp.child_id, None) and child_lookup[comp.child_id].name or "", |
| 166 | + "child_name": child_lookup[comp.child_id].name if comp.child_id in child_lookup else "", |
151 | 167 | "chore_name": matched_chore.name if matched_chore else "", |
152 | 168 | "points": matched_chore.points if matched_chore else 0, |
153 | 169 | "approved": comp.approved, |
@@ -231,11 +247,11 @@ def extra_state_attributes(self) -> dict: |
231 | 247 | return { |
232 | 248 | "today_day_of_week": today_dow, |
233 | 249 | "streak_reset_mode": data.get("settings", {}).get("streak_reset_mode", "reset"), |
234 | | - "weekend_multiplier": float(data.get("settings", {}).get("weekend_multiplier", "2.0") or "2.0"), |
| 250 | + "weekend_multiplier": _safe_float(data.get("settings", {}).get("weekend_multiplier"), 2.0), |
235 | 251 | "streak_milestones_enabled": data.get("settings", {}).get("streak_milestones_enabled", "true") == "true", |
236 | 252 | "streak_milestones": data.get("settings", {}).get("streak_milestones", "3:5, 7:10, 14:20, 30:50, 60:100, 100:200"), |
237 | 253 | "perfect_week_enabled": data.get("settings", {}).get("perfect_week_enabled", "true") == "true", |
238 | | - "perfect_week_bonus": int(data.get("settings", {}).get("perfect_week_bonus", "50") or "50"), |
| 254 | + "perfect_week_bonus": _safe_int(data.get("settings", {}).get("perfect_week_bonus"), 50), |
239 | 255 | "total_children": len(children), |
240 | 256 | "total_chores": len(chores), |
241 | 257 | "total_rewards": len(rewards), |
|
0 commit comments