From 036910f06ff8bc157732745162fa31c0ec12cc4f Mon Sep 17 00:00:00 2001 From: jfm Date: Thu, 30 Oct 2025 10:15:01 +0100 Subject: [PATCH] Fixed missing fields --- pyproject.toml | 2 +- setup.py | 2 +- src/rapt/model/profile.py | 46 +++++++++--------- ...t_hydrometers_response_missing_fields.json | 48 +++++++++++++++++++ tests/test_hydrometer.py | 11 +++++ 5 files changed, 84 insertions(+), 25 deletions(-) create mode 100644 tests/json/get_hydrometers_response_missing_fields.json diff --git a/pyproject.toml b/pyproject.toml index 4f720f2..162e768 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "rapt-cloud-api" -version = "0.2.3" +version = "0.2.4" description = "Python bindings for the Rapt.io API" readme = "README.md" requires-python = ">=3.13" diff --git a/setup.py b/setup.py index 8285319..86ea942 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh: setup( name='rapt-cloud-api', - version='0.2.3', + version='0.2.4', author='Jesper Fussing Mørk', author_email='jfmo@moerks.dk', description='Client Library for the rapt.io api', diff --git a/src/rapt/model/profile.py b/src/rapt/model/profile.py index 2390cc4..a20bc09 100644 --- a/src/rapt/model/profile.py +++ b/src/rapt/model/profile.py @@ -80,11 +80,11 @@ class ProfileStepModel(RaptBaseModel): class ProfileSessionModel(RaptBaseModel): name: Optional[str] - description: Optional[str] - profile_id: Optional[UUID] = Field(alias="profileId") + description: Optional[str] = None + profile_id: Optional[UUID] = Field(alias="profileId", default=None) # profile: ProfileModel - brewzilla_id: Optional[UUID] = Field(alias="brewZillaId") - fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId") + brewzilla_id: Optional[UUID] = Field(alias="brewZillaId", default=None) + fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId", default=None) hydrometer_id: Optional[UUID] = Field(alias="hydrometerId") still_id: Optional[UUID] = Field(alias="stillId") temperature_controller_id: Optional[UUID] = Field(alias="temperatureControllerId") @@ -113,22 +113,22 @@ class ProfileModel(RaptBaseModel): class ProfileSessionStatusModel(RaptBaseModel): name: Optional[str] - description: Optional[str] - profile_id: Optional[UUID] = Field(alias="profileId") - profile: ProfileModel - brewzilla_id: Optional[UUID] = Field(alias="brewZillaId") - fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId") - hydrometer_id: Optional[UUID] = Field(alias="hydrometerId") - still_id: Optional[UUID] = Field(alias="stillId") - temperature_controller_id: Optional[UUID] = Field(alias="temperatureControllerId") - start_date: Optional[datetime] = Field(alias="startDate") - end_date: Optional[datetime] = Field(alias="endDate") - original_gravity: Optional[float] = Field(alias="originalGravity") - final_gravity: Optional[float] = Field(alias="finalGravity") - yeast_id: Optional[UUID] = Field(alias="yeastId") - yeast: YeastModel - sent_alerts: List[Optional[ProfileAlertModel]] = Field(alias="sentAlerts") - estimated_end_date: Optional[datetime] = Field(alias="estimatedEndDate") - profile_length: Optional[float] = Field(alias="profileLength") - current_profile_time: Optional[float] = Field(alias="currentProfileTime") - remaining_profile_time: Optional[float] = Field(alias="remainingProfileTime") + description: Optional[str] = None + profile_id: Optional[UUID] = Field(alias="profileId", default=None) + profile: Optional[ProfileModel] = None + brewzilla_id: Optional[UUID] = Field(alias="brewZillaId", default=None) + fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId", default=None) + hydrometer_id: Optional[UUID] = Field(alias="hydrometerId", default=None) + still_id: Optional[UUID] = Field(alias="stillId", default=None) + temperature_controller_id: Optional[UUID] = Field(alias="temperatureControllerId", default=None) + start_date: Optional[datetime] = Field(alias="startDate", default=None) + end_date: Optional[datetime] = Field(alias="endDate", default=None) + original_gravity: Optional[float] = Field(alias="originalGravity", default=None) + final_gravity: Optional[float] = Field(alias="finalGravity", default=None) + yeast_id: Optional[UUID] = Field(alias="yeastId", default=None) + yeast: Optional[YeastModel] = None + sent_alerts: List[Optional[ProfileAlertModel]] = Field(alias="sentAlerts", default=[]) + estimated_end_date: Optional[datetime] = Field(alias="estimatedEndDate", default=None) + profile_length: Optional[float] = Field(alias="profileLength", default=None) + current_profile_time: Optional[float] = Field(alias="currentProfileTime", default=None) + remaining_profile_time: Optional[float] = Field(alias="remainingProfileTime", default=None) diff --git a/tests/json/get_hydrometers_response_missing_fields.json b/tests/json/get_hydrometers_response_missing_fields.json new file mode 100644 index 0000000..d6676d0 --- /dev/null +++ b/tests/json/get_hydrometers_response_missing_fields.json @@ -0,0 +1,48 @@ +[ + { + "telemetry": [ + { + "temperature": 24.6875, + "gravity": 1018.35, + "gravityVelocity": 0.13616, + "battery": 100, + "version": "20250319_055542_b3788ba", + "id": "88a30cdb-3a3d-4ed1-8db1-fe82f53eb127", + "rowKey": "2516404896183910585", + "createdOn": "2025-10-30T07:59:41.6089414+00:00", + "macAddress": "ac-15-18-df-84-94", + "rssi": -83 + } + ], + "temperature": 24.6875, + "gravity": 1018.35, + "gravityVelocity": 0.13616, + "battery": 100, + "name": "Hegnsgården Yellow", + "macAddress": "ac-15-18-df-84-94", + "deviceType": "Hydrometer", + "active": false, + "disabled": false, + "lastActivityTime": "2025-10-30T07:59:41.6089414+00:00", + "rssi": -83, + "firmwareVersion": "20250319_055542_b3788ba", + "isLatestFirmware": false, + "activeProfileSession": { + "name": "Batch 1", + "hydrometerId": "2aa3b02c-78de-4715-8f5b-61bf7c3d1b62", + "startDate": "2025-10-26T07:05:43.257+00:00", + "modifiedOn": "2025-10-26T07:06:01.4699396+00:00", + "modifiedBy": "00000000-0000-0000-0000-000000000000", + "id": "3782039d-c829-465e-bb27-aff7bd50c2bb", + "deleted": false, + "createdOn": "2025-10-26T07:06:01.468437+00:00", + "createdBy": "475ebc33-8e90-4be5-2424-08ddfbe49482" + }, + "modifiedOn": "2025-10-30T07:59:41.61736+00:00", + "modifiedBy": "00000000-0000-0000-0000-000000000000", + "id": "2aa3b02c-78de-4715-8f5b-61bf7c3d1b62", + "deleted": false, + "createdOn": "2025-10-07T09:44:01.1515163+00:00", + "createdBy": "475ebc33-8e90-4be5-2424-08ddfbe49482" + } +] diff --git a/tests/test_hydrometer.py b/tests/test_hydrometer.py index af09178..0d97270 100644 --- a/tests/test_hydrometer.py +++ b/tests/test_hydrometer.py @@ -22,6 +22,17 @@ async def test_get_hydrometers(client): assert hydros is not None assert len(hydros) == 1 +async def test_get_hydrometers_missing_fields(client): + with aioresponses() as responses: + responses.post("https://id.rapt.io/connect/token", payload=json_reader("./tests/json/token_response.json")) + responses.get("https://api.rapt.io/api/hydrometers/gethydrometers", payload=json_reader("./tests/json/get_hydrometers_response_missing_fields.json")) + hydrometer = Hydrometer(client) + hydros = await hydrometer.get_hydrometers() + + assert hydros is not None + assert len(hydros) == 1 + + async def test_get_hydrometers_500(client): with aioresponses() as responses: responses.post("https://id.rapt.io/connect/token", payload=json_reader("./tests/json/token_response.json"))