mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
Phase 1.1 - TypedDict Documentation System: - Created sensor/types.py with 14 TypedDict classes documenting sensor attributes - Created binary_sensor/types.py with 3 TypedDict classes for binary sensors - Added Literal types (PriceLevel, PriceRating, VolatilityLevel, DataCompleteness) - Updated imports in sensor/attributes/__init__.py and binary_sensor/attributes.py - Changed function signatures to use dict[str, Any] for runtime flexibility - TypedDicts serve as IDE documentation, not runtime validation Phase 1.2 - BaseCalculator Improvements: - Added 8 smart data access methods to BaseCalculator: * get_intervals(day) - day-specific intervals with None-safety * intervals_today/tomorrow/yesterday - convenience properties * get_all_intervals() - combined yesterday+today+tomorrow * find_interval_at_offset(offset) - interval lookup with bounds checking * safe_get_from_interval(interval, key, default) - safe dict access * has_data() / has_price_info() - existence checks * get_day_intervals(day) - alias for consistency - Refactored 5 calculator files to use new helper methods: * daily_stat.py: -11 lines (coordinator_data checks, get_intervals usage) * interval.py: -18 lines (eliminated find_price_data_for_interval duplication) * rolling_hour.py: -3 lines (simplified interval collection) * volatility.py: -4 lines (eliminated price_info local variable) * window_24h.py: -2 lines (replaced coordinator_data check) * Total: -38 lines of duplicate code eliminated - Added noqa comment for lazy import (circular import avoidance) Type Duplication Resolution: - Identified duplication: Literal types in types.py vs string constants in const.py - Attempted solution: Derive constants from Literal types using typing.get_args() - Result: Circular import failure (const.py → sensor/types.py → sensor/__init__.py → const.py) - Final solution: Keep string constants as single source of truth - Added SYNC comments in all 3 files (const.py, sensor/types.py, binary_sensor/types.py) - Accept manual synchronization to avoid circular dependencies - Platform separation maintained (no cross-imports between sensor/ and binary_sensor/) Impact: Developers get IDE autocomplete and type hints for attribute dictionaries. Calculator code is more readable with fewer None-checks and clearer data access patterns. Type/constant duplication documented with sync requirements. |
||
|---|---|---|
| .. | ||
| attributes | ||
| calculators | ||
| __init__.py | ||
| chart_data.py | ||
| core.py | ||
| definitions.py | ||
| helpers.py | ||
| types.py | ||
| value_getters.py | ||