diff --git a/src/pylibrelinkup/models/connection.py b/src/pylibrelinkup/models/connection.py index c789b53..0a2d5b1 100644 --- a/src/pylibrelinkup/models/connection.py +++ b/src/pylibrelinkup/models/connection.py @@ -7,7 +7,7 @@ from .base import ConfigBaseModel from .config import AlarmRules -from .data import GlucoseMeasurement +from .data import GlucoseMeasurement, GlucoseMeasurementWithTrend from .hardware import ActiveSensor, PatientDevice, Sensor __all__ = ["GraphResponse", "LogbookResponse"] @@ -29,7 +29,7 @@ class Connection(ConfigBaseModel): uom: int = Field(default=0) sensor: Sensor alarm_rules: AlarmRules - glucose_measurement: GlucoseMeasurement + glucose_measurement: GlucoseMeasurementWithTrend = Field(alias="glucoseMeasurement") glucose_item: GlucoseMeasurement glucose_alarm: None patient_device: PatientDevice diff --git a/src/pylibrelinkup/models/data.py b/src/pylibrelinkup/models/data.py index 46cecb0..2ad2785 100644 --- a/src/pylibrelinkup/models/data.py +++ b/src/pylibrelinkup/models/data.py @@ -10,7 +10,7 @@ "Patient", "Trend", "GlucoseMeasurement", - "GlucoseMeasurementTrend", + "GlucoseMeasurementWithTrend", "F", "L", "H", @@ -43,6 +43,17 @@ class Trend(IntEnum): UP_SLOW = 4 UP_FAST = 5 + @property + def indicator(self) -> str: + arrow_map: dict[Trend, str] = { + Trend.DOWN_FAST: "↓", + Trend.DOWN_SLOW: "↘", + Trend.STABLE: "→", + Trend.UP_SLOW: "↗", + Trend.UP_FAST: "↑", + } + return arrow_map[self] + class GlucoseMeasurement(ConfigBaseModel): """GlucoseMeasurement class to store glucose measurement data.""" @@ -84,13 +95,6 @@ def parse_timestamp(cls, v: str, info: ValidationInfo): return datetime_value -class GlucoseMeasurementTrend(GlucoseMeasurement): - trend_arrow: Trend - - def __str__(self): - return f"{super().__str__()} {self.trend_arrow}" - - class F(ConfigBaseModel): """F class to store F data.""" @@ -132,3 +136,7 @@ class Std(ConfigBaseModel): """Std class to store Std data.""" sd: bool | None = Field(default=None) + + +class GlucoseMeasurementWithTrend(GlucoseMeasurement): + trend: Trend = Field(default=Trend.STABLE) diff --git a/tests/test_client_latest.py b/tests/test_client_latest.py index f983cee..f0d6aa9 100644 --- a/tests/test_client_latest.py +++ b/tests/test_client_latest.py @@ -4,7 +4,7 @@ import responses from pylibrelinkup import AuthenticationError, PatientNotFoundError -from pylibrelinkup.models.data import GlucoseMeasurement +from pylibrelinkup.models.data import GlucoseMeasurementWithTrend, Trend from tests.conftest import graph_response_json from tests.factories import PatientFactory @@ -34,7 +34,7 @@ def test_latest_returns_glucose_measurement_for_valid_uuid( result = pylibrelinkup_client.client.latest(patient_id) - assert isinstance(result, GlucoseMeasurement) + assert isinstance(result, GlucoseMeasurementWithTrend) assert ( result.value_in_mg_per_dl @@ -42,6 +42,7 @@ def test_latest_returns_glucose_measurement_for_valid_uuid( "ValueInMgPerDl" ] ) + assert result.trend == Trend.STABLE def test_latest_returns_glucose_measurement_for_valid_patient( @@ -61,7 +62,7 @@ def test_latest_returns_glucose_measurement_for_valid_patient( result = pylibrelinkup_client.client.latest(patient) - assert isinstance(result, GlucoseMeasurement) + assert isinstance(result, GlucoseMeasurementWithTrend) assert ( result.value_in_mg_per_dl @@ -69,6 +70,7 @@ def test_latest_returns_glucose_measurement_for_valid_patient( "ValueInMgPerDl" ] ) + assert result.trend == Trend.STABLE def test_latest_returns_glucose_measurement_for_valid_string( @@ -88,7 +90,7 @@ def test_latest_returns_glucose_measurement_for_valid_string( result = pylibrelinkup_client.client.latest(patient_id) - assert isinstance(result, GlucoseMeasurement) + assert isinstance(result, GlucoseMeasurementWithTrend) assert ( result.value_in_mg_per_dl @@ -96,6 +98,7 @@ def test_latest_returns_glucose_measurement_for_valid_string( "ValueInMgPerDl" ] ) + assert result.trend == Trend.STABLE def test_latest_raises_value_error_for_invalid_uuid_string( @@ -133,7 +136,7 @@ def test_latest_response_no_sd_returns_glucose_measurement( result = pylibrelinkup_client.client.latest(patient_id) - assert isinstance(result, GlucoseMeasurement) + assert isinstance(result, GlucoseMeasurementWithTrend) assert ( result.value_in_mg_per_dl @@ -141,6 +144,7 @@ def test_latest_response_no_sd_returns_glucose_measurement( "ValueInMgPerDl" ] ) + assert result.trend == Trend.STABLE def test_latest_response_no_alarm_rules_c_returns_glucose_measurement( @@ -160,13 +164,14 @@ def test_latest_response_no_alarm_rules_c_returns_glucose_measurement( result = pylibrelinkup_client.client.latest(patient_id) - assert isinstance(result, GlucoseMeasurement) + assert isinstance(result, GlucoseMeasurementWithTrend) assert ( result.value_in_mg_per_dl == graph_response_no_alarm_rules_c_json["data"]["connection"][ "glucoseMeasurement" ]["ValueInMgPerDl"] ) + assert result.trend == Trend.STABLE def test_latest_patient_not_found_raises_patient_not_found_error(